X-Git-Url: https://git.proxmox.com/?p=pve-qemu-kvm.git;a=blobdiff_plain;f=vma_spec.txt;fp=vma_spec.txt;h=0000000000000000000000000000000000000000;hp=a99f5f9beafecc01a19c3a33a0eb54baf4acf9a0;hb=e8d0924679a5d7a3acfc128a1140ffdef0269338;hpb=dcfd9c72bc5bb92f7715f7eb52e6610bc629a1c8 diff --git a/vma_spec.txt b/vma_spec.txt deleted file mode 100644 index a99f5f9..0000000 --- a/vma_spec.txt +++ /dev/null @@ -1,132 +0,0 @@ -= Virtual Machine Archive format (VMA) = - -This format contains a header which includes the VM configuration as -binary blobs, and a list of devices (dev_id, name). - -The actual VM image data is stored inside extents. An extent contains -up to 64 clusters, and start with a 512 byte header containing -additional information for those clusters. - -We use a cluster size of 65536, and use 8 bytes for each -cluster in the header to store the following information: - -* 1 byte dev_id (to identity the drive) -* 1 byte not used (reserved) -* 2 bytes zero indicator (mark zero regions (16x4096)) -* 4 bytes cluster number - -We only store non-zero blocks (such block is 4096 bytes). - -Each archive is marked with a uuid. The archive header and all -extent headers includes that uuid and a MD5 checksum (over header -data). - -All numbers in VMA archive are stored in Big Endian byte order. - -== VMA Header == - - Byte 0 - 3: magic - VMA magic string ("VMA\x00") - - 4 - 7: version - Version number (valid value is 1) - - 8 - 23: uuid - Unique ID, Same uuid is used to mark extents. - - 24 - 31: ctime - Backup time stamp (seconds since epoch) - - 32 - 47: md5sum - Header checksum (from byte 0 to header_size). This field - is filled with zero to generate the checksum. - - 48 - 51: blob_buffer_offset - Start of blob buffer (multiple of 512) - - 52 - 55: blob_buffer_size - Size of blob buffer (multiple of 512) - - 56 - 59: header_size - Overall size of this header (multiple of 512) - - 60 - 2043: reserved - - 2044 - 3067: uint32_t config_names[256] - Offsets into blob_buffer table - - 3068 - 4091: uint32_t config_data[256] - Offsets into blob_buffer table - - 4092 - 4095: reserved - - 4096 - 12287: VmaDeviceInfoHeader dev_info[256] - The offset in this table is used as 'dev_id' inside - the data streams. - - 12288 - header_size: Blob buffer - - -=== Devive Info Header (VmaDeviceInfoHeader) === - -This is use to store details about the contained disk images. - - Byte 0 - 3: devive name (offsets into blob_buffer table) - - 4 - 7: reserved - - 8 - 15: device size in bytes - - 16 - 31: reserved - -Note: Devive name 'vmstate' is reserved to store VM RAM state. - -=== Blob buffer === - -The blob buffer is used to store both configuration file names and -configuration data. - -This region contain a list of binary data blobs. Each blob starts with -a 2 byte size field, followed by the actual data. - -== Image Data Streams == - -The VMA header is followed by the image data stream. Image data is grouped -with extents, which contains up to 59 clusters from different images. - -=== VMA Extent Header === - - Byte 0 - 3: magic - VMA extent magic string ("VMAE") - - 4 - 5: reserved - - 6 - 7: block_count - Overall number of contained 4K block - - 8 - 23: uuid - Unique ID, Same uuid as used in the VMA header. - - 24 - 39: md5sum - Header checksum (from byte 0 to header_size). This field - is filled with zero to generate the checksum. - - 40 - 511: blockinfo[59] - - -Each 'blockinfo' (8 bytes) give further details about contained clusters: - - Byte 0 - 1: mask - Bitmap used to indicate non-zero 4K blocks inside the - cluster. - - 2: reserved - - 3: dev_id - Device ID (offset into dev_info table) - - 4 - 7: cluster_num - -The extend header if followed by the actual cluster data, where we only -store non-zero 4K blocks. -