guest側はdebianを想定
2017-11-28 zerofreeより簡単な方法があったので追記
空いてるスペースに0を書く
dd if=/dev/zero of=/tmp/bigemptyfile bs=4096k
rm /tmp/bigemptyfile
compaction
$ VBoxManage modifyhd /path/to/disk.vdi --compact
formatがvmdk等compact対応していないものの場合は、clonehdすればよい
古い方法
0. バックアップ
なくなったら困るファイルをバックアップしておく。
以下の作業は自己責任で
1. guest側でzerofreeをインストール
$ sudo apt-get install zerofree
2. guest側でzerofreeを実行
ファイルシステムをread onlyにしないと実行できないので、一旦reboot〜セーフモードで起動してremountしてから実行する
# mount -n -o remount,ro -t ext3 /dev/sda1 /
# zerofree /dev/sda1
/dev/sda1
の部分は環境に応じて適宜変更。
busyと言われる場合は、rsyslogd
とかdhclient
が起動してる可能性がある。手動でkillすればよい。
zerofreeは結構時間かかるのでしばらく待つ。
終わったら一旦シャットダウンする。
3. host側でVBoxManageを実行
$ VBoxManage modifyhd /path/to/disk.vdi --compact
手元の環境では21Gのvdiが14Gになった。まあまあ効果ある。