KVM

KVM-Gast-Snapshots mit Libvirt

KVM-Gast-Snapshots mit Libvirt
VMs haben viele Anwendungsfälle, von denen einer die Kapazität von VMs ist, als Testmaschinen verwendet zu werden. Sie können innerhalb einer VM experimentieren, Patches anwenden und Upgrades testen, bevor Sie dasselbe auf Ihren Produktionssystemen oder Ihrer Workstation tun. Sie können auch Wegwerf-VMs ohne persönliche oder sensible Daten für Malware-Tests verwenden, wie es die meisten Sicherheits-Communitys tun. Stellen Sie nur sicher, dass das Netzwerk der VM von Ihrem Host und LAN isoliert ist.

Es wird jedoch mühsam, das Betriebssystem in Ihrer VM immer wieder neu zu installieren. Es behindert Ihren Arbeitsablauf und Sie benötigen daher eine zuverlässige Möglichkeit, um:

  1. Erstellen Sie zu einem beliebigen Zeitpunkt einen Snapshot Ihrer VM.
  2. Verfügen Sie über einen Mechanismus, um den Snapshot zu verwenden, um Ihre VM in einen zuvor funktionierenden Zustand zurückzusetzen.

Ich habe zuvor besprochen, wie Snapshots in VirtualBox funktionieren, und dieses Mal wollte ich Snapshots in Libvirt diskutieren. Ich werde QEMU-KVM als Backend-Hypervisor für meine Libvirt-Installation verwenden. Ihr Fall mag unterschiedlich sein, aber die Gesamtfunktionalität und Schnittstelle sollten nicht sehr unterschiedlich sein, da libvirt ihr Bestes versucht, die Frontend-Schnittstelle zu standardisieren.

Wenn Sie mit libvirt und qemu-kvm nicht vertraut sind, finden Sie hier eine Anleitung zum Einrichten von KVM unter Debian.

Erstellen eines Snapshots

Es gibt mehrere Möglichkeiten, wie Sie Snapshots Ihrer VM erstellen und verwalten können. GUI-Anwendungen wie virt-manager und oVirt bieten die Funktionalität und Sie können sogar benutzerdefinierte Skripte schreiben, um eine Schnittstelle mit der libvirt-API zu bilden, die die gesamte Palette von Snapshots für Sie verwaltet.

Ich werde jedoch die virsh-Befehlszeilenschnittstelle verwenden, um zu zeigen, wie Sie Ihre VMs und ihre Snapshots verwalten können. Dieses Dienstprogramm wird mit fast allen Standardinstallationen von libvirt geliefert und sollte in einer Vielzahl von Distributionen verfügbar sein.

Stellen Sie für die folgenden Befehle sicher, dass Sie den Namen meiner VM, VM1, durch den tatsächlichen Namen Ihrer VM ersetzen replace. Libvirt bezeichnet virtuelle Maschinen und Container oft als Domänen. Wenn Sie also eine Fehlermeldung sehen, die beispielsweise „Domänennamen angeben“ vorschlägt, müssen Sie den Namen Ihrer VM als eines der Argumente für den Befehl angeben supply. Verwenden Sie den folgenden Befehl, um alle VMs unter der Verwaltung von Libvirt aufzulisten.

$ virsh-Liste --all

Um einen Snapshot einer VM zu erstellen, führen Sie einfach Folgendes aus:

$ virsh Snapshot - VM1 erstellen

Und um alle Snapshots einer bestimmten VM aufzulisten, verwenden Sie den Befehl:

$ virsh Snapshot-Liste VM1
Name                 Erstellungszeit             Status
------------------------------------------------------------
1556533387           2019-04-29 15:53:07 +0530 läuft

Sie können sehen, dass der Snapshot erstellt wurde. Standardmäßig ist der Name des Snapshots sein Erstellungszeitstempel (die Anzahl der Sekunden seit der UNIX-Epoche). Die Spalte Erstellungszeit zeigt den Zeitpunkt der Erstellung in einer für Menschen lesbaren Form und die Spalte Status zeigt den Status der VM, als sie mit einem Snapshot erstellt wurde. Da diese VM ausgeführt wurde, lautet der Status des Snapshots auch "Running", aber das bedeutet nicht, dass der Snapshot selbst ausgeführt wird. Es wird sich mit der Zeit nicht ändern. Diese Funktion wird auch als Live-Snapshot bezeichnet und ist sehr wertvoll, da Sie damit ohne Ausfallzeiten einen Snapshot Ihrer VM erstellen können. Zumindest die KVM-Gäste funktionieren gut mit Live-Snapshots.

