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.