Gefällt dir dieser Artikel?

VirtualBox: VDI Image verkleinern

erschienen in der Kategorie Software, am 30.04.2012
Schnatterente
In den letzten Tagen bin ich bereits mehrfach auf Oracles VirtualBox eingegangen. Diesbezüglich möchte ich noch ein weitere Problematik und eine mögliche Lösung näher beleuchten. Nämlich das Problem der zunehmenden Größe dynamisch alloziierter VDI Dateien.

Ich betreibe, unter anderem, ein Windows XP in einer virtuellen Maschine, auf meinem Linux System. Dieses beinhaltet einige, teils recht speicheraufwändige, Softwarepakete, für die ich keine oder aus meiner Sicht nur unzureichende Linux- und Open Source-Alternativen gefunden habe. Nach einigen Tagen, Wochen oder Monaten, abhängig davon, wie häufig ich die virtuelle Umgebung nutze, neigt das Disk Image dazu, ziemlich groß zu werden.

Dies begründet sich in der Tatsache, dass VirtualBox mit Hilfe der Virtual Disk Images echte Festplatten simuliert. Betriebssysteme neigen dazu, den auf einer Festplatte verfügbaren Speicher, nicht vom ersten Sektor an lückenlos zu füllen, sondern den Datenträger in gewisser Weise zu fragmentieren. Dies passiert zum Beispiel, wenn einige kleine Dateien gelöscht werden, und später neu anzulegende Dateien mehr Platz erfordern, als die entstandenen Lücken hergeben. Dateien mit denen man häufig arbeitet, verändern auch häufig ihre Größe und erzeugen oder verdrängen somit Lücken im Dateisystem.

Die Fragmentierung ist also vollkommen normal. Im Falle einer virtuellen Maschine, deren Image dynamisch wächst, ist dies aber etwas lästig. Das Programm VirtualBox kann das VDI Image nur bis zum letzten gefüllten Sektor der virtuellen Festplatte verkleinern. Dabei spielt es keine Rolle, ob vor diesem letzten Sektor 5 Gigabyte ungenutzte Speicherbereiche liegen oder ob der gesamte Speicher bis zu diesem Punkt belegt ist.

Hat man dieses Problem erst mal erkannt, liegt auf der Hand was zu tun ist. Der virtuelle Datenträger muss defragmentiert werden - und zwar so, dass möglichst alle vorhandenen Daten an seinen Anfang verschoben werden. Für Windows habe ich das Freeware Programm "MyDefrag" gefunden. Dieses verfügt über eine Option, die es ermöglicht, den freien Speicher am Ende des Datenträgers zu vereinen - es schiebt also alle Daten an den Anfang der virtuellen Festplatte.

Nach dieser Operation sollte sich VirtualBox eigentlich selbstständig dazu entschließen, das Disk Image zu verkleinern. Falls dem nicht so ist, kann man den Vorgang auch per Hand einleiten:
VBoxManage modifyhd --compact disk.vdi

So, das war's jetzt aber erst mal zum Thema VirtualBox.

Geschnatter

4 Kommentare, selbst mitschnattern << < Seite 1/1 > >>
mkrueger, am 26.07.2012 um 08:27 Uhr
Das Thema wurde auch behandelt in

VirtualBox Forum


Dort angebotenens Windows-Programm:

Clone VDI


Hat meine virtuelle Platte wesentlich kleiner geschrumpft als "VBoxManage modifyhd --compact disk.vdi"-Befehl (nach Defragmentierung). Über VBoxManage von ca. 16GB auf ca. 15 GB. Mit dem Tool auf ca. 5 GB. Vielleicht war es Zufall. Ist aber mal einen Test wert!



Liebe Grüße
mkrueger
Matthias Krueger, am 02.10.2012 um 07:32 Uhr
Ich habe ja einen direkten Link auf das Programm CloneVDI-exe angegeben. Der stimmt nicht mehr und lautet jetzt:
https://forums.virtualbox.org/download/file.php?id=7579

Vielleicht kannst Du ja mal darauf hinweisen, bzw. auf den Namen des Programmes (falls sich der Link, wegen eines Versionswechsels wieder ändert...).

Liebe Grüße
mkrueger
Antwort: Danke Matthias! Hier geht's zur Entwicklerseite von CloneVDI.
kriegerse, am 05.08.2014 um 20:05 Uhr
Damit deine Methode auch nach längerer Zeit funktioniert, muss der defragmentierte Bereich noch am besten genullt werden. Ansonsten erkennt VBoxManage modifyhd --compact disk.vdi lauter uneinheitlichen Datenmüll und verkleinert das Image wesentlich.

########
# qemu-nbd -c /dev/nbd0 Windows\ XP.vdi

# mount /dev/nbd0p1 /mnt/tmp/

# dd if=/dev/zero of=/mnt/tmp/big.file bs=102400

# rm /mnt/tmp/big.file

# umount /mnt/tmp

# qemu-nbd -d /dev/nbd0

# ls -alhtr Windows\ XP.vdi
-rw------- 1 XXXXXXXX YYYYY 20G Aug 5 19:55 Windows XP.vdi

# VBoxManage modifyhd --compact Windows\ XP.vdi

# ls -alhtr Windows\ XP.vdi
-rw------- 1 XXXXXXXX YYYYY 9,2G Aug 5 19:57 Windows XP.vdi

# du -scm Windows\ XP.vdi
9398 Windows XP.vdi
9398 insgesamt

######
hdmn, am 11.11.2014 um 16:25 Uhr
vielen dank für den tipp! hat mir sehr geholfen…
* mydefrag - flash & free space (anderer defrag hat nicht funktioniert!)
* vboxmanage modifyhd --compact disk.vdi

von 46gb auf 17gb in wenigen minuten! :)