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