From d6f6b2d194c5771600e08400e8849e2b96f9ecc9 Mon Sep 17 00:00:00 2001
From: Eric Blake
Attributes of libvirt snapshots are stored as child elements of
the Using this XML on creation: Using this XML to create a disk snapshot of just vda on a qemu
+ domain with two disks: will result in XML similar to this from
- virDomainSnapshotGetXMLDesc:domainsnapshot element. At snapshot creation
- time, normally only the name
- and description elements are settable; the rest of
- the fields are ignored on creation, and will be filled in by
+ time, normally only the name, description,
+ and disks elements are settable; the rest of the
+ fields are ignored on creation, and will be filled in by
libvirt in for informational purposes
by virDomainSnapshotGetXMLDesc(). However, when
redefining a snapshot (since 0.9.5),
@@ -106,6 +106,58 @@
description is omitted when initially creating the snapshot,
then this field will be empty.
+ disksdisks with a system
+ checkpoint. This element has a list of disk
+ sub-elements, describing anywhere from zero to all of the
+ disks associated with the domain. Since
+ 0.9.5
+
+
+ diskname is
+ mandatory, and must match the <target
+ dev='name'/> of one of
+ the disk
+ devices specified for the domain at the time of the
+ snapshot. The attribute snapshot is
+ optional, and has the same values of the disk device
+ element for a domain
+ (no, internal,
+ or external). Some hypervisors like ESX
+ require that if specified, the snapshot mode must not
+ override any snapshot mode attached to the corresponding
+ domain disk, while others like qemu allow this field to
+ override the domain default. If the snapshot mode is
+ external (whether specified or inherited), then there is
+ an optional sub-element source, with an
+ attribute file giving the name, and an
+ optional sub-element driver, with an
+ attribute type giving the driver type (such
+ as qcow2), of the new file created by the external
+ snapshot of the new file. If source is not
+ given, a file name is generated that consists of the
+ existing file name with anything after the trailing dot
+ replaced by the snapshot name. Remember that with external
+ snapshots, the original file name becomes the read-only
+ snapshot, and the new file name contains the read-write
+ delta of all disk changes since the snapshot.
+ creationTimeExamples
-
<domainsnapshot>
<description>Snapshot of OS install and updates</description>
+ <disks>
+ <disk name='vda'>
+ <source file='/path/to/new'/>
+ </disk>
+ <disk name='vdb' snapshot='no'/>
+ </disks>
</domainsnapshot>
virDomainSnapshotGetXMLDesc():
<domainsnapshot>
<name>1270477159</name>
@@ -162,13 +221,61 @@
<parent>
<name>bare-os-install</name>
</parent>
+ <disks>
+ <disk name='vda' snapshot='external'>
+ <driver type='qcow2'/>
+ <source file='/path/to/new'/>
+ </disk>
+ <disk name='vdb' snapshot='no'/>
+ </disks>
<domain>
<name>fedora</name>
<uuid>93a5c045-6457-2c09-e56c-927cdf34e178</uuid>
<memory>1048576</memory>
...
+ <devices>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='raw'/>
+ <source file='/path/to/old'/>
+ <target dev='vda' bus='virtio'/>
+ </disk>
+ <disk type='file' device='disk' snapshot='external'>
+ <driver name='qemu' type='raw'/>
+ <source file='/path/to/old2'/>
+ <target dev='vdb' bus='virtio'/>
+ </disk>
+ ...
</devices>
</domain>
</domainsnapshot>
+
+ With that snapshot created, /path/to/old is the
+ read-only backing file to the new active
+ file /path/to/new. The <domain>
+ element within the snapshot xml records the state of the domain
+ just before the snapshot; a call
+ to virDomainGetXMLDesc() will show that the domain
+ has been changed to reflect the snapshot:
+
+<domain> + <name>fedora</name> + <uuid>93a5c045-6457-2c09-e56c-927cdf34e178</uuid> + <memory>1048576</memory> + ... + <devices> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/path/to/new'/> + <target dev='vda' bus='virtio'/> + </disk> + <disk type='file' device='disk' snapshot='external'> + <driver name='qemu' type='raw'/> + <source file='/path/to/old2'/> + <target dev='vdb' bus='virtio'/> + </disk> + ... + </devices> +</domain>