xref: /qemu/docs/interop/parallels.rst (revision 1bc0fc0a0b2a25b10008b0dc870ca87e2a090006)
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