VirtualBoxで仮想マシンを最小サイズでエクスポートするテクニック

開発部のS.Kです。 VirtualBox仮想マシンをエクスポートするときの、ちょっとしたテクニックを紹介したいと思います。

概要

VirtualBox仮想マシンを作成して、色々なアプリケーションをインストールしてからエクスポートすると、他の環境でもすぐにその環境が使えて便利です。 しかし、OSをインストールしてアプリケーションも追加した後の仮想マシンをそのままエクスポートすると、かなり大きなファイルサイズになってしまいます。 場合によっては数十GBにもなり、流石にここまでファイルサイズが大きいと扱いにくて大変です。

ですがこれに少し工夫をすることで、エクスポートファイルのサイズを最小限にすることが出来ます。 今回は、そのテクニックを紹介します。

前提条件

仕組み

エクスポートファイルの中身の大半は、仮想ハードディスクです。 これをいかに小さく出来るかがポイントになります。 可変サイズの仮想ストレージを使っていると、保存領域が不足したときに、上限に達するまで少しずつ自動で拡張されていきます。 しかし、拡張は自動で行われても、縮小は自動で行われず、その後に空き領域が十分に出来てもそのままになります。 この状態でエクスポートすると、本当は使っていない領域の分までエクスポートされ、ファイルサイズが大きくなってしまいます。

縮小を行うコマンドは用意されており、手動で実行は出来ます。 ただし、これを使う場合は事前に未使用領域を0埋めしておく必要があります。 なので、まずは未使用領域を0埋めして、その後に仮想ストレージの縮小コマンドを実行することで、仮想ストレージを最小サイズにすることが出来ます。

手順

まずは、仮想マシンにログインして、空き領域を0埋めするために以下のコマンドを実行します。

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

これを実行すると、空き容量と同じサイズのzeroというファイルが作られ、直後に削除されます。 zeroは中身に全て0が入力されたバイナリデータです。 これを空き領域いっぱいに作成してから消すことで、空き領域全てに0が書き込まれます。

この後、仮想マシンをシャットダウンして、ホストマシンで以下のコマンドを実行します。

VBoxManage.exe modifyhd "仮想ストレージのuuid" --compact

実行すると、0で埋められた未使用領域を開放して、仮想ストレージのファイルサイズを縮小してくれます。 実行前後で仮想ストレージファイルを比べると、ファイルサイズが減っていることが分かると思います。

最後に、この状態で仮想マシンのエクスポートを行います。 問題なければ、最小限のサイズで仮想マシンがエクスポートされるはずです。

まとめ

仮想マシンを最小サイズでエクスポートする方法を紹介しました。 それほど大きな手間も掛からないため、仮想マシンをエクスポートするときは、常に行っても良いと思います。