#はじめに
VirtualBoxの仮想ディスクを圧縮したい場合はディスクをゼロクリアするわけですが、この投稿では以下の条件下で実行する場合を想定した説明をいたします。
- ホストOSはWindows
- ゲストOSはLinux系
- ゲストのディスクフォーマットはLVMであること
- LVMであるかぎり、ディストリは問わない(UbuntuだろうがCentOSだろうが可)
#準備
- SystemRescueCDのISOをDLする
- VMの不必要なデータ(yumやaptのキャッシュなど)をクリーニングしておく
- 特に古くて使っていないカーネルは削除推奨
- VMをシャットダウンする
作業開始までの手順
- SystemRescueCDのISOをVMの仮想CDにマウントする
- VMを起動
- 起動中にキーボードロケールを選択する(作業に影響はないので任意)
ゼロクリアの作業
# fdisk -l
で該当パーティション確認後、
# zerofree -v /dev/mapper/該当するLV-ROOT
を実行してゼロクリアを行う。終わったらVMをシャットダウンする(落としたらCDのマウント解除を忘れずに!)。
圧縮
- 仮想ディスクマネージャを起動し、圧縮するディスクを選択する。
- ディスクの情報が現れるので、VDIのパスかUUIDのどちらかをコピーする。
- コマンドプロンプトを立ち上げ、VirtualBoxのディレクトリ(Windows Hostである場合、デフォルトはC:\Program files\Oracle\VirtualBox\)に入る。
- 以下のコマンドを入力して圧縮開始。
> vboxmanage modifyhd --compact UUIDまたはパス
- 実行後、ディスク容量が減っているかを確認しておしまい。
おわりに(おまけ)
FreeBSD+ZFSの組み合わせでゼロクリを試みようとしたのですが、CoWの関係から不可能なようです。。。。
(2017/10/10追記)
公式のフォーラムでも今年5月に(改めて)議論があり、できないとの結論が出ていた模様です。
https://forums.freebsd.org/threads/60737/