Welcome to TechNet Blogs Sign in | Join | Help
Wie funktionieren Snapshots in Hyper-V?
Technorati-Tags: ,

Snapshots sind als Funktionalität in Hyper-V für alle Gastsysteme verfügbar. Im Unterschied zu Virtual Server werden Snapshots im laufenden Betrieb erstellt - das Gastsystem ist ohne Unterbrechung verfügbar. Aber wie genau funktioniert das, welche Datei erfüllt welchen Zweck, und was passiert bei der Wiederherstellung eines Snapshots?

Zunächst einmal müssen wir die wichtigsten Dateitypen kennen, die die verschiedenen Aspekte eines Gastsystems abbilden. Diese sind:

  • *.vhd - Die kennen wir alle: dies ist die virtuelle Festplatte, die unser Gastsystem enthält.
  • *.vmc - Die kennen wir zwar auch alle, bloß gibt es die in Hyper-V nicht mehr ... :-)  In Virtual Server befand sich hier die Hardware-Konfiguration des Gastsystems. In Hyper-V gibt es hierfür eine XML-Datei.
  • *.bin + *.vsv - diese beiden Dateien zusammen enthalten den Status eines Gastsystems.
  • *.avhd - Das ist eine 'Differencing Disk', die ihrerseits wieder auf eine *.vhd-Datei zeigt. Das Gastsystem schreibt alle Änderungen dort hinein, was den kuriosen Effekt hat, daß die beiden Dateien zusammen nur größer werden können - selbst wenn Sie Daten von der Festplatte löschen, ist das ja eine Änderung, die brav notiert werden muß ...

Der Status eines Gastsystems wird gespeichert, sobald Sie die Funktion 'Save State' benutzen. In dem Verzeichnis, daß Sie für die Gastsysteme auf dem Hyper-V Host konfiguriert haben, finden Sie jeweils die XML-Datei mit der Hardware-Konfiguration und ein Verzeichnis, daß den gleichen Namen (natürlich ohne Endung) hat:

Guest Directory

In dem Verzeichnis finden Sie die Status-Dateien:

Guest Saved State

Sobald Sie die Funktion 'Snapshot' benutzen, werden weitere Dateien angelegt. Um dies zu demonstrieren, konfigurieren wir zunächst ein separates Verzeichnis für die Snapshots eines Gastsystems. GUIDs als Objektnamen machen zwar riesigen Spaß, aber wir opfern jetzt einfach mal den reinen Lustgewinn der Übersichtlichkeit ...

ws08 snapshot location

So, jetzt wissen wir wenigstens, daß alles in diesem Verzeichnis etwas mit den Snapshots dieses Gastsystems zu tun haben muß. Als nächstes erstellen wir einen ersten Snapshot (z.B. im Hyper-V Manager: 'Action' - 'Snapshot') und schauen uns dann die XML-Konfigurationsdatei des Gastsystems an. Dort sehen wir, daß die virtuelle Festplatte jetzt nicht mehr auf die ursprüngliche VHD-Datei, sondern auf eine neu erstellte 'Differencing Disk' zeigt:

ws08 drive0 after Snapshot1

Diese AVHD-Datei wurde in dem von uns zuvor konfigurierten Verzeichnis erstellt. Im selben Verzeichnis finden wir jetzt auch einen neuen Satz von Status-Dateien in einem entsprechenden Verzeichnis. Logischerweise befinden sich die AVHD-Dateien in dem Verzeichnis, daß die GUID des Gastsystems (hier: 'A1E91AB6-...') als Namen hat, während sich die Status-Dateien in einem separaten Verzeichnis mit einem ganz anderen Namen befinden ...

Der Übung halber, und weil's ja auch wirklich Spaß macht, erstellen wir noch zwei weitere Snapshots. Jetzt haben wir also drei, und ein Blick auf das Zielverzeichnis für unsere Snapshots zeigt uns ein Verzeichnis mit AVHDs (das mit der Gastsystem-GUID als Namen), drei weitere Verzeichnisse mit jeweils einem Satz Status-Dateien und drei XML-Dateien, die jeweils eine Version der Hardware-Konfiguration enthalten und deren Namen freundlicherweise mit dem Verzeichnisnamen eines der Statusdatei-Verzeichnisse korrespondiert:

ws08 Snapshot Dir after 3 Snapshots

