VirtualBox: Größe einer VDI verringern

Verwendet man bei einer Virtuellen Maschine unter VirtualBox eine dynamisch wachsende VDI als virtuelle Festplatte, kommt man mitunter irgendwann in die Situation, das man diese wieder verkleinern möchte.

Als Beispiel dient die VDI eines virtualisierten Debian GNU Linux die mit einer maximalen Größe von 80 GB festgelegt war. Da in der Zwischenzeit der Speicherplatz auf dem Host-Computer allerdings relativ knapp geworden ist, sollte die VDI verkleinert werden.

Innerhalb der virtuellen Maschine wurde mittels “df -H” überprüft, wie viel Speicherplatz tatsächlich belegt ist, das sind gerade mal gute 5 GB. So gibt es mehr als genügend Raum, um die VDI zu verkleinern.

Eine Voraussetzung für das Unternehmen ist allerdings, das der freie Speicherplatz mit Nullen gefüllt ist. Damit dies sicher der Fall ist, wurde “zerofree” installiert und im Recovery Mode nach dem Aushängen der Partiton ausgeführt.

zerofree -v /dev/sda1

Für Windows-VMs kann man “sdelete” verwenden.

Anschließend wurde die virtuelle Maschine heruntergefahren und in einer Eingabeaufforderung aus dem Ordner

C:\Program Files\Oracle\VirtualBox

des Windows 10-Hosts folgender Befehl ausgeführt:

vboxmanage modifymedium disk "C:\Users\%username%\VirtualBox VMs\Debian\Debian.vdi" --compact

Dieser Befehl kann auch auf VHDs angewendet werden.

Der Fortschritt sieht so aus:

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Je nach Größe und Performance dauert es eine Weile, bis der Vorgang abgeschlossen ist.

Anschließend kann man die virtuelle Maschine wieder starten. Möchte man verhindern, das die VDI wieder so starrk anwächst kann man beispielsweise mit GParted Live die Partition verkleinern.

Links und Quellen:

VirtualBox – Manual – Chapter 8. VBoxManage – 8.22. VBoxManage modifymedium

How-To Geek – How to Shrink a VirtualBox Virtual Machine and Free Up Disk Space

