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.
+ disks
disks
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
+
+
+ disk
name
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.
+ creationTime
Examples
-
<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>