boot2dockerの仮想マシンディスクを外部ディスクに移動する

開発 hironemuhironemu

ここ最近、Macのboot2dockerを使っているのですが、MacBook Airのディスクを圧迫し始めて、なかなかつらい状況になってきました。そこで、boot2dockerが使っている仮想マシンディスクなどを外部のディスク(USBメモリ)に移動する事にしました。

移動する前のファイルの構成は以下の様になっていました。

  • ~/.boot2docker (boot2dockerが使う仮想マシンディスクのデフォルトの保存先)
    • boot2docker-vm.vmdk (10GBくらい)
    • boot2docker.iso (24MBくらい)
  • ~/VirtualBox\ VMs/boot2docker-vm (boot2dockerのVirtualBoxの仮想マシン)

boot2dockerを停止

boot2dockerが起動している場合、停止しておきます。

$ boot2docker stop

VirtualBoxに登録されている仮想マシンを除去

最初に、boot2docker-vmの除去しておきます。(ファイルの削除は行わずに)

仮想マシンディレクトリを外部ディスクに移動

~/VirtualBox\ VMs/boot2docker-vmを外部ディスク(外部ディスクは/Volumes/vmにマウントしている前提で話を進めます)に移動します。

$ mkdir /Volumes/vm/virtualbox
$ mv ~/VirtualBox\ VMs/boot2docker-vm /Volumes/vm/virtualbox

仮想マシンディスクとISOファイルを外部ディスクに移動

$ mkdir /Volumes/vm/boot2docker
$ mv ~/.boot2docker/boot2docker-vm.vmdk  ~/.boot2docker/boot2docker.iso /Volumes/vm/boot2docker

boot2dockerの設定ファイルを追加

仮想マシンディスクとISOの場所を以下のようにprofileファイルに記述します。(この変更、今回のように途中から場所を移動する場合(boot2docker initをしたあと)にはあまり意味がなさそうですが、忘れないように書いておきます。)

vim ~/.boot2docker/profile
VM_DISK=/Volumes/vm/boot2docker/boot2docker-vm.vmdk
BOOT2DOCKER_ISO=/Volumes/vm/boot2docker/boot2docker.iso

boot2docker-vmをVirtualBoxに追加し直す

移動したboot2docker-vmをVirtualBoxに追加し直します。メニューの「仮想マシン」>「追加」から移動した仮想マシンディレクトリのvboxファイル(/Volumes/vm/virtualbox/boot2docker-vm/boot2docker-vm.vbox)を指定します。

boot2docker-vmの設定変更

VirtualBoxのboot2docker-vmの設定画面の「ストレージ」を開くと以下のようにエラーとなっています。

ISOファイルは上記画像の矢印の箇所から、移動先のISOファイル(/Volumes/vm/boot2docker/boot2docker.iso)を選択し直します。仮想マシンディスク(boot2docker-vm.vmdk)もISOファイルの様に変更すればいいのですが、「Cannot register the hard disk … UUID … already exists.」というエラーになってしまいます。

そこで以下のコマンドを実行してUUIDを変更します。

$ VBoxManage internalcommands sethduuid /Volumes/vm/boot2docker/boot2docker-vm.vmdk
UUID changed to: d246c26a-ca03-4fc3-9de4-19f06d696ebe

※ 参考 – VirtualBoxで仮想diskのUUIDを変更する

その後、もう一度、boot2docker-vm.vmdkを選択しなおすとエラーなく変更することが出来ます。

boot2dockerを起動してみる。

$ boot2docker start
$ docker
$ export DOCKER_HOST=tcp://127.0.0.1:4243
$ docker version

バージョン情報まで正しく表示されれば完了です。

最後に

今回、使った外部ディスクは以下のUBSメモリになります。書き込み、読み込み速度が速そうなものを選んでみました。まだ、あまり使ってないのですが、MacBook Airのディスクを使っていた頃とそんなに変わらないのじゃないかと思います。しばらく使ってみて、問題があればまた報告したいと思います。

Adata Sandisk USBメモリ 64GB Extreme USB3.0 高速190MB/s 純正品 並行輸入品 パッケージ品 SDCZ80-064G
Adata Sandisk USBメモリ 64GB Extreme USB3.0 高速190MB/s 純正品 並行輸入品 パッケージ品 SDCZ80-064G
  <div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">
    posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 14.04.07
  </div>
</div>

<div class="amazlet-detail">
  A-DATA <br />売り上げランキング: 1,527
</div>

<div class="amazlet-sub-info" style="float: left;">
  <div class="amazlet-link" style="margin-top: 5px">
    <a href="http://www.amazon.co.jp/exec/obidos/ASIN/B007YXA5SI/hironemu-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a>
  </div>
</div>

あと、ちなみに、boot2docker initする前であれば、~/.boot2docker/profileにVM_DISK等を設定しておけば、今回の様な面倒な作業は必要無いのかも知れません。 [このスクリプト][3]を見る限りなんとなくそんな気がしますが、試していないので、試す機会があればまた追記しておきます。

Tags: