2010年12月3日金曜日

VirtualBoxで仮想ディスクのサイズを減らしてみた(1)

VirtualBoxの仮想ディスクは、容量を減らすために「可変サイズのストレージ」を選択していても、そのファイルサイズがゲストOSが実際に使用している容量以上のサイズになることがあります。

これは、ゲストOS上で仮想ディスクに一度作成したファイルを削除した場合、ゲストOSはファイルを削除したことで空き容量が増えたと報告しますが、仮想ディスクにはそのファイルのデータが残ったままになっているからです。

結果として、ゲストOS上でファイルの作成と削除を繰り返すと、ゲストOSが実際に使用している容量とは無関係に、仮想ディスクが最大サイズまで消費され続けるようなことになりかねません。

この問題を解決するために、仮想ディスクに記録されている削除されたファイルのデータ部分をゼロクリアで初期化してから、VirtualBoxのVBoxManageツールを使って仮想ディスクのファイルサイズを減らす方法がTipsとして知られています。

上記の話はVirtualBoxのマニュアルにも記載されているので、作業の手順自体は以前から知っていたのですが、実行する必要には迫られなかったので実際に試してみたことはありませんでした。

しかし最近になって、どこぞのVPSのバックアップの際にバックアップファイルのサイズを減らす必要が発生するんじゃないかなーという予感が何となくしてきた(予感なので根拠は特にありません)ので、その練習代わりにこの作業を試してみることにしました。

尚、今回作業を実行した環境は、

  • ホストOS:Mac OS X 10.6.5
  • ゲストOS:Ubuntu 10.10 Desktkop Edition
  • 仮想化ソフトウェア:Oracle VM VirtualBox for Mac OS X Ver.3.2.12 r68302

という構成です。

ホストOSはWindowsであっても、作業手順はあまり変わらないと思いますが、ゲストOSはUbuntuのバージョンが変わっただけでも手順が変わってくることがありますので、実際に試してみようと考えていらっしゃる方はご注意ください。

仮想化ソフトウェアであるVirtualBoxの方は、バージョンが多少違っていても問題ありません……と言いたいところなのですが、VBoxManageツールのコマンドは結構コロコロ変わりますので、バージョンが異なる場合はマニュアルで確認しておくことをオススメします。

実際の作業はイカの通りです。

  1. 最初にホストOSのハードディスクに必要な空き容量の量を確認します。Oracle VM VirtualBoxを起動したら、左のペインで対象の仮想マシンを選択し、画面左上の黄色い歯車のアイコンの「設定(S)」をクリックします。
  2. 表示されたウィンドウの「ストレージ」タブを選択し、左側の「ストレージ ツリー(S)」の中にある、円盤が重なったアイコンのハードディスクを選択します。
  3. 右側の「情報」-「実際のサイズ」を確認します。今回の作業中、一時的に最大で「実際のサイズ」の2倍程度の空き領域を消費する可能性がありますので、VirtualBoxを起動しているホストのハードディスクの空き容量が、この「実際のサイズ」の2倍以上あることを確認してください。
  4. 確認が終わったら「キャンセル」ボタンでダイアログを閉じます。
  5. 作業が失敗した場合に備えて、念のために仮想ハードディスクのスナップショットを取っておきます。復元しても困らない最新のスナップショットを既に作成済みの場合は、そのスナップショットに復元してから手順10.に進んでください。
  6. 左のペインで対象の仮想マシンを選択し、右のペインで「スナップショット(S)」のタブを選択します。
  7. タブの中の「最新の状態」を選択してからカメラのマークの「スナップショット作成(S)」ボタンをクリックします。
  8. 「スナップショットの名前(N)」と「スナップショットの説明(D)」に適当な内容を入力して「OK」ボタンをクリックしてください。
  9. 「最新の状態」の上に前の手順で入力した名前の項目が現れていることを確認してください。ここで作成したスナップショットはこれからの作業のバックアップ用ですので、最終的には削除されます。
  10. 仮想マシンを起動して、管理者権限のあるユーザーでログインします。
  11. 必須ではありませんが、ゲストOSをアップデートして最新の状態にしておくことをオススメします。カーネルがアップデートされるようであれば、VirtualBoxのGuest Additionsも入れ直しておいた方がいいかもしれません。終わったらゲストOSを一度再起動します。
  12. ゲストOSの /tmp 等にある不要なテンポラリファイルは自動的に削除されているはずですが、他に不要な一時ファイルやダウンロードファイル等がある場合は適宜手動で削除しておきます。
  13. この段階で、ゲストOSにzerofreeというツールをあらかじめ導入しておきます。メニューから「アプリケーション」-「アクセサリ」-「端末」を起動して、
    $ sudo apt-get zerofree
    を実行してください。(もちろん「システム」-「システム管理」-「Synaptic パッケージ・マネージャ」からでも構いません。)
  14. 14. zerofreeの導入が終わったら、ゲストOSで「端末」から下記のコマンドを実行して不要なファイルを減らしておきます。この辺りは趣味の問題もありますし、必須ではありませんのでお好みでどうぞ。
    $ sudo apt-get autoremove
    $ sudo apt-get clean

続く

0 件のコメント:

コメントを投稿