| Hyper-V Snapshots |
|
|
|
|
Snapshots sind Abbildungen der virtuellen Maschine zum Zeitpunkt des Erstellens, genau wie ein Foto (daher auch der Begriff 'Snapshot'). So ist es möglich die Maschine innerhalb von kürzester Zeit auf einen früheren Stand zurückzubringen, ohne eine Backup Software verwenden zu müssen. Gerade in Testumgebungen oder für die Softwarepaketierung hat sich die Verwendung von Snapshots bewährt. Nie war es einfach bei einer Fehlkonfiguration innerhalb von Sekunden wieder ein frisches System vorzufinden oder zu einem bestimmten Punkt zurück zu springen. Hyper-V unterstützt bis zu 50 Snapshots pro virtuelle Maschine.
Snapshots in Produktivumgebungen Um eine Einschätzung dafür zu bekommen ob man Snapshots in Produktiv eingesetzen Maschinen verwenden sollte, muss man zunächst die Funktionsweise von Snapshots in Hyper-V verstehen. Grundsätzlich ist erstmal zu nennen das es Snapshots selbstverständlich nur bei der Verwendung von virtuellen Festplatten (*.VHD) gibt und man wissen sollte wie VHDs funktionieren und wie die Dateistruktur von Hyper-V aussieht.
Was passiert nun wenn man einen Snapshot erstellt? Zunächst muss man zwischen einen Online und einem Offline Snapshot unterscheiden. Nanu? Snapshot ist doch Snapshot! Ja, mit einem kleinen Unterschied. Ein Online Snapshot wurde im laufenden Betrieb erstellt und enthält dadurch natürlich Systemstatusdateien (*.bin und *.vsv). Ein Offline Snapshot wurde bei einer ausgeschalteten Maschine erstellt und enthält diese folglich nicht. Erstellt man einen Snapshot, werden einige Dateien angelegt: Sofern es sich um einen Online Snapshot handelt, werden für die Speicherung des Snapshot-Status zunächst im 'Snapshot' Verzeichnis (im Standardverzeichnis für virtuelle Computer, oder für die Maschine explizit festgelegt) die Statusdateien (*.bin und *.vsv) gespeichert. Jeder Snapshot, unabhängig davon ob Online oder Offline, benötigt eine eigene XML Konfigurationsdatei. Diese wird mit der GUID des Snapshots als Dateinamen direkt in dem Verzeichnis 'Snapshots' erstellt. In dem Verzeichnis wo auch bereits die virtuelle Festplatte der VM liegt, wird dann eine neue differenzierende VHD generiert, dessen Name sich aus dem ursprünglichen VHD Namen, einem Unterstrich und wieder einer neuen GUID zusammensetzt. Dies ist nötig, da ja an der vorherigen VHD keine Änderungen mehr durchgeführt werden dürfen. Da wir die Daten davon aber weiterhin benötigen und eine vollständige Kopie einer 20GB großen Datei einfach zu lange dauern würde (vom Speicherplatz mal ganz abgesehen) ist es am einfachsten eine Differenzierte Festplatte zu erstellen. Die GUID der neuen VHD stimmt dabei nicht mehr der des generierten Snapshots ein!
Es gibt einen Unterschied zwischen HyperV v1 und v2:
In der XML Datei der VM werden nun ein paar Änderungen durchgeführt. Die Konfiguration für die virtuelle Festplatte vor dem Snapshot:
Nun die Konfiguration der virtuellen Festplatte nach dem Snapshot. Hier ist die neue neue differenzierende VHD eingetragen.
Außerdem wird natürlich auch noch der Bezug zu der Konfiguration des Snapshots unter Angabe der GUID hergestellt:
Okay, was haben wir nun alles nach einem einzigen Snapshot?
Und im Hyper-V Manager bekommen wir den Snapshot natürlich direkt angezeigt:
Was passiert nun also, wenn wir einen zweiten Snapshot erstellen? Das ganze Spiel geht wieder von vorne los! Es folgt eine neue XML Datei (natürlich wieder mit einer neuen GUID...), ggf. zwei Status Dateien und wieder eine neue differenzierte VHD. Und nun kommt der Knackpunkt: Die neue VHD bezieht sich natürlich nicht auf die Original VHD der virtuellen Maschine, sondern auf die differenzierte Disk des vorherigen Snapshots! Und schon haben wir ein wildes Konstrukt von lauter Snapshots im Hyper-V Manager:
Nun kann sich auf jeder vorstellen was passiert, wenn man irgendwann mit ein paar dutzend Snapshots arbeitet: Die Performance der virtuellen Maschine nimmt drastisch ab, da inzwischen auf ebensoviele VHDs zugegriffen werden muss, wovon jede nur einen Teil der Daten enthält. Außerdem blähen sich die AVHDs mit der Zeit natürlich immer mehr auf.
Einer dauerhaften Verwendung von Snapshots in Produktivumgebungen, sowie die massive Ansammlung derer ist deshalb absolut abzuraten!
Nun werden sich viele denken: Okay, kein Problem - erstelle ich einfach einen Snapshot wenn ich ihn brauche und lösche ihn dann sofort wieder wenn ich ihn nicht mehr brauche, dann habe ich das Problem nicht. In der Theorie garnicht schlecht, allerdings wissen die wenigsten Anwender was passiert wenn man einen Snapshot löscht.
Was passiert nun also wirklich wenn ich einen Snapshot lösche? Natürlich werden sofort die eventuell vorhandenen Statusdateien und die XML Datei des Snapshots von der Festplatte gelöscht. Aber die AVHD, also die differenzierte Festplatte des Snapshots, bleibt zunächst vorhanden! Und sie wird auch noch weiter benutzt! Und zwar solange bis die VM das nächste mal ausgeschaltet wird. Erst dann wird der Inhalt der AVHD in seine vorherige Original VHD zurückgeschrieben. Ein Neustart der VM reicht nicht aus, sie muss wirklich ausgeschaltet sein! Weiss man nichts von diesem Verhalten und wägt sich in absoluter Sicherheit wenn man seinen Snapshot löscht, sollte man sich nicht wundern wenn irgendwann kein freier Speicherplatz mehr auf dem Datenträger vorhanden ist oder die Performance der VM weiterhin schlecht ist.
Deshalb: Nach dem löschen eines oder mehreren Snapshots am besten direkt danach die virtuelle Maschine herunterfahren und abwarten bis die AVHD zurückgeschrieben ist.
Und nur damit ich auf jedenfall darauf hingewiesen habe: Löscht man eine ganze Unterstruktur von Snapshots, beispielsweise zehn Stück auf einmal, kann es (natürlich abhängig von der Datenmenge) eine ganze Weile dauern bis alle AVHDs in ihre jeweiligen Original VHDs zurückgeschrieben sind!
Wiederherstellung eines Snapshots Zu einem Zeitpunkt eines Snapshots zurückzukehren ist relativ einfach: Snapshot auswählen, 'Anwenden' anklicken, warten, fertig! Der Hyper-V Manager möchte dann natürlich erstmal noch einen neuen Snapshot anlegen um den aktuellen Status der Maschine zu speichern. Möchte man dies verhindern, muss es manuell bestätigt werden. Aber was passiert eigentlich im Hintergrund? Man könnte ja denken, das einfach die Konfigurationsdatei der VM so geändert wird, das die jeweiligen Statusdateien und die AVHD des Snapshots wieder aktiv sind. Aber damit würden wir den Inhalt dieser Dateien verändern und jeder nachfolgende Snapshots, der wie wir nun wissen von diesem anderen Snapshot abstammt, würde unbrauchbar werden. Damit weiterhin alle vorhandenen Snapshots anwendbar bleiben, wird der Inhalt des ausgewählten Snapshots wieder in eine neue AVHD kopiert. Das gleiche passiert mit den Statusdateien. Dann wird die VM auf diese kopierten Dateien konfiguriert und alle Snapshots bleiben unangetastet.
Best Practices Bevor Sie nun fleissig loslegen, merken Sie sich bitte folgende Regeln für die Benutzung von Snapshots:
Links http://blogs.technet.com/ralfschnell/archive/2008/01/22/wie-funktionieren-snapshots-in-hyper-v.aspx http://technet.microsoft.com/de-de/library/dd560637(WS.10).aspx |