Montag, 14. Oktober 2013

VBox Images schrumpfen

Die Images von virtuellen Maschinen, wie z.B. die Virtual Box Images aus den Trainings auf dieser Seite, wachsen praktischerweise automatisch. Leider schrumpfen sie nie wieder von alleine, gerade wenn man viel herumprobiert kann das schnell viel Platz kosten. Hier eine Anleitung wie man die Image-Dateien wieder schrumpfen kann.


In diesem Beispiel ist das Image ca. 52 GB groß. Wichtig: das Schrumpfen funktioniert nur mit VDI-Dateien, VMDK Dateien müssen erst konvertiert werden mit VBoxManage clonehd, z.B.

d:\programme\Oracle\VirtualBox\VBoxManage.exe clonehd OEP-11.1.1.7-Klon-disk1.vmdk OEP-11.1.1.7-Klon-disk1.vdi --format VDI

Dann gilt es, so viel Platz wie möglich freizuschaffen. Alte Installationsdateien löschen, Datenbankfiles verkleinern (die Standardgrößen vom RCU sind viel zu groß für ein kleines Testsystem auf dem Entwicklerarbeitsplatz).
Danach muss der freie Speicherplatz mit Nullen überschrieben werden, sonst wird er von VBox nicht als frei erkannt. Das geht z.B. mit

dd if=/dev/zero of=zero.file
rm zero.file

Das Kommando bricht ab, sobald die Partition voll ist (Achtung: Benutzung auf eigene Gefahr, vorher Backup anlegen). Danach einfach das zero.file wieder löschen. Anschliessend die VBox herunterfahren, jetzt kann Virtual Box die Datei komprimieren mit

e:\VBox\Machines\OEP-11.1.1.7-Klon>d:\programme\Oracle\VirtualBox\VBoxManage.exe
modifyhd OEP-11.1.1.7-Klon-disk1.vdi --compact

Warten bis das Kommando bis 100% heraufzählt und das war es auch schon.


Bei meiner VM habe ich damit eine Reduktion von 52 GB auf 23 GB erreicht.

---8<------------------------------------------------------------------------------

UPDATE:
Ich bin von Lorenz Keller darauf hingewiesen worden, dass Mac Anwender beim Aufruf von VBoxManage den vollen Pfad zum VM-Image angeben müssen, ansonsten gibt es folgende Fehlermeldung:

$ VBoxManage modifyhd EM12cR4.vdi --compact
VBoxManage: error: Could not find file for the medium '/Volumes/Macintosh_HD/Users/oracle/EM12cR4.vdi' (VERR_FILE_NOT_FOUND)
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Medium, interface IMedium, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 178 of file VBoxManageDisk.cpp

Richtig wäre

$ VBoxManage modifyhd /Volumes/Macintosh_SSD/Users/Shared/VirtualBox/EM12cR4/EM12cR4.vdi --compact

und schon klappt es auch mit dem Mac.