KVM: interne und externe Snapshots

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Virtualisierung mit KVM ermöglicht es, Snapshots virtueller Maschinen zu erstellen. Ein Weg führt dabei allerdings in die Sackgasse.

Snapshots virtueller Maschinen sind für viele Zwecke praktisch. Wer etwa sein System kaputtkonfiguriert, kann damit auf einen früheren Zustand, bei dem noch alles funktionierte, zürückkehren. Mit KVM/Libvirt lässt sich ein Snapshot mit einem Befehl erzeugen. Entweder mit "virsh snapshot-create", das ein XML-File erwartet, das den Snapshot genauer definiert, oder "virsh snapshot-create-as", das die meisten Werte einfach mit Defaults vordefiniert:

$ virsh snapshot-create-as test
Domain snapshot 1495450809 created

$ virsh snapshot-list test
 Name                 Creation Time             State
------------------------------------------------------------
 1495450809           2017-05-22 13:00:09 +0200 running

Genauso einfach kehren Sie zu einem alten Zustand wieder zurück, entweder über den Namen oder mit "--current" zum neuesten Snapshot:

$ virsh snapshot-revert --current test 

Ein weiterer Virsh-Befehl entfernt den Snapshot wieder:

$ virsh snapshot-delete --current test 
Domain snapshot 1495450809 deleted

Alle das funktioniert aber nur, wenn das von der VM verwendete Image im QCOW2-Format gespeichert ist. Denn Libvirt unterscheidet zwischen sogenannten internen und externen Snapshots. Die internen Snapshots sichern auch den aktuellen Zustand der VM und funktionieren nur mit QCOW2. Die externen Snapshots sichern nur den Disk-Zustand und lassen sich auch mit Raw-Images erstellen. Leider haben die Entwickler auf halber Strecke Halt gemacht und externe Snapshots nicht komplett implementiert. Red Hat schreibt in seiner Dokumentation dazu lapidar: "At the moment external snapshots are a one-way operation as libvirt can create them but cannot do anything further with them."
Deshalb sind externe Snapshots im Moment nicht besonders nützlich, können aber andererseits hinderlich sein, wenn Sie etwa aus Versehen einen externen Snapshot angelegt haben und dann die VM löschen möchten. Denn die Virt-Tools verweigern nicht nur das Löschen einer VM, wenn es noch Snapshots davon gibt, sie erlauben es auch nicht, einen externen Snapshot einfach zu löschen, wie die folgende Befehlskette zeigt:

$ virsh snapshot-create-as test2
error: unsupported configuration: internal snapshot for disk vda unsupported for storage type raw

$ virsh snapshot-create-as --disk-only test2
Domain snapshot 1495451275 created

$ virsh snapshot-revert --current test2 
error: unsupported configuration: revert to external snapshot not supported yet

$ virsh snapshot-delete --current test2
error: Failed to delete snapshot 1495451275
error: unsupported configuration: deletion of 1 external disk snapshots not supported yet

Die Lösung aus diesem Dilemma besteht darin, zuerst die "Metadaten" des externen Snapshots zu entfernen und dann das Image von Hand zu löschen:

$ virsh snapshot-delete --current --metadata test2
Domain snapshot 1495451275 deleted

# ls -l /var/lib/libvirt/images/test2*
-rw------- 1 libvirt-qemu kvm      983040 Mai 22 13:10 test2.1495451275
-rw-r--r-- 1 libvirt-qemu kvm 10737418240 Mai 22 13:07 test2.img
# rm /var/lib/libvirt/images/test2.1495451275
24.05.2017
comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023