I'm currently engineering a backup solution for KVM VM's as an additional measure to traditional backups.
Unfortunately, all currently (August 2013) existing solutions I came across so far either:
- do not ensure a consistent backup of the VM (losing RAM state, creating a dirty image, or other things),
- or require lengthy downtime (complete VM shutdown while backing up).
I'm aware of QEMU/libvirt's functionality of taking snapshots, however, it's not yet usable since:
- image-internal snapshots present you with an ever-changing image file, resulting in a likely dirty backup (assuming one uses qcow2 images at all).
- one cannot yet merge a currently active external snapshot into the original backing image ("blockcommit").
Out of the above reasons, I'm now implementing a script that:
- Saves the VM's state and halts it
- Sets up a devicemapper snapshot(s) where the VM's disk images and state reside
- Resumes the VM
- Mount the snapshot(s) of step 2.
- Backs up the VM's disk and state (configuration for convenience)
- Merges back the snapshot(s).
If I got everything right, this will take consistent backups of VM's with only seconds (if at all, since 1-3 is fast, possibly sub-second) of downtime. Of course, when restoring, the VM will be way in the past, but at least giving me the option of an orderly shutdown/reboot.
Am I missing something with this solution? Or has someone indeed already implemented this?