Virtualbox: Speicherverbrauch bei dynamischen Image-Dateien optimieren

Dynamische Festplattencontainer haben den Vorteil, daß sie mitwachsen und nicht am Anfang schon die gesamte Kapazität der virtualisierten Festplatte benötigen. Ist ein Container aber schon längere Zeit in Betrieb stellt sich der Effekt ein, daß der benötigte Speicherplatz auf dem Host immer weiter wächst, auch nach dem Löschen von Dateien im Gast-System. Der Effekt dürfte sich mit dem Einsatz von Copy-On-Write-Dateisystem noch verstärken.

Die einzige Möglichkeit, den Speicherverbrauch wieder zu verringern besteht darin, daß das Gast-System dem Host-System bzw. der Virtualisierungslösung nicht benutzte Speicherbereiche mitteilt. Damit dies geschieht, kann man sich des TRIM-Kommandos bedienen, was im Zuge von SSDs auch Unterstützung bei den Hypervisor gefunden hat.

Für VirtualBox muß man im Host die Optionen “nonrotational” und “discard” für den Massenspeicher wählen. Das geschieht entweder durch das direkte Editieren der vbox-Datei:

<AttachedDevice nonrotational="true" discard="true" type="HardDisk" hotpluggable="true" port="1" device="0">
<Image uuid="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"/>
</AttachedDevice>

Besser wäre es selbstverständlich  VBoxManage dafür heranzuziehen. Der Befehl müsste folgendermaßen aussehen:

VBoxManage storageattach mydisk --storagectl "SATA Controller" --port 0 --type hdd --discard on --nonrotational on --medium image.vdi

In meinem Fall hat es jedoch nicht funktioniert, sodaß ich mich auf das manuelle Editieren ausweichen musste.

Im Gast-System (in diesem Fall Ubuntu) genügt dann bei gemountetem Dateisystem ein Aufruf von

fstrim -v /mountpoint

und man kann der Datei beim Schrumpfen zusehen.