mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
docs: formatsnapshot: Convert to 'rst'
Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
c30df02ca3
commit
33a751fdc4
@ -1,352 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Snapshot XML format</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="SnapshotAttributes">Snapshot XML</a></h2>
|
||||
|
||||
<p>
|
||||
Snapshots are one form
|
||||
of <a href="kbase/domainstatecapture.html">domain state
|
||||
capture</a>. There are several types of snapshots:
|
||||
</p>
|
||||
<dl>
|
||||
<dt>disk snapshot</dt>
|
||||
<dd>Contents of disks (whether a subset or all disks associated
|
||||
with the domain) are saved at a given point of time, and can
|
||||
be restored back to that state. On a running guest, a disk
|
||||
snapshot is likely to be only crash-consistent rather than
|
||||
clean (that is, it represents the state of the disk on a
|
||||
sudden power outage, and may need fsck or journal replays to
|
||||
be made consistent); on an inactive guest, a disk snapshot is
|
||||
clean if the disks were clean when the guest was last shut
|
||||
down. Disk snapshots exist in two forms: internal (file
|
||||
formats such as qcow2 track both the snapshot and changes
|
||||
since the snapshot in a single file) and external (the
|
||||
snapshot is one file, and the changes since the snapshot are
|
||||
in another file).</dd>
|
||||
<dt>memory state (or VM state)</dt>
|
||||
<dd>Tracks only the state of RAM and all other resources in use
|
||||
by the VM. If the disks are unmodified between the time a VM
|
||||
state snapshot is taken and restored, then the guest will
|
||||
resume in a consistent state; but if the disks are modified
|
||||
externally in the meantime, this is likely to lead to data
|
||||
corruption.</dd>
|
||||
<dt>full system</dt>
|
||||
<dd>A combination of disk snapshots for all disks as well as VM
|
||||
memory state, which can be used to resume the guest from where it
|
||||
left off with symptoms similar to hibernation (that is, TCP
|
||||
connections in the guest may have timed out, but no files or
|
||||
processes are lost).</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
Libvirt can manage all three types of snapshots. For now, VM
|
||||
state (memory) snapshots are created only by
|
||||
the <code>virDomainSave()</code>, <code>virDomainSaveFlags</code>,
|
||||
and <code>virDomainManagedSave()</code> functions, and restored
|
||||
via the <code>virDomainRestore()</code>,
|
||||
<code>virDomainRestoreFlags()</code>, <code>virDomainCreate()</code>,
|
||||
and <code>virDomainCreateWithFlags()</code> 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 <code>virDomainSaveImageGetXMLDesc()</code> to work with
|
||||
those files.
|
||||
</p>
|
||||
<p>Full system snapshots are created
|
||||
by <code>virDomainSnapshotCreateXML()</code> with no flags, while
|
||||
disk snapshots are created by the same function with
|
||||
the <code>VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY</code>
|
||||
flag. Regardless of the flags provided, restoration of the
|
||||
snapshot is handled by
|
||||
the <code>virDomainRevertToSnapshot()</code> function. For
|
||||
these types of snapshots, libvirt tracks each snapshot as a
|
||||
separate <code>virDomainSnapshotPtr</code> object, and maintains
|
||||
a tree relationship of which snapshots descended from an earlier
|
||||
point in time.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Attributes of libvirt snapshots are stored as child elements of
|
||||
the <code>domainsnapshot</code> element. At snapshot creation
|
||||
time, normally only the <code>name</code>, <code>description</code>,
|
||||
and <code>disks</code> elements are settable; the rest of the
|
||||
fields are ignored on creation, and will be filled in by
|
||||
libvirt in for informational purposes
|
||||
by <code>virDomainSnapshotGetXMLDesc()</code>. However, when
|
||||
redefining a snapshot (<span class="since">since 0.9.5</span>),
|
||||
with the <code>VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE</code> flag
|
||||
of <code>virDomainSnapshotCreateXML()</code>, all of the XML
|
||||
described here is relevant on input, even the fields that are
|
||||
normally described as readonly for output.
|
||||
</p>
|
||||
<p>
|
||||
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. For now, the creation of external snapshots
|
||||
when checkpoints exist is forbidden, although future work will
|
||||
make it possible to integrate these two concepts.
|
||||
</p>
|
||||
<p>
|
||||
The top-level <code>domainsnapshot</code> element may contain
|
||||
the following elements:
|
||||
</p>
|
||||
<dl>
|
||||
<dt><code>name</code></dt>
|
||||
<dd>The optional name for this snapshot. If the name is
|
||||
omitted, libvirt will create a name based on the time of the
|
||||
creation.
|
||||
</dd>
|
||||
<dt><code>description</code></dt>
|
||||
<dd>An optional human-readable description of the snapshot. If
|
||||
the description is omitted when initially creating the
|
||||
snapshot, then this field will be empty.
|
||||
</dd>
|
||||
<dt><code>memory</code></dt>
|
||||
<dd>On input, this is an optional request for how to handle VM
|
||||
memory state. For an offline domain or a disk-only snapshot,
|
||||
attribute <code>snapshot</code> must be <code>no</code>, since
|
||||
there is no VM state saved; otherwise, the attribute can
|
||||
be <code>internal</code> if the memory state is piggy-backed with
|
||||
other internal disk state, or <code>external</code> along with
|
||||
a second attribute <code>file</code> giving the absolute path
|
||||
of the file holding the VM memory state. <span class="since">Since
|
||||
1.0.1</span>
|
||||
</dd>
|
||||
<dt><code>disks</code></dt>
|
||||
<dd>On input, this is an optional listing of specific
|
||||
instructions for disk snapshots; it is needed when making a
|
||||
snapshot of only a subset of the disks associated with a
|
||||
domain, or when overriding the domain defaults for how to
|
||||
snapshot each disk, or for providing specific control over
|
||||
what file name is created in an external snapshot. On output,
|
||||
this is fully populated to show the state of each disk in the
|
||||
snapshot, including any properties that were generated by the
|
||||
hypervisor defaults. For full system snapshots, this field is
|
||||
ignored on input and omitted on output (a full system snapshot
|
||||
implies that all disks participate in the snapshot process).
|
||||
This element has a list of <code>disk</code>
|
||||
sub-elements, describing anywhere from zero to all of the
|
||||
disks associated with the domain. <span class="since">Since
|
||||
0.9.5</span>
|
||||
<dl>
|
||||
<dt><code>disk</code></dt>
|
||||
<dd>This sub-element describes the snapshot properties of a
|
||||
specific disk. The attribute <code>name</code> is
|
||||
mandatory, and must match either the <code><target
|
||||
dev='name'/></code> (recommended) or an unambiguous
|
||||
<code><source file='name'/></code> of one of
|
||||
the <a href="formatdomain.html#elementsDisks">disk
|
||||
devices</a> specified for the domain at the time of the
|
||||
snapshot. The attribute <code>snapshot</code> is
|
||||
optional, and the possible values are the same as the
|
||||
<code>snapshot</code> attribute for
|
||||
<a href="formatdomain.html#elementsDisks">disk devices</a>
|
||||
(<code>no</code>, <code>internal</code>,
|
||||
or <code>external</code>). 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.
|
||||
|
||||
<dl>
|
||||
<dt><code>source</code></dt>
|
||||
<dd>If the snapshot mode is external (whether specified
|
||||
or inherited), then there is an optional sub-element
|
||||
<code>source</code>, with an attribute <code>file</code>
|
||||
giving the name of the new file.
|
||||
If <code>source</code> is not
|
||||
given and the disk is backed by a local image file (not
|
||||
a block device or remote storage), 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.
|
||||
<p/>
|
||||
The <code>source</code> element also may contain the
|
||||
<code>seclabel</code> element (described in the
|
||||
<a href="formatdomain.html#seclabel">domain XML documentation</a>)
|
||||
which can be used to override the domain security labeling policy
|
||||
for <code>source</code>.
|
||||
</dd>
|
||||
<dt><code>driver</code></dt>
|
||||
<dd>An optional sub-element <code>driver</code>,
|
||||
with an attribute <code>type</code> giving the driver type (such
|
||||
as qcow2), of the new file created by the external
|
||||
snapshot of the new file.
|
||||
|
||||
Optionally <code>metadata_cache</code> sub-element can be used
|
||||
with same semantics as the identically named subelement of the
|
||||
domain definition disk's driver.
|
||||
</dd>
|
||||
<dt><code>seclabel</code></dt>
|
||||
</dl>
|
||||
|
||||
<span class="since">Since 1.2.2</span> the <code>disk</code> element
|
||||
supports an optional attribute <code>type</code> if the
|
||||
<code>snapshot</code> attribute is set to <code>external</code>.
|
||||
This attribute specifies the snapshot target storage type and allows
|
||||
to overwrite the default <code>file</code> type. The <code>type</code>
|
||||
attribute along with the format of the <code>source</code>
|
||||
sub-element is identical to the <code>source</code> element used in
|
||||
domain disk definitions. See the
|
||||
<a href="formatdomain.html#elementsDisks">disk devices</a> section
|
||||
documentation for further information.
|
||||
|
||||
Libvirt currently supports the <code>type</code> element in the qemu
|
||||
driver and supported values are <code>file</code>, <code>block</code>
|
||||
and <code>network</code> with a protocol of <code>gluster</code>
|
||||
<span class="since">(since 1.2.2)</span>.
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>creationTime</code></dt>
|
||||
<dd>A readonly representation of the time this snapshot was
|
||||
created. The time is specified in seconds since the Epoch,
|
||||
UTC (i.e. Unix time).
|
||||
</dd>
|
||||
<dt><code>state</code></dt>
|
||||
<dd>A readonly representation of the state of the domain at the
|
||||
time this snapshot was taken. If a full system snapshot was
|
||||
created, then this is the state of the domain at that
|
||||
time. When the domain is reverted to this snapshot, the
|
||||
domain's state will default to this state, unless overridden
|
||||
by <code>virDomainRevertToSnapshot()</code> flags to revert to
|
||||
a running or paused state. Additionally, this field can be the
|
||||
value "disk-snapshot" (<span class="since">since 0.9.5</span>)
|
||||
when it represents only a disk snapshot (no VM memory state),
|
||||
and reverting to this snapshot will default to an inactive
|
||||
guest.
|
||||
</dd>
|
||||
<dt><code>parent</code></dt>
|
||||
<dd>Readonly, present only if this snapshot has a parent. The
|
||||
parent name is given by the sub-element <code>name</code>. The
|
||||
parent relationship allows tracking a tree of related snapshots.
|
||||
</dd>
|
||||
<dt><code>domain</code></dt>
|
||||
<dd>A readonly representation of the domain that this snapshot
|
||||
was taken against. Older versions of libvirt stored only a
|
||||
single child element, uuid; reverting to a snapshot like this
|
||||
is risky if the current state of the domain differs from the
|
||||
state that the domain was created in, and requires the use of
|
||||
the <code>VIR_DOMAIN_SNAPSHOT_REVERT_FORCE</code> flag
|
||||
in <code>virDomainRevertToSnapshot()</code>. Newer versions
|
||||
of libvirt (<span class="since">since 0.9.5</span>) store the
|
||||
entire inactive <a href="formatdomain.html">domain
|
||||
configuration</a> at the time of the snapshot
|
||||
(<span class="since">since 0.9.5</span>). The domain will have
|
||||
security-sensitive information omitted
|
||||
unless the flag <code>VIR_DOMAIN_SNAPSHOT_XML_SECURE</code> is
|
||||
provided on a read-write connection.
|
||||
</dd>
|
||||
<dt><code>cookie</code></dt>
|
||||
<dd>An optional readonly representation of a save image cookie
|
||||
containing additional data libvirt may need to properly
|
||||
restore a domain from an active snapshot when such data cannot
|
||||
be stored directly in the <code>domain</code> to maintain
|
||||
compatibility with older libvirt or hypervisor.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="example">Examples</a></h2>
|
||||
|
||||
<p>Using this XML to create a disk snapshot of just vda on a qemu
|
||||
domain with two disks:</p>
|
||||
<pre>
|
||||
<domainsnapshot>
|
||||
<description>Snapshot of OS install and updates</description>
|
||||
<disks>
|
||||
<disk name='vda'>
|
||||
<source file='/path/to/new'/>
|
||||
</disk>
|
||||
<disk name='vdb' snapshot='no'/>
|
||||
<disk name='vdc'>
|
||||
<source file='/path/to/newc'>
|
||||
<seclabel model='dac' relabel='no'/>
|
||||
</source>
|
||||
</disk>
|
||||
</disks>
|
||||
</domainsnapshot></pre>
|
||||
|
||||
<p>will result in XML similar to this from
|
||||
<code>virDomainSnapshotGetXMLDesc()</code>:</p>
|
||||
<pre>
|
||||
<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>
|
||||
<memory snapshot='no'/>
|
||||
<disks>
|
||||
<disk name='vda' snapshot='external'>
|
||||
<driver type='qcow2'/>
|
||||
<b><source file='/path/to/new'/></b>
|
||||
</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'/>
|
||||
<b><source file='/path/to/old'/></b>
|
||||
<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></pre>
|
||||
|
||||
<p>With that snapshot created, <code>/path/to/old</code> is the
|
||||
read-only backing file to the new active
|
||||
file <code>/path/to/new</code>. The <code><domain></code>
|
||||
element within the snapshot xml records the state of the domain
|
||||
just before the snapshot; a call
|
||||
to <code>virDomainGetXMLDesc()</code> will show that the domain
|
||||
has been changed to reflect the snapshot:
|
||||
</p>
|
||||
<pre>
|
||||
<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'/>
|
||||
<b><source file='/path/to/new'/></b>
|
||||
<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></pre>
|
||||
</body>
|
||||
</html>
|
297
docs/formatsnapshot.rst
Normal file
297
docs/formatsnapshot.rst
Normal file
@ -0,0 +1,297 @@
|
||||
.. role:: since
|
||||
|
||||
===================
|
||||
Snapshot XML format
|
||||
===================
|
||||
|
||||
.. contents::
|
||||
|
||||
Snapshot XML
|
||||
------------
|
||||
|
||||
Snapshots are one form of `domain state
|
||||
capture <kbase/domainstatecapture.html>`__. There are several types of
|
||||
snapshots:
|
||||
|
||||
disk snapshot
|
||||
Contents of disks (whether a subset or all disks associated with the domain)
|
||||
are saved at a given point of time, and can be restored back to that state.
|
||||
On a running guest, a disk snapshot is likely to be only crash-consistent
|
||||
rather than clean (that is, it represents the state of the disk on a sudden
|
||||
power outage, and may need fsck or journal replays to be made consistent); on
|
||||
an inactive guest, a disk snapshot is clean if the disks were clean when the
|
||||
guest was last shut down. Disk snapshots exist in two forms: internal (file
|
||||
formats such as qcow2 track both the snapshot and changes since the snapshot
|
||||
in a single file) and external (the snapshot is one file, and the changes
|
||||
since the snapshot are in another file).
|
||||
memory state (or VM state)
|
||||
Tracks only the state of RAM and all other resources in use by the VM. If the
|
||||
disks are unmodified between the time a VM state snapshot is taken and
|
||||
restored, then the guest will resume in a consistent state; but if the disks
|
||||
are modified externally in the meantime, this is likely to lead to data
|
||||
corruption.
|
||||
full system
|
||||
A combination of disk snapshots for all disks as well as VM memory state,
|
||||
which can be used to resume the guest from where it left off with symptoms
|
||||
similar to hibernation (that is, TCP connections in the guest may have timed
|
||||
out, but no files or processes are lost).
|
||||
|
||||
Libvirt can manage all three types of snapshots. For now, VM state (memory)
|
||||
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.
|
||||
|
||||
Full system snapshots are created by ``virDomainSnapshotCreateXML()`` with no
|
||||
flags, while disk snapshots are created by the same function with the
|
||||
``VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY`` flag. Regardless of the flags provided,
|
||||
restoration of the snapshot is handled 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``, ``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:`since 0.9.5` ), with the
|
||||
``VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE`` flag of
|
||||
``virDomainSnapshotCreateXML()``, all of the XML described here is relevant on
|
||||
input, even the fields that are normally described as readonly for output.
|
||||
|
||||
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. For now, the creation of external
|
||||
snapshots when checkpoints exist is forbidden, although future work will make it
|
||||
possible to integrate these two concepts.
|
||||
|
||||
The top-level ``domainsnapshot`` element may contain the following elements:
|
||||
|
||||
``name``
|
||||
|
||||
The optional name for this snapshot. If the name is omitted, libvirt will
|
||||
create a name based on the time of the creation.
|
||||
|
||||
``description``
|
||||
|
||||
An optional human-readable description of the snapshot. If the description
|
||||
is omitted when initially creating the snapshot, then this field will be
|
||||
empty.
|
||||
|
||||
``memory``
|
||||
|
||||
On input, this is an optional request for how to handle VM memory state. For
|
||||
an offline domain or a disk-only snapshot, attribute ``snapshot`` must be
|
||||
``no``, since there is no VM state saved; otherwise, the attribute can be
|
||||
``internal`` if the memory state is piggy-backed with other internal disk
|
||||
state, or ``external`` along with a second attribute ``file`` giving the
|
||||
absolute path of the file holding the VM memory state. :since:`Since 1.0.1`
|
||||
|
||||
``disks``
|
||||
|
||||
On input, this is an optional listing of specific instructions for disk
|
||||
snapshots; it is needed when making a snapshot of only a subset of the disks
|
||||
associated with a domain, or when overriding the domain defaults for how to
|
||||
snapshot each disk, or for providing specific control over what file name is
|
||||
created in an external snapshot. On output, this is fully populated to show
|
||||
the state of each disk in the snapshot, including any properties that were
|
||||
generated by the hypervisor defaults. For full system snapshots, this field
|
||||
is ignored on input and omitted on output (a full system snapshot implies
|
||||
that all disks participate in the snapshot process). This element has a list
|
||||
of ``disk`` sub-elements, describing anywhere from zero to all of the disks
|
||||
associated with the domain. :since:`Since 0.9.5`
|
||||
|
||||
``disk``
|
||||
|
||||
This sub-element describes the snapshot properties of a specific disk.
|
||||
The attribute ``name`` is mandatory, and must match either the ``<target
|
||||
dev='name'/>`` (recommended) or an unambiguous ``<source file='name'/>``
|
||||
of one of the `disk devices <formatdomain.html#elementsDisks>`__
|
||||
specified for the domain at the time of the snapshot. The attribute
|
||||
``snapshot`` is optional, and the possible values are the same as the
|
||||
``snapshot`` attribute for `disk devices
|
||||
<formatdomain.html#elementsDisks>`__ (``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.
|
||||
|
||||
``source``
|
||||
|
||||
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 of the new file. If ``source`` is not given
|
||||
and the disk is backed by a local image file (not a block device or
|
||||
remote storage), 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.
|
||||
|
||||
The ``source`` element also may contain the ``seclabel`` element
|
||||
(described in the `domain XML documentation
|
||||
<formatdomain.html#seclabel>`__) which can be used to override the
|
||||
domain security labeling policy for ``source``.
|
||||
|
||||
``driver``
|
||||
|
||||
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. Optionally ``metadata_cache``
|
||||
sub-element can be used with same semantics as the identically named
|
||||
subelement of the domain definition disk's driver.
|
||||
|
||||
``seclabel``
|
||||
|
||||
:since:`Since 1.2.2` the ``disk`` element supports an optional attribute
|
||||
``type`` if the ``snapshot`` attribute is set to ``external``. This
|
||||
attribute specifies the snapshot target storage type and allows to
|
||||
overwrite the default ``file`` type. The ``type`` attribute along with
|
||||
the format of the ``source`` sub-element is identical to the ``source``
|
||||
element used in domain disk definitions. See the `disk devices
|
||||
<formatdomain.html#elementsDisks>`__ section documentation for further
|
||||
information. Libvirt currently supports the ``type`` element in the qemu
|
||||
driver and supported values are ``file``, ``block`` and ``network`` with
|
||||
a protocol of ``gluster`` :since:`(since 1.2.2)` .
|
||||
|
||||
``creationTime``
|
||||
|
||||
A readonly representation of the time this snapshot was created. The time is
|
||||
specified in seconds since the Epoch, UTC (i.e. Unix time).
|
||||
|
||||
``state``
|
||||
|
||||
A readonly representation of the state of the domain at the time this
|
||||
snapshot was taken. If a full system snapshot was created, then this is the
|
||||
state of the domain at that time. When the domain is reverted to this
|
||||
snapshot, the domain's state will default to this state, unless overridden
|
||||
by ``virDomainRevertToSnapshot()`` flags to revert to a running or paused
|
||||
state. Additionally, this field can be the value "disk-snapshot" (
|
||||
:since:`since 0.9.5`) when it represents only a disk snapshot (no VM memory
|
||||
state), and reverting to this snapshot will default to an inactive guest.
|
||||
|
||||
``parent``
|
||||
|
||||
Readonly, present only if this snapshot has a parent. The parent name is
|
||||
given by the sub-element ``name``. The parent relationship allows tracking a
|
||||
tree of related snapshots.
|
||||
|
||||
``domain``
|
||||
|
||||
A readonly representation of the domain that this snapshot was taken
|
||||
against. Older versions of libvirt stored only a single child element,
|
||||
uuid; reverting to a snapshot like this is risky if the current state of the
|
||||
domain differs from the state that the domain was created in, and requires
|
||||
the use of the ``VIR_DOMAIN_SNAPSHOT_REVERT_FORCE`` flag in
|
||||
``virDomainRevertToSnapshot()``. Newer versions of libvirt ( :since:`since
|
||||
0.9.5` ) store the entire inactive `domain configuration
|
||||
<formatdomain.html>`__ at the time of the snapshot ( :since:`since 0.9.5` ).
|
||||
The domain will have security-sensitive information omitted unless the flag
|
||||
``VIR_DOMAIN_SNAPSHOT_XML_SECURE`` is provided on a read-write connection.
|
||||
|
||||
``cookie``
|
||||
|
||||
An optional readonly representation of a save image cookie containing
|
||||
additional data libvirt may need to properly restore a domain from an active
|
||||
snapshot when such data cannot be stored directly in the ``domain`` to
|
||||
maintain compatibility with older libvirt or hypervisor.
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
Using this XML to create a disk snapshot of just vda on a qemu domain with two
|
||||
disks:
|
||||
|
||||
::
|
||||
|
||||
<domainsnapshot>
|
||||
<description>Snapshot of OS install and updates</description>
|
||||
<disks>
|
||||
<disk name='vda'>
|
||||
<source file='/path/to/new'/>
|
||||
</disk>
|
||||
<disk name='vdb' snapshot='no'/>
|
||||
<disk name='vdc'>
|
||||
<source file='/path/to/newc'>
|
||||
<seclabel model='dac' relabel='no'/>
|
||||
</source>
|
||||
</disk>
|
||||
</disks>
|
||||
</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>
|
||||
<memory snapshot='no'/>
|
||||
<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>
|
@ -51,7 +51,6 @@ docs_html_in_files = [
|
||||
'formatnode',
|
||||
'formatnwfilter',
|
||||
'formatsecret',
|
||||
'formatsnapshot',
|
||||
'formatstoragecaps',
|
||||
'formatstorageencryption',
|
||||
'goals',
|
||||
@ -99,6 +98,7 @@ docs_rst_files = [
|
||||
'formatbackup',
|
||||
'formatcheckpoint',
|
||||
'formatdomain',
|
||||
'formatsnapshot',
|
||||
'formatstorage',
|
||||
'glib-adoption',
|
||||
'hacking',
|
||||
|
Loading…
Reference in New Issue
Block a user