mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
snapshot: allow reuse of existing files in disk snapshot
When disk snapshots were first implemented, libvirt blindly refused to allow an external snapshot destination that already exists, since qemu will blindly overwrite the contents of that file during the snapshot_blkdev monitor command, and we don't like a default of data loss by default. But VDSM has a scenario where NFS permissions are intentionally set so that the destination file can only be created by the management machine, and not the machine where the guest is running, so that libvirt will necessarily see the destination file already existing; adding a flag will allow VDSM to force the file reuse without libvirt complaining of possible data loss. https://bugzilla.redhat.com/show_bug.cgi?id=767104 * include/libvirt/libvirt.h.in (virDomainSnapshotCreateFlags): Add VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT. * src/libvirt.c (virDomainSnapshotCreateXML): Document it. Add note about partial failure. * tools/virsh.c (cmdSnapshotCreate, cmdSnapshotCreateAs): Add new flag. * tools/virsh.pod (snapshot-create, snapshot-create-as): Document it. * src/qemu/qemu_driver.c (qemuDomainSnapshotDiskPrepare) (qemuDomainSnapshotCreateXML): Implement the new flag.
This commit is contained in:
@@ -2024,7 +2024,7 @@ used to represent properties of snapshots.
|
||||
=over 4
|
||||
|
||||
=item B<snapshot-create> I<domain> [I<xmlfile>] {[I<--redefine> [I<--current>]]
|
||||
| [I<--no-metadata>] [I<--halt>] [I<--disk-only>]}
|
||||
| [I<--no-metadata>] [I<--halt>] [I<--disk-only>] [I<--reuse-external]}
|
||||
|
||||
Create a snapshot for domain I<domain> with the properties specified in
|
||||
I<xmlfile>. Normally, the only properties settable for a domain snapshot
|
||||
@@ -2061,14 +2061,19 @@ treat the snapshot as current, and cannot revert to the snapshot
|
||||
unless I<--redefine> is later used to teach libvirt about the
|
||||
metadata again).
|
||||
|
||||
If I<--reuse-external> is specified, and the snapshot XML requests an
|
||||
external snapshot with a destination of an existing file, then the
|
||||
existing file is truncated and reused; otherwise, a snapshot is refused
|
||||
to avoid losing contents of the existing files.
|
||||
|
||||
Existence of snapshot metadata will prevent attempts to B<undefine>
|
||||
a persistent domain. However, for transient domains, snapshot
|
||||
metadata is silently lost when the domain quits running (whether
|
||||
by command such as B<destroy> or by internal guest action).
|
||||
|
||||
=item B<snapshot-create-as> I<domain> {[I<--print-xml>]
|
||||
| [I<--no-metadata>] [I<--halt>]} [I<name>] [I<description>]
|
||||
[I<--disk-only> [[I<--diskspec>] B<diskspec>]...
|
||||
| [I<--no-metadata>] [I<--halt>] [I<--reuse-existing>]} [I<name>]
|
||||
[I<description>] [I<--disk-only> [[I<--diskspec>] B<diskspec>]...]
|
||||
|
||||
Create a snapshot for domain I<domain> with the given <name> and
|
||||
<description>; if either value is omitted, libvirt will choose a
|
||||
@@ -2091,6 +2096,11 @@ results in the following XML:
|
||||
<source file='/path/to,new'/>
|
||||
</disk>
|
||||
|
||||
If I<--reuse-external> is specified, and the domain XML or I<diskspec>
|
||||
option requests an external snapshot with a destination of an existing
|
||||
file, then the existing file is truncated and reused; otherwise, a
|
||||
snapshot is refused to avoid losing contents of the existing files.
|
||||
|
||||
If I<--no-metadata> is specified, then the snapshot data is created,
|
||||
but any metadata is immediately discarded (that is, libvirt does not
|
||||
treat the snapshot as current, and cannot revert to the snapshot
|
||||
|
||||
Reference in New Issue
Block a user