Die Funktionsweise von VMware-Snapshots
VMware-Snapshots sind Wiederherstellungspunkte für ihre virtuelle Infrastruktur. Eine Kopie des Virtual Machine Disk File kann zum Lebensretter werden.
Ein Platten-“Snapshot“ ist eine Kopie des Virtual Machine Disk File (VMDK), bezogen auf einen bestimmten Zeitpunkt. Dies bietet für den Fall von Problemen die Möglichkeit, durch ein Zurückkehren zum Snapshot das Dateisystem der Festplatte und den Systemspeicher Ihrer Virtual Machine zu erhalten. Dadurch können Snapshots geradezu Ihr Leben retten, wenn Sie Anwendungen oder Server aktualisieren oder Patches aufspielen. In diesem Artikel erfahren Sie alles, was Sie über die Verwendung von Snapshots mit VMware wissen müssen – was sie sind, wie sie funktionieren und Tricks für Fortgeschrittene.
Verwendeter Plattenplatz für Snapshots und Wachstumsrate
Wenn Sie von einer Virtual Machine (VM) mehr als einen Snapshot anfertigen, stehen Ihnen mehrere Wiederherstellungspunkte zur Verfügung. Beim Anlegen eines Snapshots wird alles, was bis dahin auch schreibbar war, von diesem Moment an read-only. Mit Hilfe von In-File-Delta-Technologie entstehen dann neue Dateien, die alle Änderungen (Delta) gegenüber den ursprünglichen Disk-Dateien enthalten.
Eine Snapshot-Datei kann niemals größer werden als die anfängliche Disk-Datei. Bei allen Änderungen eines Platten-Blocks wird in der Delta-Datei der Snapshot angelegt und bei späteren Änderungen aktualisiert. Wenn Sie nach einem Snapshot jeden einzelnen Platten-Block auf Ihrem Server verändern würden, wäre Ihr Snapshot immer noch nur so groß wie Ihre originale Disk-Datei. Allerdings gibt es zusätzlich einigen Overhead mit Informationen zum Management der Snapshots, der ebenfalls Speicherplatz verbraucht. Wie viel Overhead-Platz maximal gebraucht wird, hängt unter anderem von der Block-Größe des Virtual Machine File System ab:
Block-Größe | Maximale VMDK-Größe | Maximaler Overhead |
1 MB | 256 GB | 2 GB |
2 MB | 512 GB | 4 GB |
4 MB | 1024 GB | 8 GB |
8 MB | 2048 GB | 16 GB |
Der anfallende Overhead kann dazu führen, dass die Anfertigung eines Snapshots scheitert, wenn die virtuelle Festplatte einer VM die maximale VMDK-Größe für ein VMFS-Volume fast erreicht hat. Wenn sie zum Beispiel 512 GB auf einem VMFS-Volume mit einer Block-Größe von 2 MB umfasst, könnte ein Snapshot höchstens 516 GB (512 GB + 4 GB) groß werden; dies würde die maximale VMDK-Größe von 512 GB übersteigen, so dass kein Snapshot genommen werden kann.
Wenn Sie mit Snapshots arbeiten wollen, sollten Sie den virtuellen Festplatten Ihrer Virtual Machines eine Größe geben, die unter der maximalen VMDK-Größe liegt; ziehen Sie dazu einfach den maximal möglichen Overhead ab (im obigen Fall: 512 GB – 4 GB = 508 GB). Anfangs werden die Snapshots klein sein (16 MB), doch mit zunehmender Befüllung der virtuellen Festplatten wird ihre Größe zunehmen.
Um SCSI-Reservierungskonflikte zu vermeiden, wachsen Snapshots in Schritten von 16 MB. Wenn eine Anforderung zur Änderung eines Blocks auf der Original-Festplatte erfolgt, wird sie stattdessen in der Delta-Datei vorgenommen. Wenn ein zuvor geänderter Platten-Block in der Delta-Datei noch einmal geändert wird, nimmt die Größe der Delta-Datei dadurch nicht weiter zu – es wird nur der bestehende Block aktualisiert.
Wie schnell ein Snapshot größer wird, hängt davon ab, wie viele Schreibvorgänge auf Ihrem Server vor sich gehen. Bei Servern mit schreibintensiven Anwendungen wie SQL oder Exchange nimmt der Umfang der Snapshots rasch zu. Server mit hauptsächlich statischen Inhalten und weniger Schreibvorgängen wie Web- und Anwendungsserver dagegen wachsen deutlich langsamer. Wenn Sie mehrere Snapshots anfertigen, werden neue Delta-Dateien erzeugt und die alten auf Read-only umgestellt. Dabei kann jede Delta-Datei potenziell ebenso groß werden wie die originale Disk-Datei.
Unterschiedliche Arten von Snapshot-Dateien
*--delta.vmdk: Dies ist die Differenztabelle, die angelegt wird, wenn Sie einen Snapshot einer VM nehmen; sie wird auch als Redo-Log-Datei bezeichnet. Die Delta-Datei ist eine Bitmap der Änderungen gegenüber der Basis-VMDK und kann damit, abgesehen vom Zusatz-Platz für den Overhead, niemals größer werden als diese selbst. Für jeden Snapshot einer VM wird eine Delta-Datei erzeugt. Zusätzlich wird eine Hilfs-Deltadatei angelegt, die alle Änderungen aufnimmt, wenn ein Snapshot im Snapshot Manager gelöscht oder wieder aufgespielt wird. Die Dateien werden in solchen Fällen anschließend automatisch gelöscht.
*.vmsd: In dieser Datei werden Metadaten und Informationen über Snapshots im Textformat gespeichert. Zu den Informationen zählen die Display-Namen der Snapshots, ein Unique Identifier (UID), Name der Disk-Datei etc. Bis zu Ihrem ersten VM-Snapshot beträgt die Größe der Datei 0 Byte, anschließend wird sie gefüllt und bei jedem neuen Snapshot aktualisiert.
Die Datei wird nach dem nehmen der Snapshots nicht vollständig bereinigt. Wenn Sie einen Snapshot löschen, wird beim UID für den nächsten Snapshot trotzdem weitergezählt.
*.vmsn: Dies ist die Status-Datei für Snapshots. Sie speichert den exakten Betriebszustand einer VM im Moment der Snapshot-Anfertigung. Ihre Größe hängt davon ab, ob Sie auch den Arbeitsspeicher der VM im Snapshot erfassen wollen. Wenn Sie sich dafür entscheiden, wird die Datei ein paar Megabyte größer sein als die Höchstmenge des der VM zugewiesenen Arbeitsspeichers.
Diese Datei hat Ähnlichkeit mit Suspended-State-Dateien von VMware (.vmss). Für jeden Snapshot wird eine .vmsn-Datei erzeugt, beim Entfernen werden auch diese Dateien gelöscht.
Snapshots anfertigen
Snapshots lassen sich über den Snapshot Manager im vSphere-Client, über das Kommandozeilen-Werkzeug vmware-cmd direkt auf der ESX-Servicekonsole oder über den vSphere-CLI anfertigen. Dabei können VMs an- oder ausgeschaltet oder auch im Suspend-Zustand sein. Bei ausgeschalteten VMs fällt die Option, auch ihren Arbeitsspeicher zu erfassen, natürlich weg.
Verwalten können Sie Snapshots mit dem vSphere-Client, indem Sie sich entweder direkt mit einem ESX-Server oder mit einem vCenter-Server verbinden. Wenn Sie stattdessen den Kommandozeilen-Interpreter (CLI) verwenden, lautet die Syntax für das Erzeugen von Snapshots vmware-cmd createsnapshot, also etwa vmware-cmd myvm1.vmx createsnapshot snap1 'before upgrade' 1 1. Die Optionen für Stilllegung und Arbeitsspeicher sind 1 für ja und 0 für nein. Wenn Sie bei Stilllegung 1 wählen, werden Schreibvorgänge ins Dateisystem vor dem Snapshot ausgesetzt, bei 1 für den Arbeitsspeicher wird auch der Arbeitsspeicher-Status erfasst. Wenn Sie mehrere Snapshots anfertigen, werden die jeweils älteren auf Read-only umgestellt.
Snapshots löschen und zu ihnen zurückkehren
Wenn Sie alle Snapshots für eine Virtual Machine löschen, werden alle erzeugten Delta-Dateien wieder in die eigentliche VMDK-Diskdatei aufgenommen und dann gelöscht. Wenn Sie nur einen bestimmten Snapshot löschen, wird nur dieser Snapshot in seinen übergeordneten Snapshot integriert. Wenn Sie zu einem Snapshot zurückkehren, wird der aktuelle Status von Festplatte und Arbeitsspeicher aufgegeben, die VM in den dem Snapshot entsprechenden Zustand gebracht, und der Snapshot wird zum neuen übergeordneten Snapshot. Dabei ist dieser nicht immer der neueste: Wenn Sie zu einem älteren Snapshot zurückkehren, wird dieser zur Referenz für den aktuellen Zustand der VM. Zu erkennen ist dies stets am „You are here“-Symbol im Snapshot Manager.
Snapshots löschen oder zu ihnen zurückkehren können Sie mit dem vSphere-Client oder mit dem Kommandozeilen-Werkzeug vmware-cmd, wobei der Snapshot Manager mehr Flexibilität bietet und einfacher zu bedienen ist. Zum Beispiel können Sie mit der „Revert to Snapshot“-Option der Kommandozeile nur zum jüngsten Snapshot zurückkehren, während Sie im Snapshot manager die Möglichkeit haben, einen beliebigen Snapshot auszuwählen; der entsprechende Befehl lautet „Go To“.
Wenn Sie mit vmware-cmd arbeiten, lautet die Syntax zur Entfernung aller Snapshots vmware-cmd removesnapshots. Für eine Rückkehr geben Sie stattdessen vmware-cmd revertsnapshot ein; dadurch wird die VM auf den übergeordneten Snapshot des „You are here“-Zustands gesetzt. Wie erwähnt ist dies nicht unbedingt immer der aktuellste. Wenn Sie bestimmte Snapshots löschen oder zu ihnen zurückkehren wollen, müssen Sie deshalb mit dem vSphere-Client arbeiten.
Wenn Sie zu einem Snapshot ohne Arbeitsspeicher-Status zurückkehren, wird sich der Server ausschalten und nach dem Anschalten den Snapshot verwenden. Bei Snapshots einschließlich Arbeitsspeicher macht die VM eine kurze Pause und dann mit Platten- und Speicherzustand des Snapshots weiterarbeiten.
Der zweite Teil dieses Artikels befasst sich mit Snapshot-Themen für Fortgeschrittene. Unter anderem geht es um das Festlegen alternativer Snapshot-Verzeichnisse, das Ausschließen virtueller Festplatten von Snapshots, zusätzlichen Platzbedarf beim Löschen mehrerer Snapshots, das Auffinden aktiver Snapshots und darum, was passiert, wenn auf einer VM Snapshots laufen.