Dynamische VHDX verkleinern / komprimieren

Nachdem wir eine virtuelle Maschine anhand eines Backups eines bestehenden Windows Rechners erstellt und in Hyper-V importiert haben, machen wir uns nun an die Optimierung.

Optimierung in der Hinsicht, dass die virtuelle Maschine aufgrund eines lizenzierten Programmes erstellt wurde, das man auch weiterhin in diesem virtuellen Gastsystem nutzen möchte. Dazu sind aber viele andere Installationen auf dem Gastsystem überflüssig. Auch viele Dateien können wir entfernen, um die benötigte Festplattenkapazität zu reduzieren.

Die Festplatte wurde bereits von 120GB auf ca. 50GB reduziert. Im folgenden sehen wir die Verkleinerung auf etwa 30GB. Womit die Größe der virtuellen Festplatte, der VHDX-Datei gemeint ist


Voraussetzungen wie in diesem Beispiel:

Tipp: Legen Sie Sicherheitskopien Ihrer VHD-Dateien an, bevor Sie fortfahren


Zunächst starten wir das Gastsystem und die Datenträgerverwaltung

Wie man sieht, befindet sich am Ende der Festplatte eine Partition, die sich auch nach Reduzierung der dazwischen liegenden Partition nicht mit der Windows Datenträgerverwaltung verschieben ließe.

Wir könnten sie einfach löschen, da es sich allenfalls um eine Recovery-Partition des OEM-Herstellers handelt.

Stattdessen werden wir beispielhaft, mithilfe AOMEI Partition Assistent Standard Edition die Partition verschieben.

Nach dem Anwenden der Änderungen und einem Neustart…

..ergibt sich folgendes Bild

Dies diente zur Demonstration, wie man Partitionen eines Windows-Systems dennoch verschieben kann.

Wir löschen nun die Partition und machen uns an die Verkleinerung der zugehörigen Virtuellen Festplatte, die im Moment noch folgende Größe aufweist.

Dazu starten wir die powershell mit Administrativen Rechten

Zwei Befehle werden wir brauchen.

  1. Get-VHD *.vhdx | where {$_.VhdType -eq „Dynamic“} | Optimize-VHD -mode full
    • Hiermit wird die Festplatte des Gastsystems innerhalb der virtuellen Festplatte/VHDX-Datei verkleinert
  2. Resize-VHD -Path .\*.vhdx -ToMinimumSize
    • Hiermit wird die virtuelle Festplatte/VHDX-Datei auf dem Host-System verkleinert

Wie in dem vorangegangenen Beitrag, lassen sich nur dynamische virtuelle Datenträger auf diese Weise behandeln. Daher die variable in folgendem Befehl

Im Anschluss führen wir Befehl 2 aus

Sollte alles glatt laufen, fragen wir die Eigenschaften der bearbeiteten VHD mit einem einfachen „get-“ ab

und sehen, dass wir nun eine VHDX-Datei haben, die der in etwa der Größe der Festplatten des Gastsystems entspricht.

Sollte jedoch folgende Fehlermeldung auftauchen

Hilft es, mit folgendem Befehl das Zielvolumen zunächst manuell festzulegen und bis hin zu einem fixen Wert zu verkleinern. Dabei wählen wir einen Wert kleiner als die tatsächliche Größe der VHD-Datei und größer als die Summe der Partitionen des Gastsystems in Bytes.

Anschließend führen wir den Befehl mit dem Parameter „ToMinimumSize“ erneut aus und kommen schließlich zu dem gewünschten Ergebnis, welches wieder innerhalb des Gastsystems abzulesen ist

So konnten wir seit Erstellung des Backups eines hardware-basierten Computers, über die Konvertierung zu einer virtuellen Maschine, bis hin zur Verkleinerung des virtuellen Datenträgers, nachträglich etwa 90GB gegenüber der initialen VHD-Datei einsparen.