VirtualBoxの可変サイズの仮想ストレージを詰めてコンパクトにする
VirtualBoxの仮想ストレージ*1.vdiファイルは、ゲストOS上で読み書きをしていると、次第にホストOSから見て無駄に容量を使います。
イメージとしては、ゲストOSから見てデフラグが発生している分、ホストOSからみて使用している容量の嵩が増える感じです。
手順
※全工程を完了するのに、かなり時間が掛かります。殆どはプログラムの処理完了の待ち時間ですが。
1. ゲストOS上で不要なデータを削除する。
2. ゲストOS上でデフラグをする。
Windows標準のデフラグだと、微妙に空白があいたりするので、http://kessels.biz/JkDefrag/ を使いました。
空白があいてても最適化されてればいいのか、データが詰まってるべきなのか、はっきりした事は分からないけど、たぶん詰まってたほうが良いはず。
jkDefragは名前を変えてMyDefragになっているみたいだけど、MyDefragはインストーラーでインストールするタイプで、面倒なのでやめました。
JkDefrag.exe -a 5
jkDefragをそのまま使っても、今回のデータを詰めるには意味がありません。
この引数を付けて起動すると、Force together モードとなって、データをなるべく近い位置に配置してくれます。
3. ゲストOS上で空き領域をゼロクリアする
SDelete - Windows Sysinternals | Microsoft Docs を使います。
sdelete.exe -c
sdeleteはコマンドラインから使います。
Usage: sdelete [-p passes] [-s] [-q]
sdelete [-p passes] [-z|-c] [drive letter]http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx
- c Zero free space (good for virtual disk optimization).
- p passes Specifies number of overwrite passes.
- s Recurse subdirectories.
- q Don't print errors (quiet).
- z Cleanse free space.
http://d.hatena.ne.jp/kaze-kaoru/20120915/1347675604
sdelete 1.51と1.6の間で、オプションが変わり、-c と -zが入れ替わったみたいです。
-c Cleanse free space.
-z Zero free space (good for virtual disk optimization).
確かにこのほうがしっくりきますね。
一応、sdeleteが何をするかを理解してから使うことをお勧めします。
4. ゲストOSをシャットダウンする。
5. ホストOSでvdiファイルをコンパクトにする。
VBoxManage modifyhd example.vdi --compact
ゲストOSが入ってる仮想HDDファイルに対して、このコマンドを使うと、無駄に使っている分を詰めてくれます。
沢山読み書きするような、インストール作業を何度かした後とかだと、数GBくらいは取り戻せることもありました。
不要なデータをもっとしっかりと削除する
VirtualBox: VDI を圧縮する - no disturbado では、かなり周到に不要なファイルを消してました。
しっかりとやりたい人は参考になるかもしれません。
参考
*1:イメージディスク