VMWare vmdk-Dateien verkleinern

Als ich neulich für einen Bekannten eine VM mit VMWare aufgesetzt habe ist mir beim Einspielen eines Datenbank Dumps etwas aufgefallen. Die „Festplatte“ einer VM wird in einem oder mehreren VMKD Dateien abgelegt, und wächst – sofern bei der Konfiguration mit angegeben – dynamisch mit der Inhalt der virtuellen Maschine bis zu einem bestimmten Limit.

Der Datenbank Dump hatte eine größe von 10 GB und nach dem Einspielen in der VM war die Festplatte auch um 10GB größer. Nach dem Import in den SQL Server waren weitere 10GB der Kapazität belegt, was auch durchaus nachvollziehbar ist. Allerdings führte das Löschen der Dump-Datei nicht dazu, dass die Größe der Festplatte wieder schrumpft. Im Betriebssystem wird der richtige Auslastungsgrad angezeigt, aber die VMDK Datei ist viel zu groß.

Nach ein bisschen orakeln mit Google fand sich die Lösung darin, dass beim Löschen einer Datei auf der Festplatte, dem Betriebssystem nur „mitgeteilt“ wird, dass er diesen Bereich wieder überschreiben darf. Es wird also die Information, dass auf einem bestimmten Bereich der Festplatte eine Datei liegt gelöscht, ohne aber den Sektor auch zu löschen. Deshalb verringert sich nach dem Löschen einer Datein in einer VM die Größe der VMDK nicht.

Da es sich bei diesem Problem nicht um etwas VM-spezifisches handelt, sondern um ein generelles Problem von Microsoft Betriebssystemn (ab Windows 2000) handelt, gibt es dafür auch ein Tool. Es ist deshalb ein generelles Problem, weil Daten, die vom Benutzer eigentlich gelöscht worden sind, doch noch auf der Festplatte vorhanden sind. Das Tool heisst „Secure Delete“ in kurzform SDELETE und überschreibt gelöschte Sektoren auf der Festplatte mit „0“. Damit werden die Dateien auch wirklich auf der Festplatte überschrieben.

Das Tool aus der SysInternals Reihe gibt es auf der Technet Webseite von Microsoft. Nach dem herunterladen und entpacken, kann man das Programm über die Kommandozeile mit der Option „-c“ aufrufen.

[code language=“bash“]

sdelete.exe -z (in früheren Versionen -c)

[/code]

Der Durchlauf für eine Festplatte hängt von der Größe ab. Bei meinen VMs mit Kapazitäten von unter 100GB war das Tool nach weniger als 30 Minuten damit durch. Von einer gleichzeitigen Ausführung in mehreren VMs rate ich ab, sofern die VMDK Dateien auf dem selben Speichermedium abgelegt sind. Eine Sicherung der VMs im Vorfeld ist ratsam, denn Vorsicht ist besser als Nachsicht.

Nach dem das Tool gelaufen ist, muss nun das VMDK File mit Hilfe der VMWare Tools noch komprimiert werden. Dazu liefert VMWare (Server) das Tool vmware-vdiskmanager.exe im Installationsverzeichnis mit. Das Tool wird mit dem Parameter „k“ und unter der Angabe der zu komprimierenden VMDK Datei angegeben.

[code language=“bash“]

“C:\Programme\VMware\VMware Server\vmware-vdiskmanager.exe” -k “meinvmdk.vmdk”

[/code]

Die Komprimierung schafft in einer Minute ca. 1.5 GB und hat bei mir für eine 67GB VM 43 Minuten gebraucht. Nach der Komprimierung kann man ohne weitere Einstellungen vornehmen zu müssen die VM ganz normal wieder starten. Fertig.

9 Gedanken zu „VMWare vmdk-Dateien verkleinern“

  1. Danke für den Tipp!
    Der -vdiskmanager ist nun bereits in den VM Settings integiert!

    Also: Nachdem sdelete in der Virtuelle Maschine (an allen „Festplatten“ durchgeführt wurde, kann in der VM Ware Workstation über VM settings -> Utilities ->compact : die vmdk Disk verkleinert werden.
    lg G.E.

  2. Mit den VM-Tools kann das Image auch verkleinert werden.

    Einfach VM-Tools in der virtuellen Umgebung öffnen und über Eigenschaften auf das Tab „Verkleinern“ gehen.

    Dort kann dann ein image verkleinert werden.

    lg A.Z.

  3. Danke ! Klappt wunderbar.
    Hatte mich schon gewundert, daß trotz defragmentieren und Daten löschen die vmdk-Datei immer größer wurde…

  4. Allgemein gute Anleitung.
    Für meine Zwecke habe ich bei sdelete folgenden Aufruf verwendet:

    sdelete -c c:

    Ich möchte hier auch noch bestätigen, dass die „compact“ Funktionalität auch im VMWare Player (3.1.4) eingebaut ist. Sie ist etwas versteckt, deswegen zeige ich hier nochmal den Pfad auf:

    VMWare Player -> Virtuelle Maschine auswählen -> Virtual Machine -> Virtual Machine Settings… (Ctrl + D) -> Hardware -> Hard disk -> Utilities -> Compact

  5. Leider hat hat Sdelete bei mir einen gegenteiligen Effekt gehabt.
    Anschliessend war meine VMDK noch größer und ließ sich auch nicht „shrinken“.

    Als Alternative habe ich den CCleaner (Crap-Cleaner) (http://www.piriform.com/ccleaner) verwendet.
    Dieser hat die Funktion „Wipe Free Space“, welche dann zum Erfolg geführt hat.

    Das Anschliessende „Shrinken“ der VMDK hat die Datei auf etwa ein Drittel reduziert.

  6. Ich fand diesen Artikel ebenfalls sehr hilfreich. Bei mir hatte sdelete zuerst leider den gleichen Effekt wie bei Kalle Blomquist. Ein kurzer Blick in die Dokumetation des Tools verriet aber sofort die Lösung:

    Der Parameter heißt (inzwischen?) -z

    Hier kurz der Auszug aus der Dokumentation:
    -z Zero free space (good for virtual disk optimization)

    Danach funktionierte auch das Verkleinern der Disk 😉

  7. Kleiner Tip – vorher nochmal defragmentieren – da das „compact“ nur in 1MB Schritten verkleinert bleibt ein angerissener 1MB Block gross. Defraggler von pirisoft ist klein, schneller und netter als die eingebauten defrag Lösungen.

Kommentare sind geschlossen.