1*1bc0fc0aSPeter MaydellParallels Expandable Image File Format 2*1bc0fc0aSPeter Maydell====================================== 3b4a9e25bSVladimir Sementsov-Ogievskiy 4*1bc0fc0aSPeter Maydell.. 5b4a9e25bSVladimir Sementsov-Ogievskiy Copyright (c) 2015 Denis Lunev 6b4a9e25bSVladimir Sementsov-Ogievskiy Copyright (c) 2015 Vladimir Sementsov-Ogievskiy 7b4a9e25bSVladimir Sementsov-Ogievskiy 8b4a9e25bSVladimir Sementsov-Ogievskiy This work is licensed under the terms of the GNU GPL, version 2 or later. 9b4a9e25bSVladimir Sementsov-Ogievskiy See the COPYING file in the top-level directory. 10b4a9e25bSVladimir Sementsov-Ogievskiy 11b4a9e25bSVladimir Sementsov-Ogievskiy 12b4a9e25bSVladimir Sementsov-OgievskiyA Parallels expandable image file consists of three consecutive parts: 13*1bc0fc0aSPeter Maydell 14b4a9e25bSVladimir Sementsov-Ogievskiy* header 15b4a9e25bSVladimir Sementsov-Ogievskiy* BAT 16b4a9e25bSVladimir Sementsov-Ogievskiy* data area 17b4a9e25bSVladimir Sementsov-Ogievskiy 18b4a9e25bSVladimir Sementsov-OgievskiyAll numbers in a Parallels expandable image are stored in little-endian byte 19b4a9e25bSVladimir Sementsov-Ogievskiyorder. 20b4a9e25bSVladimir Sementsov-Ogievskiy 21b4a9e25bSVladimir Sementsov-Ogievskiy 22*1bc0fc0aSPeter MaydellDefinitions 23*1bc0fc0aSPeter Maydell----------- 24b4a9e25bSVladimir Sementsov-Ogievskiy 25*1bc0fc0aSPeter MaydellSector 26*1bc0fc0aSPeter Maydell A 512-byte data chunk. 27b4a9e25bSVladimir Sementsov-Ogievskiy 28*1bc0fc0aSPeter MaydellCluster 29*1bc0fc0aSPeter Maydell A data chunk of the size specified in the image header. 30b4a9e25bSVladimir Sementsov-Ogievskiy Currently, the default size is 1MiB (2048 sectors). In previous 31*1bc0fc0aSPeter Maydell versions, cluster sizes of 63 sectors, 256 and 252 kilobytes were used. 32b4a9e25bSVladimir Sementsov-Ogievskiy 33*1bc0fc0aSPeter MaydellBAT 34*1bc0fc0aSPeter Maydell Block Allocation Table, an entity that contains information for 35b4a9e25bSVladimir Sementsov-Ogievskiy guest-to-host I/O data address translation. 36b4a9e25bSVladimir Sementsov-Ogievskiy 37*1bc0fc0aSPeter MaydellHeader 38*1bc0fc0aSPeter Maydell------ 39b4a9e25bSVladimir Sementsov-Ogievskiy 40b4a9e25bSVladimir Sementsov-OgievskiyThe header is placed at the start of an image and contains the following 41*1bc0fc0aSPeter Maydellfields:: 42b4a9e25bSVladimir Sementsov-Ogievskiy 43b4a9e25bSVladimir Sementsov-Ogievskiy Bytes: 44b4a9e25bSVladimir Sementsov-Ogievskiy 0 - 15: magic 45b4a9e25bSVladimir Sementsov-Ogievskiy Must contain "WithoutFreeSpace" or "WithouFreSpacExt". 46b4a9e25bSVladimir Sementsov-Ogievskiy 47b4a9e25bSVladimir Sementsov-Ogievskiy 16 - 19: version 48b4a9e25bSVladimir Sementsov-Ogievskiy Must be 2. 49b4a9e25bSVladimir Sementsov-Ogievskiy 50b4a9e25bSVladimir Sementsov-Ogievskiy 20 - 23: heads 51b4a9e25bSVladimir Sementsov-Ogievskiy Disk geometry parameter for guest. 52b4a9e25bSVladimir Sementsov-Ogievskiy 53b4a9e25bSVladimir Sementsov-Ogievskiy 24 - 27: cylinders 54b4a9e25bSVladimir Sementsov-Ogievskiy Disk geometry parameter for guest. 55b4a9e25bSVladimir Sementsov-Ogievskiy 56b4a9e25bSVladimir Sementsov-Ogievskiy 28 - 31: tracks 57b4a9e25bSVladimir Sementsov-Ogievskiy Cluster size, in sectors. 58b4a9e25bSVladimir Sementsov-Ogievskiy 59b4a9e25bSVladimir Sementsov-Ogievskiy 32 - 35: nb_bat_entries 60b4a9e25bSVladimir Sementsov-Ogievskiy Disk size, in clusters (BAT size). 61b4a9e25bSVladimir Sementsov-Ogievskiy 62b4a9e25bSVladimir Sementsov-Ogievskiy 36 - 43: nb_sectors 63b4a9e25bSVladimir Sementsov-Ogievskiy Disk size, in sectors. 64b4a9e25bSVladimir Sementsov-Ogievskiy 65b4a9e25bSVladimir Sementsov-Ogievskiy For "WithoutFreeSpace" images: 66b4a9e25bSVladimir Sementsov-Ogievskiy Only the lowest 4 bytes are used. The highest 4 bytes must be 67b4a9e25bSVladimir Sementsov-Ogievskiy cleared in this case. 68b4a9e25bSVladimir Sementsov-Ogievskiy 69b4a9e25bSVladimir Sementsov-Ogievskiy For "WithouFreSpacExt" images, there are no such 70b4a9e25bSVladimir Sementsov-Ogievskiy restrictions. 71b4a9e25bSVladimir Sementsov-Ogievskiy 72b4a9e25bSVladimir Sementsov-Ogievskiy 44 - 47: in_use 73b4a9e25bSVladimir Sementsov-Ogievskiy Set to 0x746F6E59 when the image is opened by software in R/W 74b4a9e25bSVladimir Sementsov-Ogievskiy mode; set to 0x312e3276 when the image is closed. 75b4a9e25bSVladimir Sementsov-Ogievskiy 76b4a9e25bSVladimir Sementsov-Ogievskiy A zero in this field means that the image was opened by an old 77b4a9e25bSVladimir Sementsov-Ogievskiy version of the software that doesn't support Format Extension 78b4a9e25bSVladimir Sementsov-Ogievskiy (see below). 79b4a9e25bSVladimir Sementsov-Ogievskiy 80b4a9e25bSVladimir Sementsov-Ogievskiy Other values are not allowed. 81b4a9e25bSVladimir Sementsov-Ogievskiy 82b4a9e25bSVladimir Sementsov-Ogievskiy 48 - 51: data_off 83b4a9e25bSVladimir Sementsov-Ogievskiy An offset, in sectors, from the start of the file to the start of 84b4a9e25bSVladimir Sementsov-Ogievskiy the data area. 85b4a9e25bSVladimir Sementsov-Ogievskiy 86b4a9e25bSVladimir Sementsov-Ogievskiy For "WithoutFreeSpace" images: 87b4a9e25bSVladimir Sementsov-Ogievskiy - If data_off is zero, the offset is calculated as the end of BAT 88b4a9e25bSVladimir Sementsov-Ogievskiy table plus some padding to ensure sector size alignment. 89b4a9e25bSVladimir Sementsov-Ogievskiy - If data_off is non-zero, the offset should be aligned to sector 90b4a9e25bSVladimir Sementsov-Ogievskiy size. However it is recommended to align it to cluster size for 91b4a9e25bSVladimir Sementsov-Ogievskiy newly created images. 92b4a9e25bSVladimir Sementsov-Ogievskiy 93b4a9e25bSVladimir Sementsov-Ogievskiy For "WithouFreSpacExt" images: 94b4a9e25bSVladimir Sementsov-Ogievskiy data_off must be non-zero and aligned to cluster size. 95b4a9e25bSVladimir Sementsov-Ogievskiy 96b4a9e25bSVladimir Sementsov-Ogievskiy 52 - 55: flags 97b4a9e25bSVladimir Sementsov-Ogievskiy Miscellaneous flags. 98b4a9e25bSVladimir Sementsov-Ogievskiy 99b4a9e25bSVladimir Sementsov-Ogievskiy Bit 0: Empty Image bit. If set, the image should be 100b4a9e25bSVladimir Sementsov-Ogievskiy considered clear. 101b4a9e25bSVladimir Sementsov-Ogievskiy 1024e90ccc2SVladimir Sementsov-Ogievskiy Bits 1-31: Unused. 103b4a9e25bSVladimir Sementsov-Ogievskiy 104b4a9e25bSVladimir Sementsov-Ogievskiy 56 - 63: ext_off 105b4a9e25bSVladimir Sementsov-Ogievskiy Format Extension offset, an offset, in sectors, from the start of 106b4a9e25bSVladimir Sementsov-Ogievskiy the file to the start of the Format Extension Cluster. 107b4a9e25bSVladimir Sementsov-Ogievskiy 108b4a9e25bSVladimir Sementsov-Ogievskiy ext_off must meet the same requirements as cluster offsets 109b4a9e25bSVladimir Sementsov-Ogievskiy defined by BAT entries (see below). 110b4a9e25bSVladimir Sementsov-Ogievskiy 111*1bc0fc0aSPeter MaydellBAT 112*1bc0fc0aSPeter Maydell--- 113b4a9e25bSVladimir Sementsov-Ogievskiy 114b4a9e25bSVladimir Sementsov-OgievskiyBAT is placed immediately after the image header. In the file, BAT is a 115b4a9e25bSVladimir Sementsov-Ogievskiycontiguous array of 32-bit unsigned little-endian integers with 116*1bc0fc0aSPeter Maydell``(bat_entries * 4)`` bytes size. 117b4a9e25bSVladimir Sementsov-Ogievskiy 118b4a9e25bSVladimir Sementsov-OgievskiyEach BAT entry contains an offset from the start of the file to the 119*1bc0fc0aSPeter Maydellcorresponding cluster. The offset set in clusters for ``WithouFreSpacExt`` 120*1bc0fc0aSPeter Maydellimages and in sectors for ``WithoutFreeSpace`` images. 121b4a9e25bSVladimir Sementsov-Ogievskiy 122b4a9e25bSVladimir Sementsov-OgievskiyIf a BAT entry is zero, the corresponding cluster is not allocated and should 123b4a9e25bSVladimir Sementsov-Ogievskiybe considered as filled with zeroes. 124b4a9e25bSVladimir Sementsov-Ogievskiy 125b4a9e25bSVladimir Sementsov-OgievskiyCluster offsets specified by BAT entries must meet the following requirements: 126b4a9e25bSVladimir Sementsov-Ogievskiy 127*1bc0fc0aSPeter Maydell- the value must not be lower than data offset (provided by ``header.data_off`` 128*1bc0fc0aSPeter Maydell or calculated as specified above) 129*1bc0fc0aSPeter Maydell- the value must be lower than the desired file size 130*1bc0fc0aSPeter Maydell- the value must be unique among all BAT entries 131*1bc0fc0aSPeter Maydell- the result of ``(cluster offset - data offset)`` must be aligned to 132*1bc0fc0aSPeter Maydell cluster size 133b4a9e25bSVladimir Sementsov-Ogievskiy 134*1bc0fc0aSPeter MaydellData Area 135*1bc0fc0aSPeter Maydell--------- 136b4a9e25bSVladimir Sementsov-Ogievskiy 137*1bc0fc0aSPeter MaydellThe data area is an area from the data offset (provided by ``header.data_off`` 138*1bc0fc0aSPeter Maydellor calculated as specified above) to the end of the file. It represents a 139b4a9e25bSVladimir Sementsov-Ogievskiycontiguous array of clusters. Most of them are allocated by the BAT, some may 140*1bc0fc0aSPeter Maydellbe allocated by the ``ext_off`` field in the header while other may be 141*1bc0fc0aSPeter Maydellallocated by extensions. All clusters allocated by ``ext_off`` and extensions 142*1bc0fc0aSPeter Maydellshould meet the same requirements as clusters specified by BAT entries. 143b4a9e25bSVladimir Sementsov-Ogievskiy 144b4a9e25bSVladimir Sementsov-Ogievskiy 145*1bc0fc0aSPeter MaydellFormat Extension 146*1bc0fc0aSPeter Maydell---------------- 147b4a9e25bSVladimir Sementsov-Ogievskiy 148b4a9e25bSVladimir Sementsov-OgievskiyThe Format Extension is an area 1 cluster in size that provides additional 149b4a9e25bSVladimir Sementsov-Ogievskiyformat features. This cluster is addressed by the ext_off field in the header. 150*1bc0fc0aSPeter MaydellThe format of the Format Extension area is the following:: 151b4a9e25bSVladimir Sementsov-Ogievskiy 152b4a9e25bSVladimir Sementsov-Ogievskiy 0 - 7: magic 153b4a9e25bSVladimir Sementsov-Ogievskiy Must be 0xAB234CEF23DCEA87 154b4a9e25bSVladimir Sementsov-Ogievskiy 155b4a9e25bSVladimir Sementsov-Ogievskiy 8 - 23: m_CheckSum 156b4a9e25bSVladimir Sementsov-Ogievskiy The MD5 checksum of the entire Header Extension cluster except 157b4a9e25bSVladimir Sementsov-Ogievskiy the first 24 bytes. 158b4a9e25bSVladimir Sementsov-Ogievskiy 159b4a9e25bSVladimir Sementsov-OgievskiyThe above are followed by feature sections or "extensions". The last 160b4a9e25bSVladimir Sementsov-Ogievskiyextension must be "End of features" (see below). 161b4a9e25bSVladimir Sementsov-Ogievskiy 162*1bc0fc0aSPeter MaydellEach feature section has the following format:: 163b4a9e25bSVladimir Sementsov-Ogievskiy 164b4a9e25bSVladimir Sementsov-Ogievskiy 0 - 7: magic 165b4a9e25bSVladimir Sementsov-Ogievskiy The identifier of the feature: 166b4a9e25bSVladimir Sementsov-Ogievskiy 0x0000000000000000 - End of features 167b4a9e25bSVladimir Sementsov-Ogievskiy 0x20385FAE252CB34A - Dirty bitmap 168b4a9e25bSVladimir Sementsov-Ogievskiy 169b4a9e25bSVladimir Sementsov-Ogievskiy 8 - 15: flags 170b4a9e25bSVladimir Sementsov-Ogievskiy External flags for extension: 171b4a9e25bSVladimir Sementsov-Ogievskiy 172b4a9e25bSVladimir Sementsov-Ogievskiy Bit 0: NECESSARY 173b4a9e25bSVladimir Sementsov-Ogievskiy If the software cannot load the extension (due to an 174b4a9e25bSVladimir Sementsov-Ogievskiy unknown magic number or error), the file should not be 175b4a9e25bSVladimir Sementsov-Ogievskiy changed. If this flag is unset and there is an error on 176b4a9e25bSVladimir Sementsov-Ogievskiy loading the extension, said extension should be dropped. 177b4a9e25bSVladimir Sementsov-Ogievskiy 178b4a9e25bSVladimir Sementsov-Ogievskiy Bit 1: TRANSIT 179b4a9e25bSVladimir Sementsov-Ogievskiy If there is an unknown extension with this flag set, 180b4a9e25bSVladimir Sementsov-Ogievskiy said extension should be left as is. 181b4a9e25bSVladimir Sementsov-Ogievskiy 182b4a9e25bSVladimir Sementsov-Ogievskiy If neither NECESSARY nor TRANSIT are set, the extension should be 183b4a9e25bSVladimir Sementsov-Ogievskiy dropped. 184b4a9e25bSVladimir Sementsov-Ogievskiy 185b4a9e25bSVladimir Sementsov-Ogievskiy 16 - 19: data_size 186b4a9e25bSVladimir Sementsov-Ogievskiy The size of the following feature data, in bytes. 187b4a9e25bSVladimir Sementsov-Ogievskiy 188b4a9e25bSVladimir Sementsov-Ogievskiy 20 - 23: unused32 189b4a9e25bSVladimir Sementsov-Ogievskiy Align header to 8 bytes boundary. 190b4a9e25bSVladimir Sementsov-Ogievskiy 191b4a9e25bSVladimir Sementsov-Ogievskiy variable: data (data_size bytes) 192b4a9e25bSVladimir Sementsov-Ogievskiy 193b4a9e25bSVladimir Sementsov-OgievskiyThe above is followed by padding to the next 8 bytes boundary, then the 194b4a9e25bSVladimir Sementsov-Ogievskiynext extension starts. 195b4a9e25bSVladimir Sementsov-Ogievskiy 196b4a9e25bSVladimir Sementsov-OgievskiyThe last extension must be "End of features" with all the fields set to 0. 197b4a9e25bSVladimir Sementsov-Ogievskiy 198b4a9e25bSVladimir Sementsov-Ogievskiy 199*1bc0fc0aSPeter MaydellDirty bitmaps feature 200*1bc0fc0aSPeter Maydell--------------------- 201b4a9e25bSVladimir Sementsov-Ogievskiy 202b4a9e25bSVladimir Sementsov-OgievskiyThis feature provides a way of storing dirty bitmaps in the image. The fields 203*1bc0fc0aSPeter Maydellof its data area are:: 204b4a9e25bSVladimir Sementsov-Ogievskiy 205b4a9e25bSVladimir Sementsov-Ogievskiy 0 - 7: size 206b4a9e25bSVladimir Sementsov-Ogievskiy The bitmap size, should be equal to disk size in sectors. 207b4a9e25bSVladimir Sementsov-Ogievskiy 208b4a9e25bSVladimir Sementsov-Ogievskiy 8 - 23: id 209b4a9e25bSVladimir Sementsov-Ogievskiy An identifier for backup consistency checking. 210b4a9e25bSVladimir Sementsov-Ogievskiy 211b4a9e25bSVladimir Sementsov-Ogievskiy 24 - 27: granularity 212b4a9e25bSVladimir Sementsov-Ogievskiy Bitmap granularity, in sectors. I.e., the number of sectors 213b4a9e25bSVladimir Sementsov-Ogievskiy corresponding to one bit of the bitmap. Granularity must be 214b4a9e25bSVladimir Sementsov-Ogievskiy a power of 2. 215b4a9e25bSVladimir Sementsov-Ogievskiy 216b4a9e25bSVladimir Sementsov-Ogievskiy 28 - 31: l1_size 217b4a9e25bSVladimir Sementsov-Ogievskiy The number of entries in the L1 table of the bitmap. 218b4a9e25bSVladimir Sementsov-Ogievskiy 21967ae4aceSVladimir Sementsov-Ogievskiy variable: L1 offset table (l1_table), size: 8 * l1_size bytes 220b4a9e25bSVladimir Sementsov-Ogievskiy 22167ae4aceSVladimir Sementsov-OgievskiyThe dirty bitmap described by this feature extension is stored in a set of 22267ae4aceSVladimir Sementsov-Ogievskiyclusters inside the Parallels image file. The offsets of these clusters are 22367ae4aceSVladimir Sementsov-Ogievskiysaved in the L1 offset table specified by the feature extension. Each L1 table 22467ae4aceSVladimir Sementsov-Ogievskiyentry is a 64 bit integer as described below: 225b4a9e25bSVladimir Sementsov-Ogievskiy 226*1bc0fc0aSPeter MaydellGiven an offset in bytes into the bitmap data, corresponding L1 entry is:: 227b4a9e25bSVladimir Sementsov-Ogievskiy 22867ae4aceSVladimir Sementsov-Ogievskiy l1_table[offset / cluster_size] 229b4a9e25bSVladimir Sementsov-Ogievskiy 23067ae4aceSVladimir Sementsov-OgievskiyIf an L1 table entry is 0, all bits in the corresponding cluster of the bitmap 23167ae4aceSVladimir Sementsov-Ogievskiyare assumed to be 0. 232b4a9e25bSVladimir Sementsov-Ogievskiy 23367ae4aceSVladimir Sementsov-OgievskiyIf an L1 table entry is 1, all bits in the corresponding cluster of the bitmap 23467ae4aceSVladimir Sementsov-Ogievskiyare assumed to be 1. 235b4a9e25bSVladimir Sementsov-Ogievskiy 23667ae4aceSVladimir Sementsov-OgievskiyIf an L1 table entry is not 0 or 1, it contains the corresponding cluster 23767ae4aceSVladimir Sementsov-Ogievskiyoffset (in 512b sectors). Given an offset in bytes into the bitmap data the 238*1bc0fc0aSPeter Maydelloffset in bytes into the image file can be obtained as follows:: 23967ae4aceSVladimir Sementsov-Ogievskiy 24067ae4aceSVladimir Sementsov-Ogievskiy offset = l1_table[offset / cluster_size] * 512 + (offset % cluster_size) 241