Zusätzlich haben wir im ursprünglichen Gastsystem-Verzeichnis noch einmal eine XML-Datei und ein Verzeichnis mit Status-Dateien. Und natürlich (eventuell an anderer Stelle) die VHD. Also in Summe jetzt 1x VHD, 4x XML, 4x Statusverzeichnis und 3x AVHD.

Was hier passiert, ist folgendes: Im Normalbetrieb (ohne Snapshots) besteht der vollständige Status eines Gastsystems aus XML, VHD und den Statusdateien BIN und VSV. Erstellen wir einen Snapshot, so müssen wir diese Dateien einfrieren, damit wir später auch dahin zurück können und dort einen konsistenten Zustand vorfinden. Wir brauchen demzufolge für den weiteren Betrieb zunächst mal eine neue virtuelle Festplatte - die ursprüngliche können wir ja jetzt nicht mehr ändern. Aus Effizienzgründen nehmen wir dafür eine AVHD, so muß nicht die ganze VHD kopiert werden. Die AVHD des ersten Snapshots zeigt auf die VHD, die des zweiten Snapshots auf die AVHD des ersten, und so weiter. Und für jeden Snapshot brauchen wir eben auch noch XML, BIN und VSV. Ok, das ist eigentlich völlig klar, aber weil ich doch so gern zeichne, gibt's das jetzt nochmal als Visio-Diagramm:

Snapshots

Und nun zur Wiederherstellung. Nehmen wir an, wir wählen Snapshot Nr. 2 aus und wenden ihn auf das Gastsystem an. Dann zeigt die virtuelle Festplatte eben wieder auf die AVHD dieses Snapshots, und wir nehmen die passenden Status- und Konfigurationsdateien - richtig? Nein, so einfach ist es leider nicht. Denn wenn wir das so durchführten, dann würden wir zwei Probleme verursachen:

  1. Der aktuelle Status (vor der Wiederherstellung) ginge verloren! Wir müssen also zunächst mal einen neuen - vierten - Snapshot erstellen. Das macht der Hyper-V Manager für uns, es sei denn, wir entscheiden uns aktiv dagegen.
  2. Alle nachfolgenden Snapshots wären nicht mehr anwendbar! Wir wollen Snapshot Nr. 2 anwenden, die Snapshots Nr. 3 und folgende basieren aber auf den Dateien von Snapshot Nr. 2, z.B. zeigt die AVHD von Snapshot Nr. 3 auf die von Snapshot Nr. 2. Würden wir einfach die Dateien von Snapshot Nr. 2 anwenden, dann würden die ja durch die Benutzung des Gastsystems verändert!

Die Lösung: wir erstellen zunächst mal einen Snapshot Nr. 4, um den aktuellen Status nicht zu verlieren. Dann erstellen wir eine neue 'Differencing Disk'. Die große Frage: wohin zeigt die? Trommelwirbel ... Lichteffekte ... die Auflösung kommt direkt nach der Werbung ... !!!

Nun, wir wollen ja Snapshot Nr. 2 anwenden. Dessen AVHD zeigt auf die von Snapshot Nr. 1, also muß auch unsere neue AVHD dorthin zeigen. Wir kopieren die AVHD des Snapshot Nr. 2 auf die neue AVHD und lassen die virtuelle Festplatte des Gastsystems dann auf diese neue AVHD zeigen. Dazu wenden wir die Status- und Konfigurationsdateien des Snapshots auf das Gastsystem an, lassen aber auch die natürlich unangetastet.

Mit anderen Worten: bei der Wiederherstellung eines Snapshots werden dessen Dateien kopiert und dann die Kopien angewendet. Auf diese Weise können wir in beliebiger Richtung und Reihenfolge zwischen den Snapshots hin und her wechseln.

Mit freundlichen Grüßen!

 

Ralf M. Schnell

Posted: Tuesday, January 22, 2008 5:28 PM by Ralf M. Schnell

Comments

Ralf Schnell's Blog zu Windows Server 2008, Virtualisierung, ITIL/MOF und High Performance Computing said:

Technorati-Tags: Windows Server 2008 , Virtualisierung In unserem gestrigen Technet-Thementag 'Virtualisierung

# June 4, 2008 11:33 AM

Ralf Schnell's Blog zu Windows Server 2008, Virtualisierung, ITIL/MOF und High Performance Computing said:

Technorati-Tags: Windows , Microsoft , Virtualisierung Eine insbesondere für Test- und Demoumgebungen

# June 9, 2008 4:15 AM

Richard Gantz said:

Lieber Ralf Schnell,

