159 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			159 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								= 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.
							 |