Mit ein paar wenigen Schritten, lässt sich die Größe einer VHD komprimieren. Ungenutzter Speicherplatz lässt sich damit wieder freisetzen und für andere Zwecke nutzen.

VHD komprimieren auf tatsächliche Größe

Die Möglichkeit, eine VHD komprimieren zu können, besteht nur, wenn das Festplattenimage als Typ „Dynamisch erweiterbar“ angelegt wurde. In diesem Fall wird nämlich das sogenannte Thin Provisioning angewendet. Das bedeutet, dass sich die Image-Datei nur dann vergrößert, wenn der Speicherplatz in der VM auch wirklich belegt wird. Das eigentlich Dumme an der Sache ist, dass einmal belegter Speicherplatz andersrum nicht wieder automatisch freigegeben wird.

Die beiden nachfolgenden Bilder beschreiben das Problem etwas genauer:

VHD komprimieren

Auf der Partition D sind von knapp 10GB noch 8,23GB Speicherplatz für die freie Verwendung vorhanden.

vhd datei verkleinern

Auf dem Hyper-V Host nimmt die VHD Datei allerdings ca. 9GB Speicherplatz in Anspruch.

Ist genügend Speicherplatz auf dem Hyper-V Host vorhanden, ist dieser Umstand zunächst nicht weiter schlimm. Problematisch wird es allerdings, wenn die maximale Größe der virtuellen Festplatten den insgesamt vorhandenen Speicherplatz überschreitet. Dann besteht die Gefahr, dass die Partition oder das Cluster Shared Volume (CSV) „voll läuft“. Das Ergebnis wäre der Ausfall sämtlicher virtueller Computer, die auf dieser Partition, bzw. CSV liegen.

 

Per PowerShell die VHD verkleinern

Für ein optimales Ergebnis bei der Komprimierung darf sich die VHDX-Datei nicht im Schreibzugriff berfinden. Sprich: die virtuelle Maschine muss ausgeschaltet, bzw. heruntergefahren sein. Andernfalls bekommst Du die Fehlermeldung: „Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird (0x80070020)“ angezeigt.

Der PowerShell Befehl zum Verkleinern einer VHDX-Datei lautet Optimize-VHD:

Dadurch wird die betreffende virtuelle Festplatte auf die geringst mögliche Größe komprimiert. Der Schalter „-mode Full“ bewirkt, dass beim Komprimieren neben „ausgenullten“ auch nach unbenutzen Blöcken gesucht wird und auch deren  verwendeter Speicherplatz freigegeben wird.  Nachdem dieser Prozess beendet wurde, lohnt sich ein Blick in den Ordner „Virtual Hard Disks“.

In meinem Beispiel wurde die VHDX-Datei von ca. 8,6GB auf 1,9GB verkleinert. Das entspricht einer Komprimierungsrate von knapp 77%. Es kann sich also besonders bei virtuellen Datenträgern, welche in der Vergangenheit große Datenmengen beheimateten, lohnen die VHD Komprimierung einmal auszuführen.

VHD komprimieren

Nach der Komprimierung der VHDX-Datei ist das Festplattenimage keine 2GB mehr groß.

VHD komprimieren per Hyper-V Manager

Für alle Freunde der grafischen Oberfläche: Der ganze Prozess ist auch über den Hyper-V Manager möglich. Dazu muss lediglich die virtuelle Festplatte in den Einstellungen der virtuellen Maschine ausgewählt werden. Mit einem Klick auf Bearbeiten bekommen wir die möglichen Operationen angezeigt.

VHD komprimieren mit Hyper-V Manager

Auch über die grafische Oberfläche des Hyper-V Servers lässt sich die VHD komprimieren

VHDX komprimieren mit Hyper-V

Die VHDX-Datei kann mittels der Option „Komprimieren“ verkleinert werden.

Egal für welche der beiden Möglichkeiten Du Dich entscheidest, das Ergebnis ist das Gleiche. Die VHDX-Datei wird auf die Größe verkleinert, welche der tatsächlichen Datenmenge entspricht, die in ihr gespeichert ist. Nachdem alle virtuellen Festplatten entsprechend verkleinert wurden, kann die virtuelle Maschine wieder gestartet werden.

Wenn Dir diese Information weitergeholfen hat, kannst Du mir das gerne in die Kommentare schreiben. Ebenfalls freue ich mich über jede kleine Spende, die Du diesem Blog ganz unkompliziert über PayPalMe zukommen lassen kannst. Vielen Dank.

René Albarus

René Albarus

Ich heiße René Albarus und bin seit 2002 beruflich im Bereich der Systemadministration tätig. Da auch ich einen Teil meines Wissens IT-Blogs im Internet verdanke, ist es für mich selbstverständlich, dass ich Lösungsansätze und Anleitungen in diesem Blog weitergebe.
René Albarus

Letzte Artikel von René Albarus (Alle anzeigen)

4 Kommentare
  1. Martin Kuras sagte:

    Heho….

    … die Erklärung ist leider unrichtig bzw. irreführend; Resize-VHD macht nichts weiter als nicht partitionierten Platz innerhalb der VHD freizugeben und tastet partitionierten Platz nicht an, egal ob der nun ausgenullt wurde order nicht. Der Befehl der tut was beschrieben wurde, lautet Optimize-VHD (etwa: Optimize-VHD -path c:\disk.vhdx -mode full).

    Gruß Martin

    Antworten
    • René Albarus sagte:

      Hallo Martin,
      da muss ich Dir vollkommen Recht geben. Der richtige Befehl für das Komprimieren der VHDX-Datei lautet Optimize-VHD. Interessanterweise funktioniert es aber auch mit dem „falschen“ Befehl Resize-VHD.
      Gruß René

      Antworten
      • Martin Kuras sagte:

        Hallo Rene,

        ich muß leider widersprechen, es funktioniert _nicht_ mit Resize-VHD.
        Wie könnte es auch, die Funktion macht exakt, was sie soll, was dokumentiert ist und nichts magisches darüberhinaus.
        Ein Szenario in dem eine VHD nicht von einer Partition belegten Platz hat ist eh eine Fehlkonfiguration und Resize-VHD ist dafür da, diesen Überstand abzuschneiden, so dass die (potentielle, im Fall einer dynamischen) Größe der VHD mit der Größe der enthaltenen Partition übereinstimmt.
        Optimize-VHD hingegen ist, was man überlichweise braucht, dafür da, einmal belegten, aber im VHD-Container noch nicht wieder freigegebenen Platz zurückzugewinnen. Wie Du beschrieben hast, ist sdelete für die Effektivität dieser ‚Kompression‘ sehr wichtig.
        IHMO bietet es sich an, einen Task in der Aufgabenplanung für einen sdelete-run anzulegen, der immer vor der z.B. einmal wöchentlichen laufenden offline-Sicherung läuft, die wiederum ein Optimize-VHD -full vor dem eigentlichen Backup durchführt. So ist automatisiert und sichergestellt, dass die VHDs sich nicht aufblähen und eine maximale Dichte auf der teuren NVMe erreicht werden kann. Und um letztere maximal zu nutzen, empfhielt sich noch das Deduplizierungsfeature von Windows Server zu nutzen, dessen Effektivität mir immer wieder auf’s neue die Sprache verschlägt. (2TB in Win10-Client VHDs passen locker auf eine 500GB Samsung 960pro, mit noch 100GB frei) Besonders extrem ist die Deduplizierung bei Sicherungslaufwerken für VHDs, wo es ja oft auch darum geht, einen längeren Rattenschwanz aan Sicherungen vorzuhalten. Ein Beispiel aus der Praxis, eben gerade nachgeschaut: 13,93TB an Sicherungen belegen 542GB Speicherplatz auf einer 8TB großen Sicherungsplatte. Gott gütiger…..

        Antworten
        • René Albarus sagte:

          Hallo Martin,

          ich nehme alles zurück und behaupte das Gegenteil. Resize-VHD ist lediglich zum Verkleinern, bzw. zum Abschneiden von Speicherplatz da. Komprimieren lässt sich die VHD ausschließlich durch Optimize-VHD. Vielen Dank, dass Du mich auf diesen Fehler hingewiesen hast. Der Beitrag wurde bereits korrigiert.

          Antworten

Dein Kommentar

An Diskussion beteiligen?
Hinterlasse uns Deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.