Ich backe gerade eben für meine Schule eine virtuelle Maschine mit Ubuntu Lucid und ksociograma für die Erstellung von Soziogrammen. Leider wächst der VDI Container aber immer stärker, als er eigentlich müsste, weil Ubuntu ja zuerst die Pakete herunterlädt und dann installiert. Ich kann die Pakete dann in der VM zwar mit
sudo apt-get clean
sudo apt-get autoremove
wieder rauswerfen und damit die VM putzen – das ändert aber an der Größe der VM nichts mehr. Die bleibt auf der Wirtsplatte so dick, wie sie war.
Einige Anleitungen im Netz beschreiben nun, wie man die VDI Datei wieder verkleinert – aber leider stimmt keine der von mir gefundenen zu 100%. Deswegen hier eine Beschreibung des Vorgangs, der bei mir für einen Linux-Gast funktioniert hat:
Zu beachten: Die VM (der Linux-Gast) ist mit EXT3 als Dateisystem anzulegen – sonst klappen die folgenden Schritte nicht!
Nachdem alle Programm installiert sind und die VM geputzt wurde (siehe oben), wird diese herunter gefahren. Dann wird die VM mit einer Ubuntu Desktop-CD gebootet. In dieser wechselt man auf eine Root-Shell
sudo su –
und installiert sich das Programm zerofree, das nur mit EXT3 als Dateisystem klar kommt
apt-get install zerofree
Exkurs: Wenn man sich Platte des Gastes einmal kurz einhängt (mount -t ext3 /dev/sda1 /mnt), dann zeigt ein df -h in der VM an, wie viel Platz noch vorhanden ist und liefert einem außerdem alle Gerätenamen – in meinem Fall ist die Platte des Gastes /dev/sda1. Nicht vergessen: Die Platte muss nach diesem Schritt wieder ausgehängt werden, damit die folgenden Schritte funktionieren: umount /mnt
Dann wird die Platte der VM read-only in die Desktop-Umgebung gemountet
mount -o ro -t ext3 /dev/sda1 /mnt
und zerofree drauf losgelassen
zerofree /dev/sda1
Nachdem das Progrämmchen fertig ist, kann die VM herunter gefahren und die VDI Datei vom Wirt aus geschrumpft werden:
VBoxManage modifyvdi /pfad/zur/vm.vdi compact
Endlich keine device busy Meldungen mehr, wenn man versucht, zerofree aus der VM heraus auf die eigene Platte los zulassen.
Zwei kleine Anmerkungen:
df -h zeigt nur was an, wenn die Partition eingehängt ist. Das ist nach dem booten der Live CD nicht der Fall. Ein Klick auf die Festplatte genügt um die Partition einzuhängen.
zerofree ist im universe Repository und muss deshalb erst aktiviert werden, z. B. mit synaptic.
Ansonsten sehr informativer Artikel!
Völlig korrekt. Vielen Dank für den Hinweis – ich habe die Anleitung mal so abgeändert, dass man darüber nicht stolpert.
Vielen Dank. Funktionierte bei mir perfekt in Linux Mint 14
– mit neuerem Dateisystem ext4 (einfach den Mount-Befehl mit ext4 statt ext3)
– mit neuerem Virtualbox 4.2.6 (Kommando heisst jetzt modifyhd statt modifyvdi)
Den „Exkurs“ mit dem df -h finde ich etwas umständlich. Zwischen den Schritten „mount -o -ro…“ und „zerofree“ habe ich folgendes gemacht:
– „df -h“ ausgeführt (die /dev/sda1 Partition inkl. Grösse wird angezeigt, sowie die shared folders)
– „ls /mnt“ ausgeführt (grobe Prüfung, ob die richtige Partition gemounted wurde)
– „umount /media/sf_C_DRIVE“ ausgeführt (sicherheitshalber die shared folders vom Host entfernt)
sicherheitshalber noch die shared folders entfernt („umount /media/sf_C_DRIVE“ …) und mit „ls /mnt“ geschaut, ob die richtige Partition gemounted war.