docs: backup: Convert XML documentation to RST

Switch to the new format for easier extension.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Peter Krempa 2020-06-25 14:47:25 +02:00
parent 981222b682
commit 3927880e9a
2 changed files with 149 additions and 191 deletions

View File

@ -1,191 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1>Backup XML format</h1>
<ul id="toc"></ul>
<h2><a id="BackupAttributes">Backup XML</a></h2>
<p>
Creating a backup, whether full or incremental, is done
via <code>virDomainBackupBegin()</code>, which takes an XML
description of the actions to perform, as well as an optional
second XML document <a href="formatcheckpoint.html">describing a
checkpoint</a> to create at the same point in time. See
also <a href="kbase/domainstatecapture.html">a comparison</a> between
the various state capture APIs.
</p>
<p>
There are two general modes for backups: a push mode (where the
hypervisor writes out the data to the destination file, which
may be local or remote), and a pull mode (where the hypervisor
creates an NBD server that a third-party client can then read as
needed, and which requires the use of temporary storage,
typically local, until the backup is complete).
</p>
<p>
The instructions for beginning a backup job are provided as
attributes and elements of the
top-level <code>domainbackup</code> element. This element
includes an optional attribute <code>mode</code> which can be
either "push" or "pull" (default
push). <code>virDomainBackupGetXMLDesc()</code> can be used to
see the actual values selected for elements omitted during
creation (for example, learning which port the NBD server is
using in the pull model or what file names libvirt generated
when none were supplied). The following child elements and attributes
are supported:
</p>
<dl>
<dt><code>incremental</code></dt>
<dd>An optional element giving the name of an existing
checkpoint of the domain, which will be used to make this
backup an incremental one. In the push model, only changes
since the named checkpoint are written to the destination. In
the pull model, the NBD server uses the
NBD_OPT_SET_META_CONTEXT extension to advertise to the client
which portions of the export contain changes since the named
checkpoint. If omitted, a full backup is performed.
</dd>
<dt><code>server</code></dt>
<dd>Present only for a pull mode backup. Contains the same
attributes as
the <a href="formatdomain.html#elementsDisks"><code>protocol</code>
element of a disk</a> attached via NBD in the domain (such as
transport, socket, name, port, or tls), necessary to set up an
NBD server that exposes the content of each disk at the time
the backup is started.
</dd>
<dt><code>disks</code></dt>
<dd>An optional listing of instructions for disks participating
in the backup (if omitted, all disks participate and libvirt
attempts to generate filenames by appending the current
timestamp as a suffix). If the entire element was omitted on
input, then all disks participate in the backup, otherwise,
only the disks explicitly listed which do not also
use <code>backup='no'</code> will participate. On output, this
is the state of each of the domain's disk in relation to the
backup operation.
<dl>
<dt><code>disk</code></dt>
<dd>This sub-element describes the backup properties of a
specific disk, with the following attributes and child
elements:
<dl>
<dt><code>name</code></dt>
<dd>A mandatory attribute which must match
the <code>&lt;target dev='name'/&gt;</code>
of one of
the <a href="formatdomain.html#elementsDisks">disk
devices</a> specified for the domain at the time of
the checkpoint.</dd>
<dt><code>backup</code></dt>
<dd>Setting this attribute to <code>yes</code>(default) specifies
that the disk should take part in the backup and using
<code>no</code> excludes the disk from the backup.</dd>
<dt><code>exportname</code></dt>
<dd>Allows modification of the NBD export name for the given disk.
By default equal to disk target.
Valid only for pull mode backups.</dd>
<dt><code>exportbitmap</code></dt>
<dd>Allows modification of the name of the bitmap describing dirty
blocks for an incremental backup exported via NBD export name
for the given disk.
Valid only for pull mode backups.</dd>
<dt><code>type</code></dt>
<dd>A mandatory attribute to describe the type of the
disk, except when <code>backup='no'</code> is
used. Valid values include <code>file</code>, or
<code>block</code>.
Similar to a disk declaration for a domain, the choice of type
controls what additional sub-elements are needed to describe
the destination.</dd>
<dt><code>target</code></dt>
<dd>Valid only for push mode backups, this is the
primary sub-element that describes the file name of
the backup destination, similar to
the <code>source</code> sub-element of a domain
disk. An optional sub-element <code>driver</code> can
also be used, with an attribute <code>type</code> to
specify a destination format different from
qcow2. See documentation for <code>scratch</code> below for
additional configuration.</dd>
<dt><code>scratch</code></dt>
<dd>Valid only for pull mode backups, this is the
primary sub-element that describes the file name of
the local scratch file to be used in facilitating the
backup, and is similar to the <code>source</code>
sub-element of a domain disk. Currently only <code>file</code>
and <code>block</code> scratch storage is supported. The
<code>file</code> scratch file is created and deleted by
libvirt in the given location. A <code>block</code> scratch
device must exist prior to starting the backup and is formatted.
The block device must have enough space for the corresponding
disk data including format overhead.
If <code>VIR_DOMAIN_BACKUP_BEGIN_REUSE_EXTERNAL</code> flag is
used the file for a scratch of <code>file</code> type must
exist with the correct format and size to hold the copy and is
used without modification. The file is not deleted after the
backup but the contents of the file don't make sense outside
of the backup. The same applies for the block device which
must be formatted appropriately.
Similarly to the domain
<a href="formatdomain.html#elementsDisks"><code>disk</code></a>
definition <code>scratch</code> and <code>target</code> can
contain <code>seclabel</code> and/or <code>encryption</code>
subelements to configure the corresponding properties.
</dd>
</dl>
</dd>
</dl>
</dd>
</dl>
<h2><a id="example">Examples</a></h2>
<p>Use <code>virDomainBackupBegin()</code> to perform a full
backup using push mode. The example lets libvirt pick the
destination and format for 'vda', fully specifies that we want a
raw backup of 'vdb', and omits 'vdc' from the operation.
</p>
<pre>
&lt;domainbackup&gt;
&lt;disks&gt;
&lt;disk name='vda' backup='yes'/&gt;
&lt;disk name='vdb' type='file'&gt;
&lt;target file='/path/to/vdb.backup'/&gt;
&lt;driver type='raw'/&gt;
&lt;/disk&gt;
&lt;disk name='vdc' backup='no'/&gt;
&lt;/disks&gt;
&lt;/domainbackup&gt;
</pre>
<p>If the previous full backup also passed a parameter describing
<a href="formatcheckpoint.html">checkpoint XML</a> that resulted
in a checkpoint named <code>1525889631</code>, we can make
another call to <code>virDomainBackupBegin()</code> to perform
an incremental backup of just the data changed since that
checkpoint, this time using the following XML to start a pull
model export of the 'vda' and 'vdb' disks, where a third-party
NBD client connecting to '/path/to/server' completes the backup
(omitting 'vdc' from the explicit list has the same effect as
the backup='no' from the previous example):
</p>
<pre>
&lt;domainbackup mode="pull"&gt;
&lt;incremental&gt;1525889631&lt;/incremental&gt;
&lt;server transport="unix" socket="/path/to/server"/&gt;
&lt;disks&gt;
&lt;disk name='vda' backup='yes' type='file'&gt;
&lt;scratch file='/path/to/file1.scratch'/&gt;
&lt;/disk&gt;
&lt;/disks&gt;
&lt;/domainbackup&gt;
</pre>
</body>
</html>