8 Kommentare

  • Ist das nicht bei jedem Verkleinern viel Schreiblast für eine SSD (Thema Wear-Levelling)? Oder werden nur die Sektoren genullt, die nicht bereits genullt sind?

  • Der VirtualBox-Befehl kann nur die Bereiche der VDI/VHD verkleinern, die genullt sind, andernfalls bleiben sie belegt und in Folge die VDI/VHD entsprechend größer. Man kann den Befehl ohne voriges zerofree bzw. sdelete und co. laufen lassen und sich das Ergebnis anschauen. Ja, während des Vorgangs ist eine gewisse Last da, es wird allerdings auch nicht der ggf. noch übrige bislang nicht belegte Speicherplatz einer VDI/VHD nun gefüllt, die Datei bleibt bei ihrer letzten Größe, soweit zumindest meine Beobachtung und Erfahrung. In diesem Fall waren von der maximalen Größe von 80 GB lediglich gut 40 GB physikalisch belegt, nach dem Nullen und compact sind es nur noch 10 GB.

    Von einer ggf. verwendeten SSD weiß der VirtualBox-Befehl ja nichts, daher können dann entsprechende Mechanismen so nicht greifen.

  • Hallo,
    danke für den Artikel, hat mir sehr geholfen.
    Kleine Anmerkung: Unter MacOS ist vboxmanage erst mal nicht zu finden, weil der Dateiname VBoxManage lautet.
    Zerofree muss unter Debian erst aus den üblichen Repositories installiert werden, bei den anderen Distributionen wirds auch so sein.
    Grüße
    SR

  • Moin.

    Heißt der Befehl

    vboxmanage modifymedium disk “C:Users%username%VirtualBox VMsDebianDebian.vdi” –compact
    oder
    VBoxManage modifyhd /Pfad/zur/VDI/MeinVirtuellerPC.vdi –compact ???

    Unter Linux heißt der Befehl auch so. Richtig?

    Mit —resize kann ich die vdi vergrößern. Kann ich damit die vdi auch auf eine bestimmte Größe verkleinern?

    Ich würde gerne von einer SSD mit Win10 und openSUSE jeweils mit VBoxManage… nach vdi convertieren. Dann beide vdi‘s auf ner anderen Festplatte in VirtualBox einbinden. Das bekomme ich nicht ans Laufen. Mache ich von der ganzen SSD eine große vdi, kann ich die in VirtualBox starten und im Bootmenü Win10 oder openSUSE auswählen.

    Lieben Dank.

  • Hallo Heiko,

    einmal das Kommentar schreiben genügt, drei Mal das Gleiche ist “geringfügig” zu viel.
    Zur Erinnerung: Die Kommentare sind moderiert.

    Zu deiner Frage:

    Der Parameter lautet “–compact”, wie im Beitrag und in der verlinkten Hilfe von VirtualBox beschrieben. Dieser hilft allerdings nur eine dynamisch wachsende virtuelle Festplatte verkleinern zu können, sofern der freie Speicherplatz nur Nullen enthält. Partitionsgrößen innerhalb der virtuellen Festplatte werden nicht angepasst bzw. verändert.

    Mit “–resize” kann die virtuelle Festplatte in der Größe verändert werden, aber nur vergrößert (“only for the dynamically allocated variants. It can only be used to expand, but not shrink, “). Zu beachten ist außerdem, das dies NUR die Größe der virtuellen Festplatte betrifft, die darin enthaltenen Partitionen muss man selbst bzw. anderweitig anpassen.

    > Ich würde gerne von einer SSD mit Win10 und openSUSE jeweils mit VBoxManage… nach vdi convertieren.

    Wie genau wird dabei vorgegangen?

    > Dann beide vdi‘s auf ner anderen Festplatte in VirtualBox einbinden. Das bekomme ich nicht ans Laufen.

    Fehlermeldung o.ä.?

    > Mache ich von der ganzen SSD eine große vdi, kann ich die in VirtualBox starten und im Bootmenü Win10 oder openSUSE auswählen.

    Hierbei handelt es sich um eine 1:1 Kopie, oder?

  • Moin. Sorry das ich den Kommentar mehrfach geschrieben habe. Ich konnte den Kommentar nach dem Abschicken nicht finden, da dachte ich da wäre was schiefgelaufen.

    Ich habe folgende Befehle eingegeben:
    VBoxManage convertfromraw /dev/sdc2 SSD-sdc2-Win10.vdi –format VDI => für Win10-Partition
    VBoxManage convertfromraw /dev/sdc3 SSD-sdc3-openSUSE.vdi –format VDI => für openSUSE-Partition

    Beide vdi aus einer SSD ausgelesen und dann unter ner anderen Festplatte in VirtualBox eingebunden.
    Konnte beide virtuelle Systeme nicht starten. Fehlermeldung weiß ich nicht. Könnte ich nachliefern, wenn gewünscht. Muß dann nur die vdi’s neu ziehen.

    Bei diesem Befehl
    VBoxManage convertfromraw /dev/sdc SSD-sdc.vdi –format VDI
    bekam ich beim Starten der VM mit dieser vdi ganz normal das Bootmenü Grub2 angezeigt, wo ich Win10 und openSUSE erfolgreich booten können. Dürfte also quasi eine 1:1 Kopie sein. Ich hätte die beiden Systeme gerne als eigenständige VM’s.

    Die /dev/sdcX sind natürlich nicht gemounted.

    Mit –compact kann ich die vdi’s verkleinern, aber wie gehe ich vor, wenn ich die vdi auf eine bestimmte Größe reduzieren will? Geht das über GParted in Live-DVD?

    Kann ich mit diesem Befehl (zerofree -v /dev/sda1) Win und Linux mit Nullen überschreiben, oder muß ich bei Win das sdelete nehmen? Oben steht ja man kann sdelete nehmen für Win, aber nicht muß.

    Vielen Dank.

  • PS: Heißt es nun modifymedium disk oder modifyhd?

    Vielen Dank.

  • Ich würde mal ganz stark vermuten, das bei den beiden konvertierten Partitionen sowohl der Bootsektor bzw. Bootmanager und evtl. weitere Boot-Partitionen fehlen, da ja nur die Partitionen 2 und 3 konvertiert werden.
    Das würde dann auch erklären, warum ist mit der Angabe “/dev/sdc” klappt, da dort alles enthalten ist.

    > Mit –compact kann ich die vdi’s verkleinern, aber wie gehe ich vor, wenn ich die vdi auf eine bestimmte Größe reduzieren will? Geht das über GParted in Live-DVD?
    Ja, mit GParted die Partitionen verkleinern und zusammenschieben und dann die VDI mit “–compact” sozusagen eindampfen.
    Alternativ die zuvor verkleinerten Partitionen und eine von vornherein kleinere VDI klonen.

    > Kann ich mit diesem Befehl (zerofree -v /dev/sda1) Win und Linux mit Nullen überschreiben, oder muß ich bei Win das sdelete nehmen?

    zerofree ist für Linux, sdelete für Windows. Ob beispielsweise zerofree unter Linux ausgeführt auch Windows-Partitionen bearbeiten kann, weiß ich leider nicht.
    Ein Blick ist dann evtl. noch ntfswipe wert, sofern man von Linux aus arbeitet:

    https://www.systutorials.com/docs/linux/man/8-ntfswipe/

    Getestet habe ich das bislang allerdings nicht.

    > PS: Heißt es nun modifymedium disk oder modifyhd?

    “modifymedium disk” laut Hilfe und Beitrag. “modifyhd” ist alt, wie man in der Hilfe nachlesen kann:

    “For compatibility with earlier versions of Oracle VM VirtualBox, the modifyvdi and modifyhd commands are also supported and mapped internally to the modifymedium command.”

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.