| Parallels Disk Format | |
| ===================== | |
| .. | |
| 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 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 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 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 to ``Disk_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 the ``tracks`` field of | |
| its header (see :doc:`parallels`). | |
| * 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 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 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. |