So erstellen Sie Snapshots von QEMU/KVM-Gästen
KVM (Kernel-based Virtual Machine) ist die Virtualisierungslösung (Hypervisor Typ 1), die im Linux-Kernel enthalten ist und standardmäßig zusammen mit QEMU verwendet wird, der Userspace-Software, die die Emulation der Gastsysteme (Hypervisor Typ 2) durchführt. In einem früheren Tutorial haben wir gesehen, wie man virtuelle KVM-Maschinen über die Befehlszeile erstellt und verwaltet. In diesem Artikel erfahren Sie stattdessen, wie Sie Snapshots von Gastsystemen mit Tools wie virsh und virt-manager erstellen und verwalten.
In diesem Tutorial lernen wir, wie man Snapshots von Gastsystemen erstellt, die mit QEMU/KVM emuliert wurden, indem man virsh und virt-manager verwendet.
In diesem Tutorial lernen Sie:
- Was ist der Unterschied zwischen internen und externen Snapshots?
- Erstellen, Löschen und Zurücksetzen auf interne Snapshots mit virsh oder virt-manager
- Auflisten von Snapshots, die einer Domäne zugeordnet sind
- Abrufen von Informationen zu einem Snapshot
- So löschen Sie einen internen Snapshot
Einleitung
Ein Snapshot ist im Grunde ein "eingefrorenes Bild" der Festplatte, des Speichers und des Zustands der Geräte, die einer Domäne zugeordnet sind und zu einem bestimmten Zeitpunkt aufgenommen wurden. Snapshots sind sehr nützlich: Sie können beispielsweise erstellt werden, bevor eine potenziell gefährliche Aufgabe auf dem System ausgeführt wird, um eine einfache Möglichkeit zu haben, wieder in einen bekannten Bohrlochzustand zu wechseln.
Um Snapshots von Gastsystemen zu erstellen, wenn wir QEMU/KVM verwenden, können wir entweder virsh (die Hauptschnittstelle für die Verwaltung von Domänen über die Befehlszeile) oder grafisch mit virt-manager verwenden. Es gibt zwei Arten von Snapshots: interne und externe. Interne Snapshots sind die Standardeinstellung: Sie werden in das Disk-Image eingebettet, das für das Gastsystem verwendet wird, und verwenden die COW-Technik (Copy On Write): Grundsätzlich gilt, dass wenn etwas geändert werden muss, es zuerst in den Snapshot kopiert wird, dann werden die neuen Daten geschrieben. Externe Snapshots hingegen werden in separaten Dateien gespeichert und funktionieren auf eine andere Weise. In diesem Tutorial konzentrieren wir uns auf ersteres.
Erstellen von Snapshots mit virsh
Ein System-Snapshot kann erstellt werden, wenn ein Gast ausgeführt oder ausgeschaltet wird. Grundsätzlich gibt es zwei Möglichkeiten, wie wir mit virsh einen Snapshot erstellen können: mit den Befehlen snapshot-create oder snapshot-create-as. Der Unterschied zwischen den beiden besteht darin, dass ersteres einen Snapshot mit den in einer XML-Datei angegebenen Eigenschaften erstellt, während letzteres einen Snapshot aus Argumenten erstellt. Für dieses Tutorial werden wir den letzteren Ansatz verwenden.
Angenommen, wir haben eine Domain namens "fedora36" am Laufen. Um einen Snapshot dieser Domain mit dem Namen "snapshot-0" zu erstellen, der "first snapshot" als Beschreibung verwendet, verwenden wir den folgenden Befehl:
virsh snapshot-create-as fedora36 snapshot0 --description "first snapshot"Wenn alles wie erwartet läuft, sollte das System antworten mit:
Domain snapshot fedora36-snapshot0 createdWir haben den Befehl snapshot-create-as virsh verwendet und als erstes Argument den Namen der Domäne übergeben, von der wir einen Snapshot erstellen möchten, und als zweites Argument den Namen, den wir für den Snapshot verwenden möchten. Schließlich haben wir die Option --description verwendet, um eine kurze Beschreibung für den Snapshot bereitzustellen. Wenn kein Name für den Snapshot angegeben wird, wird er nach dem Zufallsprinzip generiert. Die Beschreibung ist stattdessen optional. Da wir den Snapshot erstellt haben, als das System ausgeführt wurde, waren sowohl der Festplatten- als auch der Speicherstatus darin enthalten.
Erstellen eines Snapshots mit virt-manager
Eine alternative Methode zum Erstellen interner Snapshots ist die Verwendung der virt-manager-Anwendung. Um diese Methode zu verwenden, klicken Sie im Viewer für virtuelle Maschinen einfach auf die Schaltfläche, die im folgenden Screenshot hervorgehoben ist:
Sobald wir auf die Schaltfläche klicken, wird ein neues Fenster geöffnet. In der Benutzeroberfläche werden wir in der Lage sein, die mit der Domain verbundenen Snapshots zu visualisieren und zu verwalten. Um einen Schnappschuss hinzuzufügen, klicken wir einfach auf die Schaltfläche "Plus" in der unteren linken Ecke, geben einen Namen und eine Beschreibung für den Schnappschuss ein und klicken schließlich auf die Schaltfläche "Fertigstellen":
Im obigen Screenshot sehen Sie, dass sich neben dem vorhandenen Namen "snapshot0" ein Kontrollkästchen befindet. Dies liegt daran, dass es sich um den aktuell verwendeten Snapshot handelt. Später in diesem Tutorial erfahren Sie, wie Sie Informationen zu Snapshots abrufen können.
Zurücksetzen auf einen internen Snapshot
Angenommen, wir haben Änderungen an unserem Gastsystem vorgenommen und sind damit nicht zufrieden. Da wir einen Snapshot erstellt haben, können wir problemlos zu ihm zurückkehren, und alle Änderungen, die wir seit der Erstellung vorgenommen haben, gehen verloren. Um mit virsh zu einem Snapshot-Zustand zurückzukehren, verwenden wir snapshot-revert. Um zu dem "snapshot0" zurückzukehren, den wir im vorherigen Beispiel erstellt haben, würden wir Folgendes ausführen:
virsh snapshot-revert fedora36 snapshot0Wir haben nur den Namen der Gastdomain als erstes Argument und den Namen des Snapshots als zweites Argument angegeben. Um zum aktuellen Snapshot zurückzukehren, ohne dessen Namen anzugeben, würden wir alternativ Folgendes ausführen:
virsh snapshot-revert fedora36 --currentUm über die virt-manager-Schnittstelle zu einem Snapshot zurückzukehren, wählen wir einfach den Snapshot, zu dem wir zurückkehren möchten, in der Liste aus und klicken dann auf die Schaltfläche "Play":
Löschen eines internen Snapshots
Das Löschen eines internen Snapshots ist recht einfach. Alles, was wir tun müssen, ist, den Unterbefehl snapshot-delete virsh zu verwenden und erneut die Domain und den Namen des Snapshots anzugeben, den wir löschen möchten. Um beispielsweise "snapshot0" zu entfernen, würden wir Folgendes ausführen:
virsh snapshot-delete fedora36 snapshot0Das System sollte antworten mit:
Domain snapshot snapshot0 deletedUm einen Snapshot mit virt-manager zu entfernen, wählen wir ihn in der Liste aus und klicken auf die Schaltfläche "Entfernen". Wir werden aufgefordert, unsere Wahl zu bestätigen:
Abrufen einer Liste vorhandener Snapshots mit virsh
Wie wir in den vorherigen Beispielen gesehen haben, ist die Liste der verfügbaren Snapshots für einen bestimmten Gast bei der Verwendung von virt-manager leicht sichtbar, aber wie kann man sie von der Befehlszeile abrufen, wenn man virsh verwendet? Mit dem Unterbefehl snapshot-list können wir genau diese Aufgabe erledigen. Um alle Snapshots aufzulisten, die mit der Domäne "fedora36" verknüpft sind, würden wir Folgendes ausführen:
virsh snapshot-list fedora36In diesem Fall sieht die Ausgabe des Befehls wie folgt aus:
Name Creation Time State
--------------------------------------------------
snapshot0 2022-07-28 17:53:51 +0200 running
Standardmäßig besteht die Ausgabe aus drei Spalten, die Informationen über den Namen des Snapshots, seine Erstellungszeit und den Status der Domäne beim Erstellen des Snapshots enthalten.
Abrufen von Informationen zu einem Snapshot
Um Informationen über einen bestimmten Snapshot zu erhalten, verwenden wir snapshot-info und übergeben den Namen der Domäne als erstes Argument und den Namen des Snapshots, den wir untersuchen möchten, als zweites Argument. Um Informationen über "snapshot0" zu erhalten, würden wir Folgendes ausführen:
virsh snapshot-info fedora36 snapshot0Die vom Befehl erzeugte Ausgabe sollte in etwa wie folgt aussehen:
Name: snapshot0
Domain: fedora36
Current: yes
State: running
Location: internal
Parent: -
Children: 0
Descendants: 0
Metadata: yes
Unter anderem können wir sehen, dass der Snapshot derjenige ist, der gerade verwendet wird, sein Speicherort "intern" ist (wie wir bereits gesagt haben, können Snapshots auch "extern" sein) und er keine Kinder oder Nachkommen hat.
Ein weiterer virsh-Befehl, den wir verwenden können, um Informationen über einen Snapshot abzurufen, ist snapshot-dumpxml. Es wird verwendet, um den XML-Code anzuzeigen, der die Snapshot-Struktur darstellt. Wie im vorherigen Fall müssen wir die Domain und den Snapshot-Namen als Argumente für den Befehl angeben:
virsh snapshot-dumpxml fedora36 snapshot0Löschen eines Snapshots
Wenn wir sicher sind, dass wir keinen Snapshot benötigen und ihn löschen möchten, können wir den Befehl snapshot-delete virsh verwenden. Wie üblich geben wir den Namen der Domain an, zu der der Snapshot gehört, und den Namen des Snapshots, den wir löschen möchten. Um den "snapshot0"-Snapshot zu löschen, den wir in den vorherigen Beispielen verwendet haben, würden wir Folgendes ausführen:
virsh snapshot-delete fedora36 snapshot0Wenn alles wie erwartet verläuft, sollten wir eine Nachricht wie die folgende erhalten:
Domain snapshot snapshot0 deletedSchlüsse
Snapshots sind ein wirklich wichtiges Feature: Sie stellen ein Abbild des Zustands eines emulierten Systems zu einem bestimmten Zeitpunkt dar, und wir können sie verwenden, um das System wieder in einen bekannten Well-Zustand zu versetzen, falls etwas schief geht. Bei der Verwendung von Qemu/KVM unter Linux gibt es zwei Arten von Snapshots: interne und externe. In diesem Tutorial haben wir uns auf Ersteres konzentriert, bald werden wir über Letzteres sprechen und wir werden sehen, was die Unterschiede zwischen den beiden sind.




