Wie funktionieren Snapshots in Hyper-V?

Technorati-Tags: Hyper-V,Windows Server 2008

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