Bei bestimmten Workloads müssen Sie jedoch die VM stoppen, bevor ein Snapshot erstellt wird. Dadurch wird sichergestellt, dass die Daten im Snapshot konsistent sind und keine halb geschriebenen Dateien oder fehlende Daten vorhanden sind. Wenn die in Ihrer VM ausgeführte Arbeitslast hohe E/A aufweist, müssen Sie die VM wahrscheinlich ausschalten, bevor Sie den Snapshot erstellen creating. Lass uns so einen erstellen one.

$ virsh Herunterfahren von VM1

Domäne VM1 wird heruntergefahren

$ virsh Snapshot - VM1 erstellen

Domain-Snapshot 1556533868 erstellt

[email protected]:~# virsh Snapshot-Liste VM1
Name                 Erstellungszeit             Staat
------------------------------------------------------------
1556533387           2019-04-29 15:53:07 +0530 läuft
1556533868           2019-04-29 16:01:08 +0530 Abschaltung
 
$ virsh starte VM1
Domäne VM1 gestartet

Wenn Sie die Snapshots anders als Zeitstempel benennen möchten, verwenden Sie den Befehl:

$ virsh snapshot-create-as VM1 --name snap1
Name                 Erstellungszeit             Status
------------------------------------------------------------
1556533387           2019-04-29 15:53:07 +0530 läuft
1556533868           2019-04-29 16:01:08 +0530 Abschaltung
snap1                2019-05-02 22:27:48 +0530 läuft

Natürlich müssen Sie es nicht snap1 nennen, Sie können einen beliebigen passenden Namen auswählen.

Zurückkehren von einem Snapshot

Einen Schnappschuss zu machen nützt nichts, wenn man nicht darauf zurückgreifen kann. Falls Sie zu einem Snapshot zurückkehren müssen, verwenden Sie einfach den Befehl:

$ virsh Snapshot-Revert $VMName $Snapshot-Name

Der Name kann der Zeitstempel oder der vom Benutzer zugewiesene Name sein, der dem Snapshot zugewiesen wurde.

Stellen Sie sicher, dass sich in Ihrer aktuellen VM keine wichtigen Daten befinden, oder erstellen Sie bei wichtigen Daten einen Snapshot Ihrer aktuellen VM und kehren Sie dann zu einem älteren Snapshot zurück.

Vorteile von QCOW2

Der Copy-on-Write-Mechanismus von qcow2-Dateien ermöglicht es, dass jeder Snapshot sehr wenig Platz beansprucht. Der Platzbedarf eines Snapshots nimmt mit der Zeit zu, wenn das laufende Bild vom Snapshot abweicht. Solange Sie also nicht viele Daten neu schreiben, benötigen Ihre Snapshots nur wenige MB Speicherplatz.

Das bedeutet auch, dass die Snapshots auch sehr schnell sind . Da muss der Copy-on-Write-Mechanismus nur den Zeitstempel markieren, wann der Snapshot erstellt wurde. Die nach dem Snapshot in die qcow2-Datei geschriebenen Datenblöcke gehören nicht dazu, aber die älteren schon. So einfach ist das. Mein Prüfstand verwendet eine Festplatte mit 5400 U/min, die noch lange nicht auf dem Höhepunkt ihrer Leistung ist, dennoch dauert es weniger als ein paar Sekunden, um einen Live-Snapshot einer VM auf dieser Festplatte zu erstellen.

Fazit

Wie bei den meisten libvirt- und virsh-bezogenen Dienstprogrammen bietet die Snapshot-Funktionalität eine sehr flexible Schnittstelle mit Funktionen der Enterprise-Klasse wie Live-Snapshoting zusammen mit den Vorteilen des Copy-on-Write-Mechanismus.

Die Standard-Namenskonvention erleichtert es Shell-Skripten auch, in regelmäßigen Abständen alte Snapshots zu entfernen und durch neuere zu ersetzen. Einer meiner älteren Artikel zu OpenZFS-Snapshots und Snapshot-Richtlinien kann auch für Ihren KVM-Gast angewendet werden. Für weitere Informationen über das Dienstprogramm virsh Snapshot können Sie den Befehl virsh help Snapshot verwenden. Die Hilfeseite ist sehr klein, präzise und leicht verständlich.

Top Oculus App Lab-Spiele
Wenn Sie Besitzer eines Oculus-Headsets sind, müssen Sie über Sideloading informiert sein. Sideloading ist der Prozess der Installation von Inhalten, ...
Top 10 Spiele zum Spielen auf Ubuntu
Die Windows-Plattform war eine der dominierenden Plattformen für Spiele aufgrund des großen Prozentsatzes von Spielen, die heute entwickelt werden, um...
Die 5 besten Arcade-Spiele für Linux
Heutzutage sind Computer ernsthafte Maschinen, die zum Spielen verwendet werden. Wenn du den neuen Highscore nicht bekommst, weißt du was ich meine. I...