VirtualBox VDI - Festplatte verkleinern/reduzieren
Host: Windows, Gast: Ubuntu/Lubuntu

Erstellt am:13.12.2020 Aktualisiert am:15.03.2021

VirtualBox-Festplatten (VDI,VMDK,VHD) blähen sich mit der Zeit auf. Das liegt daran, weil das Löschen von Dateien auf dem Gast-System nicht automatisch die Festplatte verringert. Dazu gibt es eine Lösung: VirtualBox stellt ein Programm zur Verfüfung, mit diesem die größe der VDI-Festplatte verkleinert bzw. reduziert werden kann. Wie das unter Windows mit einem Linux-Gast (VDI-Datenträger) durchgeführt wird, erfährst du in dieser Anleitung.

Ablauf - zusammengefasst

Der Ablauf ist relativ einfach und kann in drei Steps aufgeteilt werden.

Step 1: Das Linux System vorher bereinigen. D.h. unnötige Daten löschen usw.

Step 2: Das Linux Programm Zerofree sucht auf dem Gast-System (Linux) nicht benutzte Blöcke ohne Null-Inhalt und füllt diese Blöcke mit Nullen. Dieser Schritt ist für Step 3 notwendig. Nicht genutzte Blöcke entstehen, wenn Dateien gelöscht werden (Step 1). Das liegt daran, weil die Dateien beim Löschen nicht tatsächlich gelöscht werden, sondern nur den Status "frei" erhalten, um häufige Schreibzugriffe auf die Festplatte zu vermeiden.

Step 3: Das Windows Programm VBoxManage.exe entfernt diese Null-Blöcke und verkleinert bzw. reduziert damit die VDI-Festplattengröße.

1.0 Systembereinigung durchführen

1.1 Gast-System (Linux) bereinigen

Es macht Sinn, vorher das Gast-System von unnötigen Dateien und Programmen zu bereinigen. D.h. die Festplatte zu leeren, damit die VDI-Festplatte später so stark wie möglich verkleinert werden kann. Dazu können Dateien gelöscht und Programm deinstalliert werden.

Zusätzlich können nachfolgende Aktionen durchgeführt werden, um das System zu bereinigen.

1.2 Unnötige Kernels entfernen

Mit diesem Befehl werden unnötige Kernels entfernt:

$ sudo apt-get autoremove --purge
1.3 Cache leeren

Alte Installationsdateien aus dem Paket-Cache (/var/cache/apt/archives) löschen:

$ apt-get clean

Weitere Möglichkeiten zum Bereinigen eines Linux Systems findest du hier: Ubuntu/Lubuntu Festplatte bereinigen

2.0 Die Durchführung Festplatte verkleinern/reduzieren

2.1 Linux Tool Zerofree installieren

Zerofree wird später im BootMenü/Recovery mode benötigt. Damit muss das Programm *vorher* mit folgendem Befehl unter Linux-Gast installiert werden. Installiere entsprechend Zerofree auf dem Linux System (Gast-System) mit folgendem Befehl:


$ sudo apt-get install zerofree

2.2 Linux im BootMenü / Recovery mode starten

Wie zu Beginn erwähnt, beschreibt Zerofree ungenutzte Blöcke mit Nullen, damit diese Blöcke später entfernt werden können. Zerofree (Linux) kann diese Funktion jedoch nicht auf beschreibbare Festplatten (Status: read/write) anwenden. Dementsprechend muss Linux über das BootMenü ausgeführt und die Festplatte zuerst auf ro (read only) gestellt werden.

Boote dazu die VBox neu und drücke im Bootvorgang die ESC-Taste mehrmals, damit du ins BootMenü gelangst. Navigiere mit den Pfeiltasten dann auf "Erweiterte Option für Ubuntu" und drücke Enter. Wähle dort den aktuellsten Kernel mit dem Zusatz "(Recovery mode)" aus und drücke Enter.

Es öffnet sich das Wiederherstellungsmenü. Je nach Linux-Version dürfte dies wie folgt aussehen (s.u.). Navigiere hier mit die Pfeiltasten zum Unterpunkt "root / Zur root-Befehlszeile (Shell) wechseln" und drücke Enter:

Drücke anschließend nochmals Enter um in die Shell zu gelangen.

Du befindest dich jetzt in der Shell.

2.3 Festplatte auf ro (read only) stellen

Mit folgendem Befehl wird die Festplatte jetzt auf ro (read only) gestellt. Das ist notwendig, damit Zerofree erfolgreich ausgeführt werden kann. Gebe dazu diesen (etwas langen) Befehl ein und drücke anschließend Enter:

$ systemctl stop systemd-journald.socket && systemctl stop systemd-journald.service && sudo swapoff -a && mount -n -o remount,ro -t ext2 /dev/sda1

Folgende Meldung erscheint, nachdem der Befehl ausgeführt wurde:

Die Festplatte ist jetzt innerhalb dieser Session auf ro (read only) umgestellt. Erfahrungsgemäß wird dieser Status nach etwa zwei Minuten wieder automatisch zurückgesetzt. Entsprechend muss Zerofree relativ schnell nach dem Befehl zum ro (read only) Status ausgeführt werden.

2.4 Zerofree ausführen

Führe Zerofree jetzt mit folgendem Befehl aus:


$ zerofree -v /dev/sda1

Sollte an dieser Stelle die Meldung "zerofree: filesystem /dev/sda1 is mounted rw" erscheinen, dann bedeutet dies, dass der Status wieder zurück auf read/write gesetzt wurde. In diesem Fall muss der vorherige Befehl nochmals ausgeführt werden.

Die Beschreibung der Nullen wird nun durchgeführt. Dies dauert bei einer Festplattengröße von 80-100gb (SSD) etwa 5 Minuten. Das Ergebnis sieht dann wie folgt aus:

Das Gast-System (Linux) muss jetzt heruntergefahren werden. Z.B. mit diesem Befehl:


$ shutdown now

3.0 Reduzierung aktiv durchführen

3.1 VBoxManage anwenden - VDI-Festplatte effektiv verkleinern

In diesem Abschnitt wir die VBox Festplatte (VDI-Datei) sichtbar verkleinert. Das wird auf dem Windows-Host ausgeführt. Das Linux Gast-System muss heruntergefahren sein.

Öffne auf dem Windows-Host die Windows PowerShell und navigieren zur VDI-Datei. Tipp: Über Shift + rechte Maustaste und dem Menüpunkt "PowerShell-Fenster hier öffnen" gelangst du ebenfalls in die PowerShell, und zwar direkt im befindlichen Verzeichnis.

Gebe nun den folgenden Befehl (mit dem &-Zeichen) in der PowerShell ein, um mit der Reduziertung/Verkleinerung der VDI-Datei zu beginnen:

& 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' modifymedium disk '.\Lubuntu 18.04 mini WB-v2-MNTN1-disk1.VDI' --compact

Dies dauert bei einer 80-100gb großen VDI-Datei/Festplatte etwa 5 Minuten. Das Ergebnis sieht dann wie folgt aus:

Das war's, die VDI-Datei ist nun erfolgreich verkleinert bzw. reduziert worden.

Vorher - 78,15 GB
Nachher - 74,73 GB

4.0 Mögliche Fehlermeldungen

4.1 Failed to lock media when compacting ...VDI

Meldung: "VBoxManage.exe: error: Failed to lock media when compacting ...VDI" und "error: Failed to compact medium!"
Lösung: In diesem Fall ist die virtuelle VBox Maschine noch aktiv und muss heruntergefahren werden.