= License =

Copyright (c) 2015-2017, Virtuozzo, Inc.
Authors:
        2015 Denis Lunev <den@openvz.org>
        2015 Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
        2016-2017 Klim Kireev <klim.kireev@virtuozzo.com>
        2016-2017 Edgar Kaziakhmedov <edgar.kaziakhmedov@virtuozzo.com>

This work is licensed under the terms of the GNU GPL, version 2 or later.
See the COPYING file in the top-level directory.

This specification contains minimal information about Parallels Disk Format,
which is enough to proper work with QEMU. Nevertheless, Parallels Cloud Server
and Parallels Desktop are able to add some unspecified nodes to xml and use
them, but they are for internal work and don't affect functionality. Also it
uses auxiliary xml "Snapshot.xml", which allows to store optional snapshot
information, but it doesn't influence open/read/write functionality. QEMU and
other software should not use fields not covered in this document and
Snapshot.xml file and must leave them as is.

= Parallels Disk Format =

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 UUID and
                   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      snapshot image with no parent, the root of 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 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      DiskDescriptor.xml stores information about disk parameters,
     file          snapshots, storages.

     Top           The overlay between actual state and some previous snapshot.
   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", that must be 1.0.
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: Product of the Heads, Sectors and Cylinders
                  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 spec, 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 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 to Disk_size.
    * Blocksize - storage cluster size, number of sectors per one cluster.
                  Cluster size for each "Compressed" (see below) image in
                  parallels disk must be equal to this field. Note: cluster
                  size for Parallels Expandable Image is in 'tracks' field of
                  its header (see docs/interop/parallels.txt).
    * Several Image child elements.

Each Image element has 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. Path can be relative to DiskDescriptor.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 <ParentGUID>
field as reference. ParentGUID of root snapshot is
{00000000-0000-0000-0000-000000000000}. There should be only one root
snapshot. Top snapshot could be described via two ways: via TopGUID child
element of the Snapshots element or via predefined GUID
{5fbaabe3-6958-40ff-92a7-860e329aab41}. If TopGUID is defined, predefined GUID is
interpreted as usual GUID. All snapshot images (except 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. Top snapshot cannot have this GUID.
