| = 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 DiskDecriptor.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. |