11. VirtualBox - 仮想ディスクを圧縮する

 
11.1 能書き
11.2 CentOS の仮想ディスクを圧縮する

11.1 能書き

 ゲスト側で、やたらファイルを作成したり削除したりしていてやたらディスクサイズが大きくなってしまったのです。  仮想ディスクを可変サイズで定義しているので圧縮できるはずだと調べたらどうもできそうなのでやってみます。  本項は、下記のサイトを参考にさせていただきました。
VirtualBoxの仮想ディスク容量を圧縮する方法

11.2 CentOS の仮想ディスクを圧縮する

 参考サイトは、ゲストが Windows の場合の記載もありますが、下記の記述はホストが Windows、ゲストが CentOS での操作です。  ゲストの空き領域をクリアします。(参考サイトでは『仮想ディスクの空き領域を 0 で埋める』と表現しています)  ゲストを起動し、root ユーザで以下を実行します。

> dd if=/dev/zero of=zero bs=4k; ¥rm zero
 上記『ddコマンドを使って、ゼロ埋めされたファイルを作成します。以下のコマンドはディスク容量いっぱいまで/zeroファイルを作成し、その後/zeroファイルを削除するというものです。』というのですが、どうも1行でやるのはうまくいかなかったようなので、分けて行うことにしました。

> dd if=/dev/zero of=./zero bs=4k
> rm zero
 1行目のコマンドはディスクがいっぱいになった時点でエラー終了します。  いったんゲストをすべてシャットダウンします。  ホストでゲストのディスクの UUID を取得して、控えておきます。  (VBoxManage.exe のパスはホストの環境によって異なりますのでご注意下さい。)

C:¥Program Files¥Oracle¥VirtualBox>VBoxManage.exe list hdds
 VBoxManageコマンドで仮想ディスクを圧縮します。

C:¥Program Files¥Oracle¥VirtualBox>VBoxManage.exe modifyhd UUID --compact
 上記コマンドもゲスト上での dd コマンドがうまく動作していなかったせいか圧縮できませんでした。  結局、ディスクファイルを直接指定することとしました。

C:¥Program Files¥Oracle¥VirtualBox>VBoxManage.exe modifyhd 仮想ディスクのあるフォルダ名/仮想ディスク名.vdi --compact
 ディスクサイズやスペックにもよりますが、わたしの場合、77GB のスペースを 14GB に圧縮するのに 30 分以上かかりました。