149
docs/formatbackup.rst Normal file
View File

@ -0,0 +1,149 @@
Backup XML format
=================
.. contents::
Backup XML
----------
Creating a backup, whether full or incremental, is done via
``virDomainBackupBegin()``, which takes an XML description of the actions to
perform, as well as an optional second XML document `describing a
checkpoint <formatcheckpoint.html>`__ to create at the same point in time. See
also `a comparison <kbase/domainstatecapture.html>`__ between the various state
capture APIs.
There are two general modes for backups: a push mode (where the hypervisor
writes out the data to the destination file, which may be local or remote), and
a pull mode (where the hypervisor creates an NBD server that a third-party
client can then read as needed, and which requires the use of temporary storage,
typically local, until the backup is complete).
The instructions for beginning a backup job are provided as attributes and
elements of the top-level ``domainbackup`` element. This element includes an
optional attribute ``mode`` which can be either "push" or "pull" (default push).
``virDomainBackupGetXMLDesc()`` can be used to see the actual values selected
for elements omitted during creation (for example, learning which port the NBD
server is using in the pull model or what file names libvirt generated when none
were supplied). The following child elements and attributes are supported:
``incremental``
An optional element giving the name of an existing checkpoint of the domain,
which will be used to make this backup an incremental one. In the push model,
only changes since the named checkpoint are written to the destination. In
the pull model, the NBD server uses the NBD_OPT_SET_META_CONTEXT extension to
advertise to the client which portions of the export contain changes since
the named checkpoint. If omitted, a full backup is performed.
``server``
Present only for a pull mode backup. Contains the same attributes as the
```protocol`` element of a disk <formatdomain.html#elementsDisks>`__ attached
via NBD in the domain (such as transport, socket, name, port, or tls),
necessary to set up an NBD server that exposes the content of each disk at
the time the backup is started.
``disks``
An optional listing of instructions for disks participating in the backup (if
omitted, all disks participate and libvirt attempts to generate filenames by
appending the current timestamp as a suffix). If the entire element was
omitted on input, then all disks participate in the backup, otherwise, only
the disks explicitly listed which do not also use ``backup='no'`` will
participate. On output, this is the state of each of the domain's disk in
relation to the backup operation.
``disk``
This sub-element describes the backup properties of a specific disk, with
the following attributes and child elements:
``name``
A mandatory attribute which must match the ``<target dev='name'/>`` of
one of the `disk devices <formatdomain.html#elementsDisks>`__ specified
for the domain at the time of the checkpoint.
``backup``
Setting this attribute to ``yes``\ (default) specifies that the disk
should take part in the backup and using ``no`` excludes the disk from
the backup.
``exportname``
Allows modification of the NBD export name for the given disk. By
default equal to disk target. Valid only for pull mode backups.
``exportbitmap``
Allows modification of the name of the bitmap describing dirty blocks
for an incremental backup exported via NBD export name for the given
disk. Valid only for pull mode backups.
``type``
A mandatory attribute to describe the type of the disk, except when
``backup='no'`` is used. Valid values include ``file``, or ``block``.
Similar to a disk declaration for a domain, the choice of type controls
what additional sub-elements are needed to describe the destination.
``target``
Valid only for push mode backups, this is the primary sub-element that
describes the file name of the backup destination, similar to the
``source`` sub-element of a domain disk. An optional sub-element
``driver`` can also be used, with an attribute ``type`` to specify a
destination format different from qcow2. See documentation for
``scratch`` below for additional configuration.
``scratch``
Valid only for pull mode backups, this is the primary sub-element that
describes the file name of the local scratch file to be used in
facilitating the backup, and is similar to the ``source`` sub-element
of a domain disk. Currently only ``file`` and ``block`` scratch storage
is supported. The ``file`` scratch file is created and deleted by
libvirt in the given location. A ``block`` scratch device must exist
prior to starting the backup and is formatted. The block device must
have enough space for the corresponding disk data including format
overhead. If ``VIR_DOMAIN_BACKUP_BEGIN_REUSE_EXTERNAL`` flag is used
the file for a scratch of ``file`` type must exist with the correct
format and size to hold the copy and is used without modification. The
file is not deleted after the backup but the contents of the file don't
make sense outside of the backup. The same applies for the block device
which must be formatted appropriately. Similarly to the domain
```disk`` <formatdomain.html#elementsDisks>`__ definition ``scratch``
and ``target`` can contain ``seclabel`` and/or ``encryption``
subelements to configure the corresponding properties.
Examples
--------
Use ``virDomainBackupBegin()`` to perform a full backup using push mode. The
example lets libvirt pick the destination and format for 'vda', fully specifies
that we want a raw backup of 'vdb', and omits 'vdc' from the operation.
::
<domainbackup>
<disks>
<disk name='vda' backup='yes'/>
<disk name='vdb' type='file'>
<target file='/path/to/vdb.backup'/>
<driver type='raw'/>
</disk>
<disk name='vdc' backup='no'/>
</disks>
</domainbackup>
If the previous full backup also passed a parameter describing `checkpoint
XML <formatcheckpoint.html>`__ that resulted in a checkpoint named
``1525889631``, we can make another call to ``virDomainBackupBegin()`` to
perform an incremental backup of just the data changed since that checkpoint,
this time using the following XML to start a pull model export of the 'vda' and
'vdb' disks, where a third-party NBD client connecting to '/path/to/server'
completes the backup (omitting 'vdc' from the explicit list has the same effect
as the backup='no' from the previous example):
::
<domainbackup mode="pull">
<incremental>1525889631</incremental>
<server transport="unix" socket="/path/to/server"/>
<disks>
<disk name='vda' backup='yes' type='file'>
<scratch file='/path/to/file1.scratch'/>
</disk>
</disks>
</domainbackup>