VHD-Dateien vergrößern oder verkleinern

    Microsofts Dateiformat für virtuelle Datenträger gibt es vom Typ fixed, der von Anfang an die maximale Größe hat, und vom Typ expandable, der mit dem darin gespeicherten Datenvolumen wächst. Sowohl thick als auch thin Provisioning haben Vor- und Nachteile. Allerdings kann man entgegen des ersten Eindrucks bei beiden VHD-Varianten die Größe der virtuellen Datenträger verändern.

    Fixe VHD vergrößern

    Bei statischen bzw. fixed VHDs legt die Interpretation nahe, dass sie nach der anfänglichen Festlegung der Größe nicht mehr verändert werden können. Das ist aber nicht der Fall, sie kann nachträglich vergrößert werden, wenn die darin enthaltenen Volumes volllaufen.

    Zu diesem Zweck benötigt man das Kommandozeilenprogramm diskpart. Im ersten Schritt wählt man die betreffende VHD aus:

    select vdisk file="LW:\Pfad\Dateiname.vhd"

    Danach muss man sicherstellen, dass die VHD getrennt ist. Dies erreicht man mit dem Befehl detach. Die neue absolute Größe legt man anschließend mit

    expand vdisk maximum=<MB>

    fest. Dieses Verfahren funktioniert auch mit dynamischen VHDs, allerdings wird dort nur der Wert für die maximale Größe hochgesetzt. Aber im Gegensatz zur fixen VHD nimmt  diese den ganzen Platz nicht sofort in Beschlag.

    Schließlich ist es bei fixen VHDs noch erforderlich, dass die in ihnen enthaltenen Volumes den hinzugewonnenen Platz ausnutzen können. Um ein Volume zu vergrößern, muss man die VHD mit dem Befehl attach wieder mounten. Ist die virtuelle Festplatte angehängt, dann lässt man sich die vorhandenen Volumes anzeigen und wählt das betreffende aus:

    list volume
    select volume=<Nummer oder Laufwerksbuchstabe>

    Zum Schluss vergrößert man das Volume mit

    extend size=<MB>

    Zu beachten ist dabei, dass diskpart bei den Größenangaben inkonsistent ist. Während die neue Größe der VHD absolut angegeben werden muss, ist bei der Ausdehnung eines Volumes der zusätzliche Speicherplatz in MB gefragt.

    Wachstum einer dynamischen VHD kontrollieren

    Während der Platz in einer fixen VHD mit andauernder Nutzung knapp und daher eine Vergrößerung notwendig werden kann, ist die Situation bei einer dynamischen VHD genau umgekehrt.

    Hier tritt eher der Fall ein, dass sie ständig automatisch expandiert, bis sie den gesamten Plattenplatz verbraucht. Hier geht es also darum, das ungezügelte Wachstum zu bremsen.

    diskpart kann mit dem compact-Befehl freien VHD-Platz freigebenWenn intern Dateien gelöscht werden, dann bleibt der frei gewordene Speicherplatz durch die VHD belegt. Weder Virtual PC oder Hyper-V noch Windows 7 bei VHD Boot kompaktieren die VHD automatisch, vielmehr fragmentiert sie wie ein Dateisystem. Daher ist hier die Intervention des Administrators erforderlich, entweder mit dem Hyper-V-Manager oder erneut mit diskpart:

    compact vdisk

    Zu beachten ist hier, dass die VHD nicht oder im Nur-Lese-Modus gemountet sein sollte. Wie in den vorigen Beispielen muss sie erst mit Hilfe des select-Befehls ausgewählt werden.

    Der compact-Befehl lässt sich auf fixe VHDs nicht anwenden. Soll ein solcher statischer virtueller Datenträger verkleinert werden, dann besteht die Möglichkeit, eine kleinere VHD anzulegen und den Inhalt des alten Datenträgers dorthin umzukopieren.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    4 Kommentare

    Gilu sagt:
    7. August 2012 - 13:32

    Vielen Dank!

    Nur musste ich den Befehl extend size=100 so lange wiederholen, bis die Partition vollständig erweitert war. Null oder Eins war keine 'gültige' Eingabe.

    Dank nochmals!

    Magolas sagt:
    28. Januar 2019 - 23:15

    Um auf die maximal verfügbare Größe zu erweitern hättest du auch einfach nur den Befehl extend ohne die size Angabe verwenden können.

    Djeddal sagt:
    28. August 2012 - 15:54

    Nac dem "expand" Befehl und deren Ausführung und danach das mounten mit dem "attach" Befehl ist die vhd schon erweitert. Mit der Konsoleneingabe treten tatsächlich öfters Probleme auf, wenn man den mit dem "expand" Befehl erweiterten Speicher in die vhd nutzbar einfügen will. Dabei wird ein Fehler gemeldet, dass für die Erweiterung kein genügender Speicherplatz zur Vergung steht. Nun kann man in der Konsole den erweiterten Platz in kleinen Schritten zwar anfügen aber es geht auch leichter und einfcaher und vor allem viel schneller.
    Und zwar:
    Diese Lösung geht nur bei laufendem Windows und geäffneter Konsole (das ist der sog. "cmd")
    Nachdem man in der Konsole bis zum "attach" Befehl wie oben beschrieben gekommen ist, kann man in der Windows Datenträgerverwaltung die vhd ohne Probleme um den zusätzlichen vollständigen Speicherplatz vergrößern. Dazu reicht ein Rechtsklick auf die Datei.

    Michael sagt:
    8. April 2021 - 12:20

    Ich zitiere:
    "... ist die Situation bei einer dynamischen VHD genau umgekehrt. Hier tritt eher der Fall ein, dass sie ständig automatisch expandiert, bis sie den gesamten Plattenplatz verbraucht. Hier geht es also darum, das ungezügelte Wachstum zu bremsen."
    Genau diese Frage wird aber nicht beantwortet. Dem ungezügelten Wachstum einer dynamischen VHD lege ich doch nur durch die Vorgabe einer maximalen Größe Zügel an. Beim Erzeugen einer dynamischen VHD-Datei läßt sich deren maximale Größe ja wohl mit maximum-Parameter vorgeben. Aber wie läßt sich diese maximale Größe im Nachhinein verringern?