From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59324) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UpfnZ-00035D-Nr for qemu-devel@nongnu.org; Thu, 20 Jun 2013 10:25:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UpfnT-0000KL-AC for qemu-devel@nongnu.org; Thu, 20 Jun 2013 10:25:17 -0400 Received: from nodalink.pck.nerim.net ([62.212.105.220]:37515 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UpfnT-0000KF-0e for qemu-devel@nongnu.org; Thu, 20 Jun 2013 10:25:11 -0400 From: =?UTF-8?q?Beno=C3=AEt=20Canet?= Date: Thu, 20 Jun 2013 16:26:09 +0200 Message-Id: <1371738392-9594-2-git-send-email-benoit@irqsave.net> In-Reply-To: <1371738392-9594-1-git-send-email-benoit@irqsave.net> References: <1371738392-9594-1-git-send-email-benoit@irqsave.net> Subject: [Qemu-devel] [RFC V8 01/24] qcow2: Add journal specification. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, =?UTF-8?q?Beno=C3=AEt=20Canet?= , stefanha@redhat.com --- docs/specs/qcow2.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/docs/specs/qcow2.txt b/docs/specs/qcow2.txt index 36a559d..a4ffc85 100644 --- a/docs/specs/qcow2.txt +++ b/docs/specs/qcow2.txt @@ -350,3 +350,45 @@ Snapshot table entry: variable: Unique ID string for the snapshot (not null terminated) variable: Name of the snapshot (not null terminated) + +== Journal == + +QCOW2 can use one or more instance of a metadata journal. + +A journal is a sequential log of journal entries appended on a previously +allocated and reseted area. +A journal is designed like a linked list with each entry pointing to the next +so it's easy to iterate over entries. + +A journal uses the following constants to denote the type of each entry + +TYPE_NONE = 0xFF default value of any bytes in a reseted journal +TYPE_END = 1 the entry ends a journal cluster and point to the next + cluster +TYPE_HASH = 2 the entry contains a deduplication hash + +QCOW2 journal entry: + + Byte 0 : Size of the entry: size = 2 + n with size <= 254 + + 1 : Type of the entry + + 2 - size : The optional n bytes structure carried by entry + +A journal is divided into clusters and no journal entry can be spilled on two +clusters. This avoid having to read more than one cluster to get a single entry. + +For this purpose an entry with the end type is added at the end of a journal +cluster before starting to write in the next cluster. +The size of such an entry is set so the entry points to the next cluster. + +As any journal cluster must be ended with an end entry the size of regular +journal entries is limited to 254 bytes in order to always left room for an end +entry which mimimal size is two bytes. + +The only cases where size > 254 are none entries where size = 255. + +The replay of a journal stop when the first end none entry is reached. + +The journal cluster size is 4096 bytes. + -- 1.7.10.4