HyperV’s VHDX Dateien verkleinern (compact vhdx)

Folgende Ausgangssituation: Eine virtuelle HyperV-Maschine hat intern 80GB belegt, das VHDx-File hat jedoch über 130GB. Diese 50GB “zu viel” sind im laufe der Zeit enstanden, als die VM irgendwann mehr Platz benötigt hat. Dieser Platz lässt sich jedoch zurückgewinnen – Stichwort: compact vhdx.

Platz in der VM gewinnen

Als erstes sollte man schauen, ob man in der VM noch mehr Platz gewinnen kann.

Datenträgerbereinigung

Als erstes kann man zusätzlichen Platz in der VM freischaufeln, indem man die “Datenträgerbereinigung” (“Disk Clean-up”) von Windows verwendet:

Datenträgerbereinigung
Datenträgerbereinigung schafft Platz – über 6GB in diesem Fall
  1. Windows Explorer öffnen
  2. Rechtsklick auf die Festplatte
  3. “Eigenschaften” (“Properties”) auswählen
  4. “Bereinigen” (“Disk Clean-up”) auswählen
  5. “Systemdateien bereinigen” (“Clean-up system files”) auswählen
  6. Alle Dateitypen, die nicht mehr benötigt werden auswählen
  7. Bestätigen

Dieser Vorgang kann einige Minuten dauern.

Leeren Platz mit Nullern überschreiben

Damit der ‘Compact’-Prozess von HyperV freien Platz in der VHDx Datei auch sicher als solchen erkennt, lohnt es sich den freien Speicherplatz mit Nullern zu überschreiben. Dazu eignet sich das Tool “sdelete” von Sysinternals.

sdelete.exe -s -z c:

sdelete

Dieser Vorgang dauert etwas länger, bei mir hat er etwa eine 3/4-Stunde in Anspruch genommen.

Datenträger optimieren

Ein weiterer sinnvoller Schritt ist, die Windows-interne “Datenträger Optimierung” zu verweden. Bei Systemen, welche auf einer VHDx installiert sind, wird so der Speicher entsprechend verschoben, damit der Platz wieder freigegeben werden kann. In meinem Fall Stand hier “Space efficiency: 64%”. Das entspricht inetwa dem Verhältnis von VHDx-Dateigröße zum tatsächlich benötigtem Speicherplatz.

Datenträger Optimierung

Dieser Vorgang erhöhte die “Space efficiency” allerdings nur auf 69%. In einem Forumseintrag, bin ich auf den Tipp gestoßen, stattdessen folgenden Powershell-Befehl zu verwenden:

Optimize-Volume -DriveLetter L -Analyze -Defrag -Verbose

Auch dieser Vorgang dauert wieder einige Zeit (ungefähr 1 1/2 Stunden)…. Aber dafür ist die Space efficiency nun immerhin auf 82%.

Compact VHDx

Nach dem alle Vorbereitungen getroffen wurden, kann man das VHDx-File endlich ‘compacten’. Dazu geht man wie folgt vor:

  1. VM abschalten
  2. Im Hyper-V Manager “Edit Disk” auswählen
  3. Die Datei auswählen
  4. “Compact” auswählen
  5. Besätigen

Dieser Vorgang dauerte bei mir nur wenige Sekunden, und hat die Dateigröße von 130GB auf 94GB reduziert.

Eine Möglichkeit, die Compact-Action über Powershell auszuführen finden man in einem Artikel von Helge Klein (englisch):

Mount-VHD 'P:/fad zur/Datei.vhdx' -ReadOnly
Optimize-VHD 'P:/fad zur/Datei.vhdx' -Mode full
Dismount-VHD 'P:/fad zur/Datei.vhdx'

Conclusio

Es gibt viele Möglichkeiten noch ein wenig mehr Platz herauszubekommen, und ich bin nicht sicher wie viel welche der Maßnahmen tatsächlich bringen. In dieser Reihenfolge ausgeführt dauert es zwar einige Zeit, funktioniert aber – auch wenn immer noch ~14GB ‘zu viel’ belegt sind.

Ein Gedanke zu „HyperV’s VHDX Dateien verkleinern (compact vhdx)

  • 12. Oktober 2020 um 15:20
    Permalink

    Zu Compact VHDX mit Powershell
    Man muss das Optimize-VHD offenbar zweimal ausführen:
    1) VHDX ist readonly gemountet; hier werden die Bereiche freigegeben, die vom Filesystem nicht genutzt werden.
    2) VHDX ist nicht gemountet; hier werden die Bereiche freigegeben, die nur 00 enthalten.

Kommentare sind geschlossen.