xref: /qemu/docs/interop/prl-xml.rst (revision 7d9fc7e74d8062e99c51b6b1a71393dcb5266cef)
1*7d9fc7e7SPeter MaydellParallels Disk Format
2*7d9fc7e7SPeter Maydell=====================
3*7d9fc7e7SPeter Maydell
4*7d9fc7e7SPeter Maydell..
5*7d9fc7e7SPeter Maydell   Copyright (c) 2015-2017, Virtuozzo, Inc.
6*7d9fc7e7SPeter Maydell   Authors:
7*7d9fc7e7SPeter Maydell        2015 Denis Lunev <den@openvz.org>
8*7d9fc7e7SPeter Maydell        2015 Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
9*7d9fc7e7SPeter Maydell        2016-2017 Klim Kireev <klim.kireev@virtuozzo.com>
10*7d9fc7e7SPeter Maydell        2016-2017 Edgar Kaziakhmedov <edgar.kaziakhmedov@virtuozzo.com>
11*7d9fc7e7SPeter Maydell
12*7d9fc7e7SPeter Maydell   This work is licensed under the terms of the GNU GPL, version 2 or later.
13*7d9fc7e7SPeter Maydell   See the COPYING file in the top-level directory.
14*7d9fc7e7SPeter Maydell
15*7d9fc7e7SPeter MaydellThis specification contains minimal information about Parallels Disk Format,
16*7d9fc7e7SPeter Maydellwhich is enough to proper work with QEMU. Nevertheless, Parallels Cloud Server
17*7d9fc7e7SPeter Maydelland Parallels Desktop are able to add some unspecified nodes to xml and use
18*7d9fc7e7SPeter Maydellthem, but they are for internal work and don't affect functionality. Also it
19*7d9fc7e7SPeter Maydelluses auxiliary xml ``Snapshot.xml``, which allows to store optional snapshot
20*7d9fc7e7SPeter Maydellinformation, but it doesn't influence open/read/write functionality. QEMU and
21*7d9fc7e7SPeter Maydellother software should not use fields not covered in this document and
22*7d9fc7e7SPeter Maydell``Snapshot.xml`` file and must leave them as is.
23*7d9fc7e7SPeter Maydell
24*7d9fc7e7SPeter MaydellParallels disk consists of two parts: the set of snapshots and the disk
25*7d9fc7e7SPeter Maydelldescriptor file, which stores information about all files and snapshots.
26*7d9fc7e7SPeter Maydell
27*7d9fc7e7SPeter MaydellDefinitions
28*7d9fc7e7SPeter Maydell-----------
29*7d9fc7e7SPeter Maydell
30*7d9fc7e7SPeter MaydellSnapshot
31*7d9fc7e7SPeter Maydell  a record of the contents captured at a particular time, capable
32*7d9fc7e7SPeter Maydell  of storing current state. A snapshot has UUID and parent UUID.
33*7d9fc7e7SPeter Maydell
34*7d9fc7e7SPeter MaydellSnapshot image
35*7d9fc7e7SPeter Maydell  an overlay representing the difference between this
36*7d9fc7e7SPeter Maydell  snapshot and some earlier snapshot.
37*7d9fc7e7SPeter Maydell
38*7d9fc7e7SPeter MaydellOverlay
39*7d9fc7e7SPeter Maydell  an image storing the different sectors between two captured states.
40*7d9fc7e7SPeter Maydell
41*7d9fc7e7SPeter MaydellRoot image
42*7d9fc7e7SPeter Maydell  snapshot image with no parent, the root of snapshot tree.
43*7d9fc7e7SPeter Maydell
44*7d9fc7e7SPeter MaydellStorage
45*7d9fc7e7SPeter Maydell  the backing storage for a subset of the virtual disk. When
46*7d9fc7e7SPeter Maydell  there is more than one storage in a Parallels disk then that
47*7d9fc7e7SPeter Maydell  is referred to as a split image. In this case every storage
48*7d9fc7e7SPeter Maydell  covers specific address space area of the disk and has its
49*7d9fc7e7SPeter Maydell  particular root image. Split images are not considered here
50*7d9fc7e7SPeter Maydell  and are not supported. Each storage consists of disk
51*7d9fc7e7SPeter Maydell  parameters and a list of images. The list of images always
52*7d9fc7e7SPeter Maydell  contains a root image and may also contain overlays. The
53*7d9fc7e7SPeter Maydell  root image can be an expandable Parallels image file or
54*7d9fc7e7SPeter Maydell  plain. Overlays must be expandable.
55*7d9fc7e7SPeter Maydell
56*7d9fc7e7SPeter MaydellDescription file
57*7d9fc7e7SPeter Maydell  ``DiskDescriptor.xml`` stores information about disk parameters,
58*7d9fc7e7SPeter Maydell  snapshots, storages.
59*7d9fc7e7SPeter Maydell
60*7d9fc7e7SPeter MaydellTop Snapshot
61*7d9fc7e7SPeter Maydell  The overlay between actual state and some previous snapshot.
62*7d9fc7e7SPeter Maydell  It is not a snapshot in the classical sense because it
63*7d9fc7e7SPeter Maydell  serves as the active image that the guest writes to.
64*7d9fc7e7SPeter Maydell
65*7d9fc7e7SPeter MaydellSector
66*7d9fc7e7SPeter Maydell  a 512-byte data chunk.
67*7d9fc7e7SPeter Maydell
68*7d9fc7e7SPeter MaydellDescription file
69*7d9fc7e7SPeter Maydell----------------
70*7d9fc7e7SPeter Maydell
71*7d9fc7e7SPeter MaydellAll information is placed in a single XML element
72*7d9fc7e7SPeter Maydell``Parallels_disk_image``.
73*7d9fc7e7SPeter MaydellThe element has only one attribute ``Version``, that must be ``1.0``.
74*7d9fc7e7SPeter Maydell
75*7d9fc7e7SPeter MaydellSchema of ``DiskDescriptor.xml``::
76*7d9fc7e7SPeter Maydell
77*7d9fc7e7SPeter Maydell <Parallels_disk_image Version="1.0">
78*7d9fc7e7SPeter Maydell    <Disk_Parameters>
79*7d9fc7e7SPeter Maydell        ...
80*7d9fc7e7SPeter Maydell    </Disk_Parameters>
81*7d9fc7e7SPeter Maydell    <StorageData>
82*7d9fc7e7SPeter Maydell        ...
83*7d9fc7e7SPeter Maydell    </StorageData>
84*7d9fc7e7SPeter Maydell    <Snapshots>
85*7d9fc7e7SPeter Maydell        ...
86*7d9fc7e7SPeter Maydell    </Snapshots>
87*7d9fc7e7SPeter Maydell </Parallels_disk_image>
88*7d9fc7e7SPeter Maydell
89*7d9fc7e7SPeter Maydell``Disk_Parameters`` element
90*7d9fc7e7SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^
91*7d9fc7e7SPeter Maydell
92*7d9fc7e7SPeter MaydellThe ``Disk_Parameters`` element describes the physical layout of the
93*7d9fc7e7SPeter Maydellvirtual disk and some general settings.
94*7d9fc7e7SPeter Maydell
95*7d9fc7e7SPeter MaydellThe ``Disk_Parameters`` element MUST contain the following child elements:
96*7d9fc7e7SPeter Maydell
97*7d9fc7e7SPeter Maydell* ``Disk_size`` - number of sectors in the disk,
98*7d9fc7e7SPeter Maydell  desired size of the disk.
99*7d9fc7e7SPeter Maydell* ``Cylinders`` - number of the disk cylinders.
100*7d9fc7e7SPeter Maydell* ``Heads``     - number of the disk heads.
101*7d9fc7e7SPeter Maydell* ``Sectors``   - number of the disk sectors per cylinder
102*7d9fc7e7SPeter Maydell  (sector size is 512 bytes)
103*7d9fc7e7SPeter Maydell  Limitation: Product of the ``Heads``, ``Sectors`` and ``Cylinders``
104*7d9fc7e7SPeter Maydell  values MUST be equal to the value of the Disk_size parameter.
105*7d9fc7e7SPeter Maydell* ``Padding``   - must be 0. Parallels Cloud Server and Parallels Desktop may
106*7d9fc7e7SPeter Maydell  use padding set to 1, however this case is not covered
107*7d9fc7e7SPeter Maydell  by this spec, QEMU and other software should not open
108*7d9fc7e7SPeter Maydell  such disks and should not create them.
109*7d9fc7e7SPeter Maydell
110*7d9fc7e7SPeter Maydell``StorageData`` element
111*7d9fc7e7SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^
112*7d9fc7e7SPeter Maydell
113*7d9fc7e7SPeter MaydellThis element of the file describes the root image and all snapshot images.
114*7d9fc7e7SPeter Maydell
115*7d9fc7e7SPeter MaydellThe ``StorageData`` element consists of the ``Storage`` child element,
116*7d9fc7e7SPeter Maydellas shown below::
117*7d9fc7e7SPeter Maydell
118*7d9fc7e7SPeter Maydell <StorageData>
119*7d9fc7e7SPeter Maydell    <Storage>
120*7d9fc7e7SPeter Maydell        ...
121*7d9fc7e7SPeter Maydell    </Storage>
122*7d9fc7e7SPeter Maydell </StorageData>
123*7d9fc7e7SPeter Maydell
124*7d9fc7e7SPeter MaydellA ``Storage`` element has following child elements:
125*7d9fc7e7SPeter Maydell
126*7d9fc7e7SPeter Maydell* ``Start``     - start sector of the storage, in case of non split storage
127*7d9fc7e7SPeter Maydell  equals to 0.
128*7d9fc7e7SPeter Maydell* ``End``       - number of sector following the last sector, in case of non
129*7d9fc7e7SPeter Maydell  split storage equals to ``Disk_size``.
130*7d9fc7e7SPeter Maydell* ``Blocksize`` - storage cluster size, number of sectors per one cluster.
131*7d9fc7e7SPeter Maydell  Cluster size for each "Compressed" (see below) image in
132*7d9fc7e7SPeter Maydell  parallels disk must be equal to this field. Note: cluster
133*7d9fc7e7SPeter Maydell  size for Parallels Expandable Image is in ``tracks`` field of
134*7d9fc7e7SPeter Maydell  its header (see :doc:`parallels`).
135*7d9fc7e7SPeter Maydell* Several ``Image`` child elements.
136*7d9fc7e7SPeter Maydell
137*7d9fc7e7SPeter MaydellEach ``Image`` element has following child elements:
138*7d9fc7e7SPeter Maydell
139*7d9fc7e7SPeter Maydell* ``GUID`` - image identifier, UUID in curly brackets.
140*7d9fc7e7SPeter Maydell  For instance, ``{12345678-9abc-def1-2345-6789abcdef12}.``
141*7d9fc7e7SPeter Maydell  The GUID is used by the Snapshots element to reference images
142*7d9fc7e7SPeter Maydell  (see below)
143*7d9fc7e7SPeter Maydell* ``Type`` - image type of the element. It can be:
144*7d9fc7e7SPeter Maydell
145*7d9fc7e7SPeter Maydell  * ``Plain`` for raw files.
146*7d9fc7e7SPeter Maydell  * ``Compressed`` for expanding disks.
147*7d9fc7e7SPeter Maydell
148*7d9fc7e7SPeter Maydell* ``File`` - path to image file. Path can be relative to
149*7d9fc7e7SPeter Maydell  ``DiskDescriptor.xml`` or absolute.
150*7d9fc7e7SPeter Maydell
151*7d9fc7e7SPeter Maydell``Snapshots`` element
152*7d9fc7e7SPeter Maydell^^^^^^^^^^^^^^^^^^^^^
153*7d9fc7e7SPeter Maydell
154*7d9fc7e7SPeter MaydellThe ``Snapshots`` element describes the snapshot relations with the snapshot tree.
155*7d9fc7e7SPeter Maydell
156*7d9fc7e7SPeter MaydellThe element contains the set of ``Shot`` child elements, as shown below::
157*7d9fc7e7SPeter Maydell
158*7d9fc7e7SPeter Maydell <Snapshots>
159*7d9fc7e7SPeter Maydell    <TopGUID> ... </TopGUID> /* Optional child element */
160*7d9fc7e7SPeter Maydell    <Shot>
161*7d9fc7e7SPeter Maydell        ...
162*7d9fc7e7SPeter Maydell    </Shot>
163*7d9fc7e7SPeter Maydell    <Shot>
164*7d9fc7e7SPeter Maydell        ...
165*7d9fc7e7SPeter Maydell    </Shot>
166*7d9fc7e7SPeter Maydell    ...
167*7d9fc7e7SPeter Maydell </Snapshots>
168*7d9fc7e7SPeter Maydell
169*7d9fc7e7SPeter MaydellEach ``Shot`` element contains the following child elements:
170*7d9fc7e7SPeter Maydell
171*7d9fc7e7SPeter Maydell* ``GUID``       - an image GUID.
172*7d9fc7e7SPeter Maydell* ``ParentGUID`` - GUID of the image of the parent snapshot.
173*7d9fc7e7SPeter Maydell
174*7d9fc7e7SPeter MaydellThe software may traverse snapshots from child to parent using ``<ParentGUID>``
175*7d9fc7e7SPeter Maydellfield as reference. ``ParentGUID`` of root snapshot is
176*7d9fc7e7SPeter Maydell``{00000000-0000-0000-0000-000000000000}``. There should be only one root
177*7d9fc7e7SPeter Maydellsnapshot. Top snapshot could be described via two ways: via ``TopGUID`` child
178*7d9fc7e7SPeter Maydellelement of the ``Snapshots`` element or via predefined GUID
179*7d9fc7e7SPeter Maydell``{5fbaabe3-6958-40ff-92a7-860e329aab41}``. If ``TopGUID`` is defined,
180*7d9fc7e7SPeter Maydellpredefined GUID is interpreted as usual GUID. All snapshot images
181*7d9fc7e7SPeter Maydell(except Top Snapshot) should be
182*7d9fc7e7SPeter Maydellopened read-only. There is another predefined GUID,
183*7d9fc7e7SPeter Maydell``BackupID = {704718e1-2314-44c8-9087-d78ed36b0f4e}``, which is used by
184*7d9fc7e7SPeter Maydelloriginal and some third-party software for backup, QEMU and other
185*7d9fc7e7SPeter Maydellsoftware may operate with images with ``GUID = BackupID`` as usual,
186*7d9fc7e7SPeter Maydellhowever, it is not recommended to use this
187*7d9fc7e7SPeter MaydellGUID for new disks. Top snapshot cannot have this GUID.
188