VirtualBox Linux ゲストファイルシステムの圧縮
VMware の VMDK 形式のまま VirtualBox でつかっている仮想 HDD、 Linux ゲスト内では 11GB 程度の使用量なのにホストファイルシステム上では 47GB も占有している。
いかん、これではいかんよ。
ということで、 VBoxManage modifyhd で --compact しようとしたところ、 VMDK はサポートしていないというにべもないお告げ。そこで VBoxManage clonehd で --format=VDI でネイティブ形式のコピーをつくったところ 65GB に膨れ上がった。なんの、これを modifyhd --compact して圧縮するのさ!と試したところ、ぴくりとも大きさが変わらない。
マニュアルを読んでみたところ、 --compact オプションはファイルシステム内のゼロ領域を圧縮するのだそうで、んー、ゴミが残っているのかねえ…。
で、対処法。 Debian には zerofree というパッケージがあるので、これを使う。(ほかのディストリビューションを使っている場合、ソースパッケージを拾ってきて make して使う)
$ sudo init 1 # シングルユーザーモードに移行 # mount -o ro,remount / # / をリードオンリーで再マウント。 zerofree のため必要 # zerofree -v /dev/hda1 # zerofree を配置したディレクトリーにパスを通しておくこと
zerofree の実行にはとてもとてもとても時間がかかるので覚悟して臨むべし。
それから zerofree に与えるファイルシステムは / としてマウントされるデバイスを指定すること。 / が /dev/hda1 なのか /dev/sda1 なのか、もっと別のデバイスなのかは /etc/fstab を見ればわかる。
zerofree が完了したら / を rw で再マウントしてシャットダウンする。
# mount -o rw,remount / # shutdown -h now
VM が終了したら、こんどはホストのコマンドラインで --compact を実行。
> "%PROGRAMFILES%\Oracle\VirtualBox\VboxManage"^ modifyhd <path.to>\<file.vdi> --compact
うまくいったらおなぐさみ。