2016/04/04 (月)

VirtualBoxの仮想ディスク容量を圧縮する方法

こんにちは。相馬です。

突然ですが、VirtualBox便利ですね。
弊社でも開発用サーバや社内システムでVirtualBoxを利用しています。

先日、VirtualBoxの仮想マシンを別マシンにクローンしようと思い、操作したところ表示されたのは、「残り時間 4時間」。。。
そんなに容量あるかな?と思いゲストOSでdfコマンド使ってみると、113GB程度しか使っていません。
が、ホストOSで仮想ディスクファイルの容量を確認すると439GB。。。

仮想ディスクを「可変サイズのストレージ」にすると、一度使用した領域は確保されたままとなり、ゲストOSでファイルを削除しても仮想ディスクの容量は減らないようです。。。
このままだとクローンやバックアップ時に効率が悪いので、仮想ディスク容量の圧縮にチャレンジしました。

VirtualBoxで仮想ディスク容量を圧縮するためには、
1.ゲストOSで仮想ディスクの未使用領域にゼロを書き込み
2.ホストOSで仮想ディスクを圧縮
という手順が必要です。

※以下はあくまで、私の環境で行った手順です。ddコマンドは、間違うとデータが上書きされてしまう危険性がありますので、お気をつけ下さい。

環境は以下の通りです。
  • ホストOS:Windows7
  • ゲストOS:Ubuntu14.04

まず、ゲストOSで仮想ディスクの未使用領域にゼロを書き込みます。
ゲストOS(Ubuntu)で、ddコマンドを使います。

$ sudo dd if=/dev/zero of=zero bs=4k; \rm zero

コマンドの細かい解説は省きますが、これで未使用領域にゼロが書き込まれます。
ディスクの容量によって時間がかかります。。。
実行終了後、ゲストOSは一旦シャットダウンしておきます。

続いて、ホストOSで仮想ディスクを圧縮します。
まず、対象の仮想ディスクのuuidを調べます。
ホストOS(Windows7)で、VirtualBoxインストール先に移動して以下のコマンドを実行します。

VBoxManage.exe list hdds

表示される中から、対象の仮想ディスクのuuidを控えておきます。
調べたuuidでディスクを指定して、圧縮します。

VBoxManage.exe modifyhd [仮想ディスクのuuid] --compact

こちらも、ディスクの容量によって時間がかかります。。。

実行終了後、ホストOSで仮想ディスクの容量を確認すると、、、「119GB」!!
無事圧縮出来ました!

投稿者: