Dynamische Disk verkleinern

Sammlung von diversem Know-How

Dynamische Disk verkleinern

Hinweis

Ausführliche Informationen zu VDIs und insbesondere auch zum Verkleinern von Disks gibts hier

Das Verkleinern einer Disk ist grundsätzlich relativ einfach und wird über folgenden Befehl ausgelöst:

VBoxManage modifyvdi xxxx.vdi compact

wobei xxx.vdi dem Pfad zur virtuellen HD entspricht.

Damit VirtualBox aber das Abbild verkleinern kann, müssen zunächst Vorbereitungen im Gastsystem getroffen werden. Eine virtuelle HD im VDI Format besteht aus mehreren Blöcken à 1 MB. Virtualbox kann nur Blöcke aus dem virtuellen Abbild entfernen, welche komplett mit 0x00 gefüllt sind und dadurch als „unbenutzt“ betrachtet und aus dem Abbild eliminiert werden können. Dateisysteme setzen die Inhalte der Cluster von gelöschten Dateien jedoch nicht zurück. Aus diesem Grund müssen vor dem Ausführen des obigen Befehls - abhängig vom Gastsystem - noch weitere Aktionen ausgeführt werden.

Linux

Linux muss zunächst im Single-User-mode (init 1 / Recovery-Mode) gestartet werden. Anschliessend werden in der Root-Konsole folgende Befehle ausgeführt :

mount -n -o remount,ro -t <meinFileSystem> /dev/sda1 /

Wobei <meinFileSystem> durch das effektiv vorhandene Filesystem ersetzt werden muss, also z.B. ext4.

zerofree /dev/sda1

Wobei /dev/sda1 einer Partition auf der zu verkleinernden Disk entspricht. Dieser Schritt ist für alle Partitionen zu wiederholen.

Optional: Swap-Partition auf Null setzen

Zusätzlich kann auch die Swap-Partition noch auf 0 gestellt werden. Damit wird jedoch die Markierung der Swap-Partition gelöscht und muss danach wiederhergestellt werden. Um dies zu erreichen, kann man wie folgt vorgehen (wobei /dev/sda5 der linux-swap-Partition entspricht):

  1. UUID der Swap-Partition ermitteln:
    blkid /dev/sda5
  2. Swap-Partition auf 0 stellen:
    shred -n 0 -z /dev/sda5
  3. Swap-Partition neu formatieren:
    mkswap /dev/sda5 -U <UUID> 

    Wobei <UUID> der im ersten Schritt ermittelten UUID entsprechen soll

Optional: VDI-Blöcke optimieren

Wenn sich das Diskabbild dennoch nicht auf die erwartete Grösse verkleinern lässt, kann dies damit zusammen hängen, dass die Dateisystem-Blöcke des Gastsystems ungünstig über die 1 MB Blöcke des VDI-Files verteilt sind. Um die Blöcke kompakter auf die virtuelle Festplatte zu bekommen, kann man sich eines Tricks bedienen:

  1. Mit einer ubuntu live CD die virtuelle Maschine von starten
  2. Sobald das live-System gestartet ist, den Partitionseditor gparted starten
  3. Im Partitionseditor die Partition des Gastsystems auf das Minimum (es sollten noch einige 10 MB übrig bleiben) verkleinern und diese Änderung ausführen
    Dieser Vorgang sorgt dafür, dass die Blöcke welche nun weit über die Disk verteilt sind in den noch verbleibenden Platz verschoben werden
  4. Anschliessend die Partition wieder auf die gesamtgrösse vergrössern und diese Änderungen ebenfalls ausführen

Anschliessend kann der oben genannte Vorgang (mount - zerofree) nochmals ausgeführt werden.

Windows

Zunächst eine Defragmentierung durchführen um die vertreuten Dateien möglichst in ganzen Blöcken zu erhalten. Anschliessend sämtliche freien Blöcke mittels folgendem Befehl auf null setzen:

sdelete -c C

Wobei C der Laufwerksbuchstabe ist.