1*7d9fc7e7SPeter MaydellParallels Disk Format 2*7d9fc7e7SPeter Maydell===================== 3*7d9fc7e7SPeter Maydell 4*7d9fc7e7SPeter Maydell.. 5*7d9fc7e7SPeter Maydell Copyright (c) 2015-2017, Virtuozzo, Inc. 6*7d9fc7e7SPeter Maydell Authors: 7*7d9fc7e7SPeter Maydell 2015 Denis Lunev <den@openvz.org> 8*7d9fc7e7SPeter Maydell 2015 Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> 9*7d9fc7e7SPeter Maydell 2016-2017 Klim Kireev <klim.kireev@virtuozzo.com> 10*7d9fc7e7SPeter Maydell 2016-2017 Edgar Kaziakhmedov <edgar.kaziakhmedov@virtuozzo.com> 11*7d9fc7e7SPeter Maydell 12*7d9fc7e7SPeter Maydell This work is licensed under the terms of the GNU GPL, version 2 or later. 13*7d9fc7e7SPeter Maydell See the COPYING file in the top-level directory. 14*7d9fc7e7SPeter Maydell 15*7d9fc7e7SPeter MaydellThis specification contains minimal information about Parallels Disk Format, 16*7d9fc7e7SPeter Maydellwhich is enough to proper work with QEMU. Nevertheless, Parallels Cloud Server 17*7d9fc7e7SPeter Maydelland Parallels Desktop are able to add some unspecified nodes to xml and use 18*7d9fc7e7SPeter Maydellthem, but they are for internal work and don't affect functionality. Also it 19*7d9fc7e7SPeter Maydelluses auxiliary xml ``Snapshot.xml``, which allows to store optional snapshot 20*7d9fc7e7SPeter Maydellinformation, but it doesn't influence open/read/write functionality. QEMU and 21*7d9fc7e7SPeter Maydellother software should not use fields not covered in this document and 22*7d9fc7e7SPeter Maydell``Snapshot.xml`` file and must leave them as is. 23*7d9fc7e7SPeter Maydell 24*7d9fc7e7SPeter MaydellParallels disk consists of two parts: the set of snapshots and the disk 25*7d9fc7e7SPeter Maydelldescriptor file, which stores information about all files and snapshots. 26*7d9fc7e7SPeter Maydell 27*7d9fc7e7SPeter MaydellDefinitions 28*7d9fc7e7SPeter Maydell----------- 29*7d9fc7e7SPeter Maydell 30*7d9fc7e7SPeter MaydellSnapshot 31*7d9fc7e7SPeter Maydell a record of the contents captured at a particular time, capable 32*7d9fc7e7SPeter Maydell of storing current state. A snapshot has UUID and parent UUID. 33*7d9fc7e7SPeter Maydell 34*7d9fc7e7SPeter MaydellSnapshot image 35*7d9fc7e7SPeter Maydell an overlay representing the difference between this 36*7d9fc7e7SPeter Maydell snapshot and some earlier snapshot. 37*7d9fc7e7SPeter Maydell 38*7d9fc7e7SPeter MaydellOverlay 39*7d9fc7e7SPeter Maydell an image storing the different sectors between two captured states. 40*7d9fc7e7SPeter Maydell 41*7d9fc7e7SPeter MaydellRoot image 42*7d9fc7e7SPeter Maydell snapshot image with no parent, the root of snapshot tree. 43*7d9fc7e7SPeter Maydell 44*7d9fc7e7SPeter MaydellStorage 45*7d9fc7e7SPeter Maydell the backing storage for a subset of the virtual disk. When 46*7d9fc7e7SPeter Maydell there is more than one storage in a Parallels disk then that 47*7d9fc7e7SPeter Maydell is referred to as a split image. In this case every storage 48*7d9fc7e7SPeter Maydell covers specific address space area of the disk and has its 49*7d9fc7e7SPeter Maydell particular root image. Split images are not considered here 50*7d9fc7e7SPeter Maydell and are not supported. Each storage consists of disk 51*7d9fc7e7SPeter Maydell parameters and a list of images. The list of images always 52*7d9fc7e7SPeter Maydell contains a root image and may also contain overlays. The 53*7d9fc7e7SPeter Maydell root image can be an expandable Parallels image file or 54*7d9fc7e7SPeter Maydell plain. Overlays must be expandable. 55*7d9fc7e7SPeter Maydell 56*7d9fc7e7SPeter MaydellDescription file 57*7d9fc7e7SPeter Maydell ``DiskDescriptor.xml`` stores information about disk parameters, 58*7d9fc7e7SPeter Maydell snapshots, storages. 59*7d9fc7e7SPeter Maydell 60*7d9fc7e7SPeter MaydellTop Snapshot 61*7d9fc7e7SPeter Maydell The overlay between actual state and some previous snapshot. 62*7d9fc7e7SPeter Maydell It is not a snapshot in the classical sense because it 63*7d9fc7e7SPeter Maydell serves as the active image that the guest writes to. 64*7d9fc7e7SPeter Maydell 65*7d9fc7e7SPeter MaydellSector 66*7d9fc7e7SPeter Maydell a 512-byte data chunk. 67*7d9fc7e7SPeter Maydell 68*7d9fc7e7SPeter MaydellDescription file 69*7d9fc7e7SPeter Maydell---------------- 70*7d9fc7e7SPeter Maydell 71*7d9fc7e7SPeter MaydellAll information is placed in a single XML element 72*7d9fc7e7SPeter Maydell``Parallels_disk_image``. 73*7d9fc7e7SPeter MaydellThe element has only one attribute ``Version``, that must be ``1.0``. 74*7d9fc7e7SPeter Maydell 75*7d9fc7e7SPeter MaydellSchema of ``DiskDescriptor.xml``:: 76*7d9fc7e7SPeter Maydell 77*7d9fc7e7SPeter Maydell <Parallels_disk_image Version="1.0"> 78*7d9fc7e7SPeter Maydell <Disk_Parameters> 79*7d9fc7e7SPeter Maydell ... 80*7d9fc7e7SPeter Maydell </Disk_Parameters> 81*7d9fc7e7SPeter Maydell <StorageData> 82*7d9fc7e7SPeter Maydell ... 83*7d9fc7e7SPeter Maydell </StorageData> 84*7d9fc7e7SPeter Maydell <Snapshots> 85*7d9fc7e7SPeter Maydell ... 86*7d9fc7e7SPeter Maydell </Snapshots> 87*7d9fc7e7SPeter Maydell </Parallels_disk_image> 88*7d9fc7e7SPeter Maydell 89*7d9fc7e7SPeter Maydell``Disk_Parameters`` element 90*7d9fc7e7SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^^^^^ 91*7d9fc7e7SPeter Maydell 92*7d9fc7e7SPeter MaydellThe ``Disk_Parameters`` element describes the physical layout of the 93*7d9fc7e7SPeter Maydellvirtual disk and some general settings. 94*7d9fc7e7SPeter Maydell 95*7d9fc7e7SPeter MaydellThe ``Disk_Parameters`` element MUST contain the following child elements: 96*7d9fc7e7SPeter Maydell 97*7d9fc7e7SPeter Maydell* ``Disk_size`` - number of sectors in the disk, 98*7d9fc7e7SPeter Maydell desired size of the disk. 99*7d9fc7e7SPeter Maydell* ``Cylinders`` - number of the disk cylinders. 100*7d9fc7e7SPeter Maydell* ``Heads`` - number of the disk heads. 101*7d9fc7e7SPeter Maydell* ``Sectors`` - number of the disk sectors per cylinder 102*7d9fc7e7SPeter Maydell (sector size is 512 bytes) 103*7d9fc7e7SPeter Maydell Limitation: Product of the ``Heads``, ``Sectors`` and ``Cylinders`` 104*7d9fc7e7SPeter Maydell values MUST be equal to the value of the Disk_size parameter. 105*7d9fc7e7SPeter Maydell* ``Padding`` - must be 0. Parallels Cloud Server and Parallels Desktop may 106*7d9fc7e7SPeter Maydell use padding set to 1, however this case is not covered 107*7d9fc7e7SPeter Maydell by this spec, QEMU and other software should not open 108*7d9fc7e7SPeter Maydell such disks and should not create them. 109*7d9fc7e7SPeter Maydell 110*7d9fc7e7SPeter Maydell``StorageData`` element 111*7d9fc7e7SPeter Maydell^^^^^^^^^^^^^^^^^^^^^^^ 112*7d9fc7e7SPeter Maydell 113*7d9fc7e7SPeter MaydellThis element of the file describes the root image and all snapshot images. 114*7d9fc7e7SPeter Maydell 115*7d9fc7e7SPeter MaydellThe ``StorageData`` element consists of the ``Storage`` child element, 116*7d9fc7e7SPeter Maydellas shown below:: 117*7d9fc7e7SPeter Maydell 118*7d9fc7e7SPeter Maydell <StorageData> 119*7d9fc7e7SPeter Maydell <Storage> 120*7d9fc7e7SPeter Maydell ... 121*7d9fc7e7SPeter Maydell </Storage> 122*7d9fc7e7SPeter Maydell </StorageData> 123*7d9fc7e7SPeter Maydell 124*7d9fc7e7SPeter MaydellA ``Storage`` element has following child elements: 125*7d9fc7e7SPeter Maydell 126*7d9fc7e7SPeter Maydell* ``Start`` - start sector of the storage, in case of non split storage 127*7d9fc7e7SPeter Maydell equals to 0. 128*7d9fc7e7SPeter Maydell* ``End`` - number of sector following the last sector, in case of non 129*7d9fc7e7SPeter Maydell split storage equals to ``Disk_size``. 130*7d9fc7e7SPeter Maydell* ``Blocksize`` - storage cluster size, number of sectors per one cluster. 131*7d9fc7e7SPeter Maydell Cluster size for each "Compressed" (see below) image in 132*7d9fc7e7SPeter Maydell parallels disk must be equal to this field. Note: cluster 133*7d9fc7e7SPeter Maydell size for Parallels Expandable Image is in ``tracks`` field of 134*7d9fc7e7SPeter Maydell its header (see :doc:`parallels`). 135*7d9fc7e7SPeter Maydell* Several ``Image`` child elements. 136*7d9fc7e7SPeter Maydell 137*7d9fc7e7SPeter MaydellEach ``Image`` element has following child elements: 138*7d9fc7e7SPeter Maydell 139*7d9fc7e7SPeter Maydell* ``GUID`` - image identifier, UUID in curly brackets. 140*7d9fc7e7SPeter Maydell For instance, ``{12345678-9abc-def1-2345-6789abcdef12}.`` 141*7d9fc7e7SPeter Maydell The GUID is used by the Snapshots element to reference images 142*7d9fc7e7SPeter Maydell (see below) 143*7d9fc7e7SPeter Maydell* ``Type`` - image type of the element. It can be: 144*7d9fc7e7SPeter Maydell 145*7d9fc7e7SPeter Maydell * ``Plain`` for raw files. 146*7d9fc7e7SPeter Maydell * ``Compressed`` for expanding disks. 147*7d9fc7e7SPeter Maydell 148*7d9fc7e7SPeter Maydell* ``File`` - path to image file. Path can be relative to 149*7d9fc7e7SPeter Maydell ``DiskDescriptor.xml`` or absolute. 150*7d9fc7e7SPeter Maydell 151*7d9fc7e7SPeter Maydell``Snapshots`` element 152*7d9fc7e7SPeter Maydell^^^^^^^^^^^^^^^^^^^^^ 153*7d9fc7e7SPeter Maydell 154*7d9fc7e7SPeter MaydellThe ``Snapshots`` element describes the snapshot relations with the snapshot tree. 155*7d9fc7e7SPeter Maydell 156*7d9fc7e7SPeter MaydellThe element contains the set of ``Shot`` child elements, as shown below:: 157*7d9fc7e7SPeter Maydell 158*7d9fc7e7SPeter Maydell <Snapshots> 159*7d9fc7e7SPeter Maydell <TopGUID> ... </TopGUID> /* Optional child element */ 160*7d9fc7e7SPeter Maydell <Shot> 161*7d9fc7e7SPeter Maydell ... 162*7d9fc7e7SPeter Maydell </Shot> 163*7d9fc7e7SPeter Maydell <Shot> 164*7d9fc7e7SPeter Maydell ... 165*7d9fc7e7SPeter Maydell </Shot> 166*7d9fc7e7SPeter Maydell ... 167*7d9fc7e7SPeter Maydell </Snapshots> 168*7d9fc7e7SPeter Maydell 169*7d9fc7e7SPeter MaydellEach ``Shot`` element contains the following child elements: 170*7d9fc7e7SPeter Maydell 171*7d9fc7e7SPeter Maydell* ``GUID`` - an image GUID. 172*7d9fc7e7SPeter Maydell* ``ParentGUID`` - GUID of the image of the parent snapshot. 173*7d9fc7e7SPeter Maydell 174*7d9fc7e7SPeter MaydellThe software may traverse snapshots from child to parent using ``<ParentGUID>`` 175*7d9fc7e7SPeter Maydellfield as reference. ``ParentGUID`` of root snapshot is 176*7d9fc7e7SPeter Maydell``{00000000-0000-0000-0000-000000000000}``. There should be only one root 177*7d9fc7e7SPeter Maydellsnapshot. Top snapshot could be described via two ways: via ``TopGUID`` child 178*7d9fc7e7SPeter Maydellelement of the ``Snapshots`` element or via predefined GUID 179*7d9fc7e7SPeter Maydell``{5fbaabe3-6958-40ff-92a7-860e329aab41}``. If ``TopGUID`` is defined, 180*7d9fc7e7SPeter Maydellpredefined GUID is interpreted as usual GUID. All snapshot images 181*7d9fc7e7SPeter Maydell(except Top Snapshot) should be 182*7d9fc7e7SPeter Maydellopened read-only. There is another predefined GUID, 183*7d9fc7e7SPeter Maydell``BackupID = {704718e1-2314-44c8-9087-d78ed36b0f4e}``, which is used by 184*7d9fc7e7SPeter Maydelloriginal and some third-party software for backup, QEMU and other 185*7d9fc7e7SPeter Maydellsoftware may operate with images with ``GUID = BackupID`` as usual, 186*7d9fc7e7SPeter Maydellhowever, it is not recommended to use this 187*7d9fc7e7SPeter MaydellGUID for new disks. Top snapshot cannot have this GUID. 188