There are several types of snapshots:
Libvirt can manage all three types of snapshots. For now, VM
state snapshots are created only by
the virDomainSave()
, virDomainSaveFlags
,
and virDomainManagedSave()
functions, and restored
via the virDomainRestore()
,
virDomainRestoreFlags()
, virDomainCreate()
,
and virDomainCreateWithFlags()
functions (as well
as via domain autostart). With managed snapshots, libvirt
tracks all information internally; with save images, the user
tracks the snapshot file, but libvirt provides functions such
as virDomainSaveImageGetXMLDesc()
to work with
those files.
System checkpoints are created
by virDomainSnapshotCreateXML()
with no flags, and
disk snapshots are created by the same function with
the VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY
flag; in
both cases, they are restored by
the virDomainRevertToSnapshot()
function. For
these types of snapshots, libvirt tracks each snapshot as a
separate virDomainSnapshotPtr
object, and maintains
a tree relationship of which snapshots descended from an earlier
point in time.
Attributes of libvirt snapshots are stored as child elements of
the 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
libvirt in for informational purposes
by virDomainSnapshotGetXMLDesc()
. However, when
redefining a snapshot (since 0.9.5),
with the VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE
flag
of virDomainSnapshotCreateXML()
, all of the XML
described here is relevant.
Snapshots are maintained in a hierarchy. A domain can have a current snapshot, which is the most recent snapshot compared to the current state of the domain (although a domain might have snapshots without a current snapshot, if snapshots have been deleted in the meantime). Creating or reverting to a snapshot sets that snapshot as current, and the prior current snapshot is the parent of the new snapshot. Branches in the hierarchy can be formed by reverting to a snapshot with a child, then creating another snapshot.
The top-level domainsnapshot
element may contain
the following elements:
name
description
creationTime
state
virDomainRevertToSnapshot()
. Additionally,
this field can be the value "disk-snapshot"
(since 0.9.5) when it represents
only a disk snapshot (no VM state), and reverting to this
snapshot will default to an inactive guest. Readonly.
parent
domain
VIR_DOMAIN_SNAPSHOT_REVERT_FORCE
flag
in virDomainRevertToSnapshot()
. Newer versions
of libvirt (since 0.9.5) store the entire
inactive domain configuration
at the time of the snapshot (since
0.9.5). Readonly.
Using this XML on creation:
<domainsnapshot> <description>Snapshot of OS install and updates</description> </domainsnapshot>
will result in XML similar to this from virDomainSnapshotGetXMLDesc:
<domainsnapshot> <name>1270477159</name> <description>Snapshot of OS install and updates</description> <state>running</state> <creationTime>1270477159</creationTime> <parent> <name>bare-os-install</name> </parent> <domain> <name>fedora</name> <uuid>93a5c045-6457-2c09-e56c-927cdf34e178</uuid> <memory>1048576</memory> ... </devices> </domain> </domainsnapshot>