123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- 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.
|