zunächst einmal vielen Dank für Deine phantastische Arbeit hier, die so viel Licht in's Dunkel bringt.

Ich hoffe, ich habe das alles richtig verstanden, denn dann stellt sich mir eine grosse Frage:

WIRD MAN DIE SNAPSHOT-Dateien JEMALS WIEDER LOS?

Wenn ich Deine Ausführungen richtig verstanden habe, wird man diese Dateien nicht mehr los, auch nicht, nachdem man sie "angewendet" hat, nicht?

Es ergibt sich da nämlich ein enormes Design-Problem:

Wenn man als virtuellen Festplatten Typ die "Feste Größe" nimmt, weil der Zugriff darauf am optimalsten ist und wenn man weiter die Größe so groß wählt (oder wählen muss), dass sie nur wenige GB kleiner als die Partitionsgröße des Hosts ist, dann kann man die Arbeit mit Snapshots vergessen, oder?

Ich bin früher davon ausgegangen, dass der Inhalt eines Snapshots (*.avhd) in die Festplatte (*.vhd) integriert wird, nachdem man den Snapshot "angewendet" hat.

Wenn eine haarige Installation z.B. gut gelaufen ist und das system stabil zu sein scheint, dann möchte ich diese Installation gern festschreiben.

DAS NÜTZT MIR ABER NICHTS, WENN DIE ÄNDERUNGEN NACH WIE VOR IN DATEIEN AUSSERHALB MEINER *.VHD LIEGEN, NICHT?

Erschwerend kommt hinzu, dass das System danach scheinbar gezwungen ist, weiterhin im "Snapshot-Modus" zu verbleiben, dass also eine ständig wachsende *.avhd die Partition (auf der die Snapshots liegen) des Hosts früher oder später vollmüllt, oder?

Das wäre alles ziemlich katastrophal und man wäre gezwungen, den Dynamischen Festplattentyp zu wählen, obwohl das schlechtere Performance bedeutet.

Ich bin mehr verwirrt denn je und möchte Dich bitten, diese Überlegungen zu widerlegen.

Liebe Grüße,

Richard

# July 23, 2009 1:39 AM

Ralf M. Schnell said:

Hallo Richard,

Wenn Sie einen Snapshot anwenden, tun Sie das, um zu diesem Status des Gastsystems zurückzukehren. Damit ist in der Regel nicht automatisch die Entscheidung verbunden, diesen Status im Sinne eines Wiederherstellungs-Punkts zu löschen (also zu einem späteren Zeitpunkt nicht nochmals zu diesem Status zurückkehren zu können). Deshalb gibt es getrennte Funktionen für 'anwenden' und 'löschen' eines Snapshot.

Snapshots werden Sie wieder los, indem Sie sie löschen. Rechts-Klick auf den Snapshot, 'Löschen' auswählen, fertig. Achtung: wenn der Ist-Zustand der VM - der grüne Pfeil 'Jetzt' - oder weitere Snapshots sich auf den Snapshot beziehen, dann wird der Snapshot, den Sie löschen, in den darüberliegenden Status migriert, ansonsten wird er einfach gelöscht.

In Ihrem Beispiel: Sie haben eine VM, die Sie verändern möchten. Sie machen vorher einen Snapshot, dann machen Sie die Veränderung. Geht alles gut, löschen Sie den Snapshot einfach und haben dann wieder die ursprüngliche VHD, die Differencing Disk verschwindet automatisch (kann ein paar Minuten dauern).

Mit freundlichen Grüßen!

Ralf M. Schnell

# July 28, 2009 5:15 AM

Alex Jacubowsky said:

Hallo,

eine Anmerkung zum Löschen.

Wenn der Hyper-V dabei gestört wird einen Snapshot anzuwenden, verschwindet zwar der Eintrag bei Snapshots, aber die AVHD bleibt erhalten und wird auch weiterhing genutzt !!

Also Achtung. Auch wenn's mal etwas längert dauert. Abwarten und Tee trinken.

Falls aber jemand auch in so ein Problem gelaufen ist, nicht verzagen! Die Developer waren gut.

Die Lösung: VM gast herunterfahren (Sicherer als speichern) dann einen neuen Snapshot anlegen und danach gleich wieder Löschen und dann einfach abwarten, bis Hyper-V den bis dahin nicht mehr angezeigten aber trotzdem vorhandenen und genutzten Snapshot integriert hat.

Gruß

AlexJ

# December 21, 2009 3:27 PM
Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker