Dynamische virtuelle Festplatten, d. h. VHD- oder VHDX-Dateien wachsen erst, wenn sie mit Daten beschrieben werden. Beim Löschen solcher Daten schrumpfen sie aber nicht automatisch. Wenn die VHD auf der realen Maschine mehr Platz belegt, als in der virtuellen Maschine genutzt wird, sinkt die „Speicherplatzeffiziez“ unter 100%.
Dies wird besonders deutlich, wenn man nach einem Betriebssystemupdate mit der Systemsteuerung die Datenträgerbereinigung („Speicherplatz durch Löschen nicht erforderlicher Dateien freigeben“, „cleanmgr.exe“) aufruft.
Um den Platz freizugeben, muss man die VHDs auch noch komprimieren: Aus dem Hyper-V Manager oder aus der Datenträgerverwaltung kann man die Funktion per GUI aufrufen. Auf der Kommandozeile gibt es die Funktion „COMPACT“ aus „diskpart.exe“ oder das PowerShell Cmdlet „Optimize-VHD
„.
Aber das reicht immer noch nicht. Damit die Optimierung optimal läuft, muss man vorher nicht mehr benutzten Plattenplatz defragmentieren oder mit Nullen überschreiben.
Das Defragmentierungsprogramm wird über die Systemsteuerung oder über die Eingabeaufforderung „Defrag.exe“ aufgerufen und zeigt z. B. an „80% Speichereffizienz“. Rufen Sie „Defrag C: /x
“ auf, um den freien Speicher zu konsolidieren. Das GUI darf zur Beobachtung des Vorgangs geöffnet bleiben. Defragmentierung ist bei SSDs normalerweise nicht mehr empfohlen, aber um VHD- oder VHDX-Dateien vor dem Archivieren oder Vervielfältigen zu verkleinern, ist das ein sinnvoller Weg.
Freien Speicherplatz überschreiben geht z. B. mit dem Windows Sysinternals Programm „SDelete„, das ursprünglich zum sicheren Löschen von Daten gedacht war. Man kann das Programm innerhalb der virtuellen Maschine ausführen oder man mounted die VHD auf dem physischen Rechner und führt das Programm dort aus.
Vom gleichen Autor gibt es ein „Powershell Script to compact dynamic VHDX disks„, das SDelete und Optimize-VHD ausführt. Aufruf:“Compact-VHDX -VHDXPath C:\Users\Public\Documents\Hyper-V\Virtual hard disks\DynamicDisk.vhdx -SDelete .\sdelete.exe
“