Parallels Disk Format
This specification contains minimal information about Parallels Disk Format,
which is enough to properly work with QEMU. Nevertheless, Parallels Cloud Server
and Parallels Desktop are able to add some unspecified nodes to the xml and use
them, but they are for internal work and don’t affect functionality. Also it
uses auxiliary xml Snapshot.xml
, which allows storage of optional snapshot
information, but this doesn’t influence open/read/write functionality. QEMU and
other software should not use fields not covered in this document or the
Snapshot.xml
file, and must leave them as is.
A Parallels disk consists of two parts: the set of snapshots and the disk descriptor file, which stores information about all files and snapshots.
Definitions
- Snapshot
a record of the contents captured at a particular time, capable of storing current state. A snapshot has a UUID and a parent UUID.
- Snapshot image
an overlay representing the difference between this snapshot and some earlier snapshot.
- Overlay
an image storing the different sectors between two captured states.
- Root image
a snapshot image with no parent, the root of the snapshot tree.
- Storage
the backing storage for a subset of the virtual disk. When there is more than one storage in a Parallels disk then that is referred to as a split image. In this case every storage covers a specific address space area of the disk and has its particular root image. Split images are not considered here and are not supported. Each storage consists of disk parameters and a list of images. The list of images always contains a root image and may also contain overlays. The root image can be an expandable Parallels image file or plain. Overlays must be expandable.
- Description file
DiskDescriptor.xml
stores information about disk parameters, snapshots, and storages.- Top Snapshot
The overlay between actual state and some previous snapshot. It is not a snapshot in the classical sense because it serves as the active image that the guest writes to.
- Sector
a 512-byte data chunk.
Description file
All information is placed in a single XML element
Parallels_disk_image
.
The element has only one attribute, Version
, which must be 1.0
.
The schema of DiskDescriptor.xml
:
<Parallels_disk_image Version="1.0">
<Disk_Parameters>
...
</Disk_Parameters>
<StorageData>
...
</StorageData>
<Snapshots>
...
</Snapshots>
</Parallels_disk_image>
Disk_Parameters
element
The Disk_Parameters
element describes the physical layout of the
virtual disk and some general settings.
The Disk_Parameters
element MUST contain the following child elements:
Disk_size
- number of sectors in the disk, desired size of the disk.Cylinders
- number of the disk cylinders.Heads
- number of the disk heads.Sectors
- number of the disk sectors per cylinder (sector size is 512 bytes) Limitation: The product of theHeads
,Sectors
andCylinders
values MUST be equal to the value of the Disk_size parameter.Padding
- must be 0. Parallels Cloud Server and Parallels Desktop may use padding set to 1; however this case is not covered by this specification. QEMU and other software should not open such disks and should not create them.
StorageData
element
This element of the file describes the root image and all snapshot images.
The StorageData
element consists of the Storage
child element,
as shown below:
<StorageData>
<Storage>
...
</Storage>
</StorageData>
A Storage
element has the following child elements:
Start
- start sector of the storage, in case of non split storage equals to 0.End
- number of sector following the last sector, in case of non split storage equals toDisk_size
.Blocksize
- storage cluster size, number of sectors per one cluster. The cluster size for each “Compressed” (see below) image in a parallels disk must be equal to this field. Note: the cluster size for a Parallels Expandable Image is in thetracks
field of its header (see Parallels Expandable Image File Format).Several
Image
child elements.
Each Image
element has the following child elements:
GUID
- image identifier, UUID in curly brackets. For instance,{12345678-9abc-def1-2345-6789abcdef12}.
The GUID is used by the Snapshots element to reference images (see below)Type
- image type of the element. It can be:Plain
for raw files.Compressed
for expanding disks.
File
- path to image file. The path can be relative toDiskDescriptor.xml
or absolute.
Snapshots
element
The Snapshots
element describes the snapshot relations with the snapshot tree.
The element contains the set of Shot
child elements, as shown below:
<Snapshots>
<TopGUID> ... </TopGUID> /* Optional child element */
<Shot>
...
</Shot>
<Shot>
...
</Shot>
...
</Snapshots>
Each Shot
element contains the following child elements:
GUID
- an image GUID.ParentGUID
- GUID of the image of the parent snapshot.
The software may traverse snapshots from child to parent using the
<ParentGUID>
field as reference. The ParentGUID
of the root
snapshot is {00000000-0000-0000-0000-000000000000}
.
There should be only one root snapshot.
The Top snapshot could be
described via two ways: via the TopGUID
child
element of the Snapshots
element, or via the predefined GUID
{5fbaabe3-6958-40ff-92a7-860e329aab41}
. If TopGUID
is defined,
the predefined GUID is interpreted as a normal GUID. All snapshot images
(except the Top Snapshot) should be
opened read-only.
There is another predefined GUID,
BackupID = {704718e1-2314-44c8-9087-d78ed36b0f4e}
, which is used by
original and some third-party software for backup. QEMU and other
software may operate with images with GUID = BackupID
as usual.
However, it is not recommended to use this
GUID for new disks. The Top snapshot cannot have this GUID.