Help with external snapshots as backups

Peter Krempa pkrempa at redhat.com
Tue Jul 14 09:13:20 UTC 2020


On Sat, Jul 11, 2020 at 13:04:51 -0400, Alex Regan wrote:
> Hi,
> I have a win10 guest on a fedora32 system and have some questions as I
> explore using external snapshots as a form of backup in case of a Windows
> failure (as in, it won't boot or is completely irrecoverable) as well as
> revision control (to be able to rollback changes after a failed app install,
> etc).
> 
> The first hit on Google for external snapshots involves a RHEL7 document
> that talks about how it's not officially supported. The current RHEL8 docs
> don't include any references to snapshots.
> 
> The fedora docs I've found are many years old - I'm just not sure if they're
> still applicable. Where can I find the current docs for fedora32?

Libvirt keeps compatibility, so all old semantics still apply. There
might be newer approaches though.


> - If I've already created a live internal snapshot, can I then create an
> external safely? Are all changes currently being written to this internal
> snapshot now?

You can create an external snapshot on top of an image which already has
internal snapsots safely, but you will not be able to use libvirt APIs
to revert to the internal snapshot. (this is a thing which is not
implemented yet ...)

> - Can external snapshots be used for backup? Perhaps there are predefined
> steps for doing this that I can follow?

I can't seem to find a link, but yes. By definition snapshot is a backup
of the VM state at the time when the snapshot was taken.

> This is the procedure I'm currently using. I've made a backup of the
> original image - can I now just continue to backup the snapshots in the
> eventuality of a crash, then use this original image backup and the
> snapshots to restore it?

If you VM is running, you must only copy images which are no longer used
in write mode. This means, that after you take the snapshot the previous
snapshot image (or base image) can be copied safely.

> I suppose I would also periodically merge the snapshots back into the a
> single snapshot to ease the process?

Yes, there is a theroetical limit of 200 chained images, so you must
keep it below.

> # virsh snapshot-create-as --domain dave-win10a win10a-state01 --diskspec vda,file=/var/lib/libvirt/images/vm_snapshots/disk-overlay.qcow2,snapshot=external
> --memspec
> file=/var/lib/libvirt/images/vm_snapshots/mem-overlay.qcow2,snapshot=external
> --atomic

This creates a snapshot with memory, which is good. You can restore the
state of the VM to the state when the snapshot was taken including the
memory state.

If you don't take the snapshot with memory, the disk state is still
valid but looks like as if the VM was powered off without shutting down
the OS, thus filesystems may be inconsistent.

Note that if you merge away the disk images, the memory image becomes
invalid as you can't return to it's state.

Alternatively there is the incremental backup API (not stable yet
though) which can backup disk state without the need for complex image
merging.

Here are some articles on the nuances of capturing VM state and backups:

https://libvirt.org/kbase/domainstatecapture.html
https://libvirt.org/kbase/incrementalbackupinternals.html




More information about the libvirt-users mailing list