(Beachten Sie, dass sich diese Frage zwar speziell auf Hyper-V bezieht, ich aber eigentlich an einer allgemeinen Antwort zum VM-Snapshot interessiert bin, es sei denn, die spezifische Antwort für Hyper-V lässt sich nicht auf eine so allgemeine Erklärung anwenden.)
Ich arbeite in einem großen Unternehmen mit einer VM-Infrastruktur von anständiger Größe (ein paar tausend VMs). Einer meiner Server-Ingenieure sagt mir, dass sie das Speichern von VM-Snapshots nicht sehr lange zulassen - sie erlauben das Erstellen eines Snapshots als Fallback, bevor eine wesentliche Änderung an einer VM vorgenommen wird, müssen ihn aber kurz danach löschen (ein paar Tage oder so, wenn wir sicher sind, dass unsere Änderungen nichts beschädigt haben).
Ich bin mit diesem Verfahren einverstanden – ich erwarte nicht, dass Snapshots als Proxy für tatsächliche Backups usw. dienen. Und ich kann ihren Wunsch respektieren, Platz in der Umgebung zu sparen. Womit ich nicht einverstanden bin, ist seine Argumentation. Er sagt, der Grund, warum sie sie anschließend löschen müssen, ist, dass „Snapshots unbegrenzt wachsen können, jedes Mal, wenn Sie auf die Festplatte schreiben, werden zusätzliche Daten in den Snapshot geschrieben, ohne Begrenzung. Das ist anders, als wenn Sie die ursprüngliche virtuelle Festplatte bereitstellen, wo Sie eine maximale Größe angeben können. Sie können keine maximale Größe für einen Snapshot angeben.“
Nach meinem Verständnis sind Snapshot-Images ein DELTA vom übergeordneten Disk-Image. Wenn ich beispielsweise einen Block auf dem Original-Image habe, der so aussieht:
0101 0101 0101
... und den Mittelteil schreibe ich dann so um:
0101 1111 0101
... dann speichert der Snapshot nur den UNTERSCHIED zwischen den beiden (plus etwas Datenstruktur-Overhead, der sicher die Komplexität erhöht, aber aus Speichersicht nicht signifikant ist). Außerdem verstehe ich, dass, wenn ich gehen würdeumschreibenWenn diese Blöcke in ihren ursprünglichen Zustand zurückversetzt werden, würde das Delta diesen Block dann verwerfen (sodass zukünftige Lesevorgänge für diesen Block bis zum Originalbild durchgelesen würden).
(Ich weiß nicht viel darüber, WIE der Snapshot die Differenz speichert – ich bin sicher, dass sehr komplexe Strukturen erforderlich sind, um alles organisiert zu halten. Mich interessiert nur das Prinzip, dass er die Differenz speichert, aber keinen „laufenden Verlauf“ der Änderungen.)
Er sagt, dass Snapshots so nicht funktionieren. Er sagt, wenn ich einen Datenblock habe, ihn ändere und dann wieder zurückändere, wird der Snapshot JEDES Mal größer, wenn ich dies tue, und verbraucht schließlich eine Menge Speicherplatz.
Ich war der Meinung, dass ein Snapshot niemals die Größe des Originalabbilds überschreiten könnte (wenn Sie beispielsweise buchstäblich jedes einzelne Bit auf der Festplatte umdrehen würden, würde das Delta das speichern), und vielleicht gäbe es auch eine konstante Overhead-Größe. Er scheint zu glauben, dass dies nicht stimmt, dass ein VM-Snapshot unbegrenzt wächst, wenn immer mehr Schreibvorgänge auf die virtuelle Festplatte erfolgen.
Habe ich etwas hinsichtlich der Funktionsweise von VM-Snapshots falsch verstanden?
Antwort1
Ihre Ingenieure folgen einer bewährten Methode, aber aus den falschen Gründen. Sie haben Recht, dass die VHDX (oder welche virtuelle Festplattentechnologie auch immer verwendet wird) Folgendes bewirkt:
- Verwenden Sie geschriebene Blöcke beim Umschreiben wieder, anstatt alles neu zu schreiben
- Legen Sie eine feste Größenbeschränkung fest, die der maximal konfigurierten Größe für die übergeordnete virtuelle Festplatte entspricht. Sie können für einen Snapshot keine maximale Größe angeben, weil die übergeordnete VHDX diese bereits festgelegt hat.
Mir ist jedoch kein Mechanismus bekannt, der zuvor geschriebene Deltas verwirft, wenn der Block in seinen ursprünglichen Zustand zurückversetzt wird. Der Leistungsaufwand beim Ausführen eines Differenzalgorithmus auf Quell- und Deltablöcken im Vergleich zum Führen einer einfachen Aufzeichnung der Blockschreibvorgänge wäre selbst in relativ kleinem Maßstab erheblich.
Sofern bei der VM nicht eine starke Festplattenfluktuation auftritt, werden Sie vermutlich keine drastische Vergrößerung des Snapshots erleben.
Eine VM mit einem einzelnen Snapshot weist auch keinen nennenswerten Leistungsverlust auf, obwohl ich das nirgendwo erwähnt sehe.
Snapshots weisen drei sehr reale Probleme auf:
- Umweltprobleme können zu verwaisten AVHDX-Festplatten führen
- Jede Minute, in der der Snapshot existiert, bewegt er sich entlang des Spektrums von „wertvoll“ zu „Belastung“.
- Daten werden nicht dupliziert
Auch wenn ein Snapshot per se nicht wirklich unbegrenzt wachsen kann, stellen Sie sich eine Umgebung ohne Kontrollen für Snapshots vor. Ein einzelner Snapshot könnte theoretisch auf die doppelte Größe des ihm zugewiesenen Snapshots anwachsen. Ich glaube, Microsoft hat eine Obergrenze von 50 Snapshots pro VM eingeführt, aber nur als eine Art „OK, jetzt sind Sie aber albern“-Sicherheitsmaßnahme, nicht weil die Technologie es erfordert. Die theoretische Obergrenze für eine VM beträgt also das 51-fache der zugewiesenen Größe. Obwohl das wahrscheinlich nie passieren wird, können Sie sich vorstellen, dass selbst ein paar VMs mit mehreren Snapshots Ihren Speicheradministratoren Kopfschmerzen bereiten können. Es spricht auf jeden Fall dafür, eine vernünftige Beschränkung der Snapshot-Nutzung einzuführen.
Umgebungsprobleme bei Schnappschüssen
Viele Dinge könnten als Grundursache für Probleme in dieser Kategorie gelten. Sie alle laufen auf ein grundlegendes Problem hinaus: Wenn die übergeordnete VHDX geändert wird inbeliebigSo ist das AVHDX vollständig ungültig und absolut nutzlos. Wenn die besitzende VM eingeschaltet ist, sollten solche Änderungen unerschwinglich schwierig sein. Aber wenn die besitzende VM ausgeschaltet ist, ist das übergeordnete VHDX nur eine Datei. Hyper-V oder Ihre anderen Systeme werden nicht wissen, dass etwas nicht stimmt, bis Sie versuchen, auf das untergeordnete AVHDX zuzugreifen.
Je länger der Snapshot existiert, desto höher ist die Wahrscheinlichkeit, dass etwas schief geht, insbesondere in einer Umgebung mit mehreren Administratoren. Wenn eine VM über mehrere Snapshots verfügt, können sich die Probleme möglicherweise verschärfen.
Dieses Problem betrifft nicht nur Snapshots. Diese Probleme können bei jedem virtuellen Datenträgerdifferenzierungssystem auftreten.
Schnappschüsse verlieren mit zunehmendem Alter an Wert
Dies ist der Hauptgrund, warum Snapshots nicht lange aufbewahrt werden sollten. Wie Sie richtig vermutet haben, funktioniert der Differenzierungsmechanismus nichtnichtFühren Sie einen historischen Datensatz der Änderungen; nur die letzte Änderung an einem Block wird gespeichert. Sie haben also nur die virtuelle Maschine, wie sie jetzt in der Form nach dem Snapshot vorliegt, und die VM, wie sie war, als der Snapshot erstellt wurde. Sie können entweder zum Alten zurückkehren oder das Neue behalten. Dazwischen gibt es nichts.
Nehmen wir der Argumentation halber an (und weil dies bereits passiert ist), dass Sie eine kleine Exchange-Umgebung haben, die vollständig auf einer einzigen virtuellen Maschine ausgeführt wird. Sie erstellen einen Snapshot, bevor Sie von Exchange 2013 auf Exchange 2016 aktualisieren. Und dann lassen Sie ihn ein Jahr lang laufen. Was nützt dieser Snapshot? Würden Sie darauf zurückgreifen? Können Sie raten, wie lange diese Zusammenführung dauert, wenn Sie ihn löschen?
Snapshots duplizieren keine Daten
Der Zweck eines Snapshots besteht darin, eine virtuelle Maschine schnell auf einen bestimmten Zeitpunkt zurückzusetzen. Dies geschieht durch direkte Änderung des Zustands der virtuellen Maschine. Zu keinem Zeitpunkt wird ein Duplikat der Daten erstellt. Wenn die AVHDX beschädigt ist, enthält nur die übergeordnete Datei gültige Informationen und alle seit dem Snapshot vorgenommenen Änderungen gehen verloren. Wenn die übergeordnete VHDX beschädigt ist, sind beide Dateien nutzlos. Außerdem kenne ich keine Tools, die in eine AVHDX eintauchen und nur geänderte Daten herausziehen können. Daher ist ein Backup die beste Option, um verschiedene Zustände über einen längeren Zeitraum hinweg aufrechtzuerhalten. Es ist nicht so schnell oder bequem zu handhaben wie ein Snapshot, aber es löst alle anderen Probleme.