Snapshots händisch mergen
TL;DR:
- Hyper-V mergt VHD(X) und AVHD(X) nur beim Booten einer VM
- Ein reiner Neustart von innerhalb des OS mergt die nicht
- Wenn kaum noch Speicher vorhanden ist, ist schwierig zu mergen – denn bei der Zusammenführung wird ordentlich was gebraucht.
Für alle Schritte unten gibt es sowohl die GUI- als auch die PowerShell-Variante, je nach Präferenz von dir.
Vorbereitungen für Powershell-Befehle
Für den Fall, dass sie nicht installiert ist und wir die Powershell nutzen wollen: wir brauchen die Powershell-Module für Hyper-V
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell
Danach findet er alle weiter unten genannten Befehle.
Herausfinden der Kette der Snapshots
GUI
Hyper-V Manager rechts „Datenträger überprüfen“
Die älteste Platte auswählen. Dort steht dann drunter ein „Übergeordnete Disk“. Die notieren. Über die untere Schaltfläche können wir die übergeordnete Disk ebenfalls direkt notieren und uns so eine „Kette“ aufbauen.
Powershell
Folgender Powershell-Befehl listet die übergeordnete (A)VHD(X):
(Get-VHD -Path ".\pfad-zur-avhd.avhdx").ParentPath
Code-Sprache: CSS (css)
In Powershell können wir daraus auch eine Liste bauen:
$Path = ".\pfad-zur-avhd.avhdx"
while($Path) {
Write-Host $Path
$Path = (Get-VHD -Path $Path).ParentPath
}
Code-Sprache: PHP (php)
Damit haben wir eine Kette, welcher Snapshot auf welchem basiert, und können diese zusammenführen.
Mergen
Per GUI
Wir wählen rechts aus, dass wir einen Datenträger bearbeiten wollen:
Hier wählen wir den Snapshot („das Kindelement“ / die avhdx) aus.
Wir sagen, dass wir zusammenführen wollen.
Er nimmt direkt die übergeordnete Datei.
Kaffe holen, das dauert je nach Größe der Snapshots. Dieses Vorgehen wiederholen wir für alle Snapshots.
Man kann mehrere Snapshots gleichzeitig mergen. Dabei empfiehlt es sich, die beiden Fenster erst zu verschieben, bevor man den zweiten startet; das untere Fenster ist nämlich während des Merge-Vorganges gesperrt.
Powershell
Easy Einzeiler:
Merge-VHD -Path ".\Snapshot.avhdx" -DestinationPath ".\Festplatte.vhdx"
Code-Sprache: JavaScript (javascript)
Bzw. bei einer Kette von avhdx-Dateien halt immer mit der übergeordneten, bis man schließlich bei bei der vhdx ist.
Wer sich das übrigens automatisieren kann, kann oben das Script zum Bauen der Kette nehmen und dort statt der reinen Ausgabe auch den Merge-Befehl nutzen. Dann hat man einen 4-Zeiler, der alle Arbeit für massiv verschalte avhdx-Dateien für einen übernimmt 🫡
Bei Fehlern beim Boot in Hyper-V
Kaum Speicherplatz
VHDs, die nicht aktiv gemergt werden, von der entsprechenden Partition ziehen
„xyz.avhdx“ wurde nicht gefunden
Pfad in der VM anpassen. Bei Snapshot wird der auf die avhdx gesetzt.
Nach Merge kein Start – „Merge steht noch aus“
- Anpassen des Pfades zur VHD
- Alternativ rauslöschen der Festplatte und hinzufügen einer „neuen“ Festplatte