@@ -80,7 +80,10 @@ in the description of a field.
tables to repair refcounts before accessing the
- Bits 1-63: Reserved (set to 0)
+ Bit 1: Deduplication bit. If this bit is set then
+ deduplication is used on this image.
+ Bits 2-63: Reserved (set to 0)
80 - 87: compatible_features
Bitmask of compatible features. An implementation can
@@ -116,6 +119,7 @@ be stored. Each extension has a structure like the following:
0x00000000 - End of the header extension area
0xE2792ACA - Backing file format name
0x6803f857 - Feature name table
+ 0xCD8E819B - Deduplication
other - Unknown header extension, can be safely
@@ -159,6 +163,33 @@ the header extension data. Each entry look like this:
terminated if it has full length)
+== Deduplication ==
+The deduplication extension contains the offset and size of the deduplication
+ Byte 0 - 7: Offset
+ 8 - 11: Size
+== Deduplication table ==
+The deduplication table contains 64 bits offsets to the level 2 deduplication
+Each entry of these clusters contains a 32 bytes SHA256 hash followed by the
+64 bits logical offset of the first encountered block having this hash.
+Entries in the deduplication table are orderered by physical cluster index.
+The number of entries in an l2 deduplication table cluster is :
+l2_dedup_cluster_entries = cluster_size / (32 + 8)
+The index in the level 1 deduplication table is :
+l1_dedup_index = physical_cluster_index / l2_dedup_cluster_entries
+The index in the level 2 deduplication table is:
+l2_dedup_index = physical_cluster_index % l2_dedup_cluster_entries
== Host cluster management ==
qcow2 manages the allocation of host clusters by maintaining a reference count