WICHTIG - Der Installation zugrunde liegendes Gast-Dateisystem muss „qcow2“ sein !!!
Nachfolgend soll gezeigt werde, wie ein Gast-Systen innerhalb der Virtualisierungsumgebung - KVM/Qemu - über den „Snapshot“-Mechanismus
Ein „Snapshot“ speichern den Zustand der gesamten virtuellen Maschine (CPU, Speicher, Geräte und beschreibbare Datenträger). Auf diese Weise können Änderungen am System rückgängig gemacht werden. Ältere QEMU-Versionen speichern einen „Snapshot“ in einer separaten Datei oder mehreren separaten Dateien.
Ab der QEMU (qemu-kvm) Version 0.9.0 erfolgt die Speicherung eines „Snapshots“ direkt auf die virtuellen Festplatten-Image. Voraussetzung dazu ist, dass zumindest eines der eingebundenen Festplatten-Images im Format qcow2 vorliegt.
Um zu überprüfen, welche qemu-kvm
Version installiert ist, kann z.B. nachfolgender Befehl verwendet werden:
# yum info qemu-kvm | grep Version Version : 0.12.1.2
Um festzustellen, ob zumindest eines der eingebundenen Festplatten-Images im Format qcow2 vorliegt, kann nachfolgender Befehl verwendet werden (Der Name des Images lautet in diesem Beispiel vmltest.img
):
# qemu-img info /var/lib/libvirt/images/vmltest.img image: /var/lib/libvirt/images/vmltest.img file format: qcow2 virtual size: 20G (20971520000 bytes) disk size: 1.1G cluster_size: 65536
WICHTIG - Es ist wichtig, dass hier file format: qcow2
erscheint!
Der Befehl virsh
, ist ein Werkzeug zum Verwalten virtueller Maschinen.
HINWEIS - Der Befehl virsh
hat den Vorteil, das er auch innerhalb einer ssh
Verbindung zum Host-System genutzt werden kann!
virsh
ist ein Teil des Libvirt-Projekts, das eine Befehlssammlung zur Verfügung stellt, mit denen sowohl Teile des Host-Systems, sowie auch Teile des Gast-System gesteuert werden können. Es stellt gewissermaßen die Befehlssätze in der shell
zur Verfügung.
Nachfolgender Befehl, listet die Möglichkeiten von virsh
in Bezug auf den Mechanismus „Snapshot“ auf:
# virsh help snapshot Snapshot (help keyword 'snapshot'): snapshot-create Create a snapshot from XML snapshot-create-as Create a snapshot from a set of args snapshot-current Get or set the current snapshot snapshot-delete Delete a domain snapshot snapshot-dumpxml Dump XML for a domain snapshot snapshot-edit edit XML for a snapshot snapshot-info snapshot information snapshot-list List snapshots for a domain snapshot-parent Get the name of the parent of a snapshot snapshot-revert Revert a domain to a snapshot
Dazu sollen zuerst die Möglichkeiten des Befehls snapshot-create
mit nachfolgendem Befehl aufgelistet werden:
# virsh help snapshot-create NAME snapshot-create - Create a snapshot from XML SYNOPSIS snapshot-create <domain> [<xmlfile>] [--redefine] [--current] [--no-metadata] [--halt] [--disk-only] [--reuse-external] [--quiesce] [--atomic] [--live] DESCRIPTION Create a snapshot (disk and RAM) from XML OPTIONS [--domain] <string> domain name, id or uuid [--xmlfile] <string> domain snapshot XML --redefine redefine metadata for existing snapshot --current with redefine, set current snapshot --no-metadata take snapshot but create no metadata --halt halt domain after snapshot is created --disk-only capture disk state but not vm state --reuse-external reuse any existing external files --quiesce quiesce guest's file systems --atomic require atomic operation --live take a live snapshot
Nachfolgendes Beispiel zeigt, wie ein „Snapshot“ für ein Gast-System (Domain) mit dem Namen, hier vmltest
erstellt werden kann:
# virsh snapshot-create vmltest Domain snapshot 1379080157 created
HINWEIS - Dies kann einige Zeit, je nach Größe des Gast-Systems (Domain) dauern!
HINWEIS - Während der Erstellung eines „Snapshots“, wird das Gast-System (Domain) pausiert!
Nachfolgender Befehl listet die erstellten „Snapshots“ für ein Gast-System (Domain) auf:
# virsh snapshot-list vmltest Name Creation Time State ------------------------------------------------------------ 1379080157 2013-09-13 15:49:17 +0200 running
Es wird eine XML-Datei im Verzeichnis, hier für das Gast-System vmltest
(Domain)
/var/lib/libvirt/qemu/snapshot/vmltest/
mit dem Namen 1379080157.xml (was mit nachfolgendem Befehl abgefragt werden kann)
# ll /var/lib/libvirt/qemu/snapshot/vmltest/1379080157.xml -rw------- 1 root root 2485 Sep 13 15:52 /var/lib/libvirt/qemu/snapshot/vmltest/1379080157.xml
erzeugt.
Die Daten werden, wie schon erwähnt, an das Image angehängt!
HINWEIS - Zu Demonstrationszwecken, soll im home
-Verzeichnis des Benutzers root
eine Datei angelegt werden!
Dies erfolgt mit nachfolgendem Befehl:
[root@vmltest ~]# touch /root/Testdatei.txt
Nachfolgender Befehl, listet das home
-Verzeichnis des Benutzers root
auf:
[root@vmltest ~]# ll total 20 -rw-------. 1 root root 1963 Sep 13 14:25 anaconda-ks.cfg -rw-r--r--. 1 root root 9277 Sep 13 14:25 install.log -rw-r--r--. 1 root root 3161 Sep 13 14:24 install.log.syslog -rw-r--r-- 1 root root 0 Sep 13 16:03 Testdatei.txt
Jetzt sollen zuerst die Möglichkeiten des Befehls snapshot-revert
mit nachfolgendem Befehl aufgelistet werden:
# virsh help snapshot-revert NAME snapshot-revert - Revert a domain to a snapshot SYNOPSIS snapshot-revert <domain> [<snapshotname>] [--current] [--running] [--paused] [--force] DESCRIPTION Revert domain to snapshot OPTIONS [--domain] <string> domain name, id or uuid [--snapshotname] <string> snapshot name --current revert to current snapshot --running after reverting, change state to running --paused after reverting, change state to paused --force try harder on risky reverts
WICHTIG - Bevor snapshot-revert
ausgeführt werden kann, muss das Gast-System (Domain) heruntergefahren werden!
Dies kann mit nachfolgendem Befehlen durchgeführt werden:
[root@vmltest ~]# shutdown -h now
oder auch, wenn der acpid
-Daemon/Dienst installiert ist und läuft:
# virsh shutdown vmltest Domain vmltest is being shutdown
Falls das Gast-System (Domain) nicht heruntergefahren ist, erscheint nachfolgende Fehlermeldung:
... error: revert requires force: Target device address type none does not match source pci
Nachfolgendes Beispiel zeigt, wie ein „Snapshot“ für ein Gast-System (Domain) mit dem Namen, hier vmltest
und dem „Snapshot“-Namen 1379080157
wiederhergestellt werden kann:
# virsh snapshot-revert vmltest 1379080157
HINWEIS - Standardmäßig wird das Gast-System (Domain) anschließend gestartet!
Nachfolgender Befehl, listet das home
-Verzeichnis des Benutzers root
erneut auf:
[root@vmltest ~]# ll total 20 -rw-------. 1 root root 1963 Sep 13 14:25 anaconda-ks.cfg -rw-r--r--. 1 root root 9277 Sep 13 14:25 install.log -rw-r--r--. 1 root root 3161 Sep 13 14:24 install.log.syslog
HINWEIS - Die zuvor zu Demonstrationszwecken angelegte Datei, ist nicht mehr vorhanden!
Nachfolgender Befehl listet erneut die erstellten „Snapshots“ für ein Gast-System (Domain) auf:
# virsh snapshot-list vmltest Name Creation Time State ------------------------------------------------------------ 1379080157 2013-09-13 15:49:17 +0200 running
HINWEIS - Der erstellte „Snapshot“ ist immer noch vorhanden!
Jetzt sollen zuerst die Möglichkeiten des Befehls snapshot-delete
mit nachfolgendem Befehl aufgelistet werden:
# virsh help snapshot-delete NAME snapshot-delete - Delete a domain snapshot SYNOPSIS snapshot-delete <domain> [<snapshotname>] [--current] [--children] [--children-only] [--metadata] DESCRIPTION Snapshot Delete OPTIONS [--domain] <string> domain name, id or uuid [--snapshotname] <string> snapshot name --current delete current snapshot --children delete snapshot and all children --children-only delete children but not snapshot --metadata delete only libvirt metadata, leaving snapshot contents behind
Nachfolgendes Beispiel zeigt, wie ein „Snapshot“ für ein Gast-System (Domain) mit dem Namen, hier vmltest
und dem „Snapshot“-Namen 1379080157
gelöscht werden kann:
# virsh snapshot-delete vmltest 1379080157 Domain snapshot 1379080157 deleted
Nachfolgender Befehl listet die erstellten „Snapshots“ für ein Gast-System (Domain) auf:
# virsh snapshot-list vmltest Name Creation Time State ------------------------------------------------------------
Die erstellte XML-Datei im Verzeichnis, hier für das Gast-System vmltest
(Domain)
/var/lib/libvirt/qemu/snapshot/vmltest/
mit dem Namen 1379080157.xml (was mit nachfolgendem Befehl abgefragt werden kann)
# ll /var/lib/libvirt/qemu/snapshot/vmltest/ total 0
existiert nicht mehr, das Verzeichnis jedoch schon!