====== KVM & LibVirt - External snapshots on live systems ====== This is something you'd do if you were planning on yum updating a system or upgrading software across major versions. In VMware it's referred to as simply "taking" and "deleting" snapshots. It's quite a bit more complicated and somewhat more limited in its capabilities when using KVM. Here is my howto though, and it seems to work. ==== Take your snapshot ==== [jrdalrymple@kvm ~]$ sudo virsh snapshot-create-as kvmdomain snap1 "Yum Upgrade" --disk-only --atomic Domain snapshot snap1 created [jrdalrymple@kvm ~]$ sudo virsh snapshot-list kvmdomain Name Creation Time State ------------------------------------------------------------ snap1 2015-04-22 16:16:39 -0500 disk-snapshot [jrdalrymple@kvm ~]$ sudo virsh snapshot-info kvmdomain snap1 Name: snap1 Domain: kvmdomain Current: yes State: disk-snapshot Location: external Parent: - Children: 0 Descendants: 0 Metadata: yes ==== Make your massive changes that are likely to break the system ==== ==== If things go right and you want to commit the change blocks to the image: ==== - **Commit the change** [jrdalrymple@kvm ~]$ sudo virsh blockpull kvmdomain vda --wait --verbose - **Delete the old base image file** [jrdalrymple@kvm ~]$ sudo rm /var/lib/libvirt/images/NFS/kvmdomain.img - **Delete the snapshot metadata** [jrdalrymple@kvm ~]$ sudo virsh snapshot-delete kvmdomain snap1 --metadata ==== Move the new base to the original base (optional): ==== - **Create XML file** [jrdalrymple@kvm ~]$ sudo virsh dumpxml kvmdomain /var/tmp/kvmdomain.xml - **VERIFY** [jrdalrymple@kvm ~]$ cat /var/tmp/kvmdomain.xml - **Undefine** [jrdalrymple@kvm ~]$ sudo virsh undefine kvmdomain - **Migrate** [jrdalrymple@kvm ~]$ sudo virsh blockcopy kvmdomain /var/lib/libvirt/images/NFS/kvmdomain.snap1 /var/lib/libvirt/images/NFS/kvmdomain.img --wait --verbose --pivot - **Redefine** [jrdalrymple@kvm ~]$ sudo virsh define /var/tmp/kvmdomain.xml - **Delete old file** [jrdalrymple@kvm ~]$ sudo rm /var/lib/libvirt/images/NFS/kvmdomain.snap1