Inhaltsverzeichnis

Virtualisierung Gast-Systeme Snapshot

:!: 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

Snapshot

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.

Voraussetzungen

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!

Shell: virsh

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

snapshot-create

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)

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!

snapshot-revert

:!: 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!

snapshot-delete

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)

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!