自宅や出張時に使用しているノート PC (hp dv5 has broken again) はホスト OS を Windows 7, ゲスト OS に FreeBSD をインストールしています。
今回 Windows 7 は 32bit -> 64bit に入れ替えたついでに、FreeBSD 9.1-RELEASE (amd64) を新規インストールしました。
FreeBSD は大半を ports により構築しますが、完了直後は仮想ディスク (可変サイズ) は 10GB を超えていました。
portsclean -C や構築時に仮設置したファイルを削除した時点で、
Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ada0p2 58905148 5159152 49033588 10% / devfs 1 1 0 100% /dev
ゲスト OS 側は 5GB 程度に収まっても、仮想ディスクのサイズは変わりません。
一度広げた領域は未使用分の領域も確保されたままとなり、ゲスト OS の使用サイズとは必ずしも一致しません。ファイルの参照情報のみ削除されて実体は残っているためです。
空き領域の 0 (ゼロ) 書き込み
FreeBSD (や Linux) がゲスト OS の場合は、dd コマンドによる 0 (ゼロ) 書き込みで空き領域を埋めます。
# dd if=/dev/zero of=zero bs=4k; \rm zero /: write failed, filesystem is full dd: zero: No space left on device 13414185+0 records in 13414184+0 records out 54944497664 bytes transferred in 1308.556569 secs (41988630 bytes/sec)
試してはいませんが、Windows がゲスト OS の場合は SDelete をダウンロードし、sdelete -z C: 等で同等の様です。
対象仮想ディスク 特定
UUID または Location を取得します。
–compact による仮想ディスク圧縮
UUID はタイプが手間なので、補完も効くファイルのパスで指定しましたが、
ゲスト OS が稼働している場合はエラーとなり、進みません。ゲスト OS をシャットダウンして再度実行すると
3, 4 分程度掛かりましたが、無事に成功しました。再度エクスプローラ側の表示を確認すると、
6GB を超えていますが、10GB からは明らかに縮小しました。ゲスト OS をエクスポートして保存する直前にも実行すると時間が短縮出来るでしょう。