Vagrantが立ち上がらなくなったので復旧方法とboxの作り方書いておく

2017-09-13

Vagrantは便利で長年使わせてもらっていますが、時々VMが壊れて立ち上がらなくなる生き物です。

Your VM has become “inaccessible.” Unfortunately,
this is a critical error with VirtualBox that Vagrant can not cleanly recover from. Please open VirtualBox
and clear out your inaccessible virtual machines or find a way to fix them.

これ。

Vagrantは作って壊してが簡単に出来る点を強みとしているので、少々壊れることは想定内なのかもしれませんが、めんどくさいのでそのまま普通にVMとしてあれこれインストールして使ってたら壊れてうわああああああぁぁあぁってなったので、対処法とbox(バックアップ用)の作り方を書いておこうと思います。

※VirtualBoxを愛用しているので、VirtualBoxでのやり方のみ。

vagrantの復旧

復旧方法は二つ。

一つ目はVMを破棄してしまうこと。

vagrant statusでinaccessibleになっているVMを確認。
コマンドを打つと「vm_name inaccessible (virtualbox)」みたいな感じでinaccessibleになっているVMの名前が表示される。
VirtualBoxを起動して対象のVMを削除。

簡単ですが、いきなりこれをやるのは非推奨です。理由は、対象VMに入れた色々なものが消滅するから。

そんな使い方するなという意見もあると思いますが、多分皆やってる。

二つ目は「VirtualBox VMs」の中にあるvboxのファイル名を確認し、問題があったら修正すること。

VirtualBox VMsの中には、vboxを保存しているディレクトリが並んでいるので、その中から、対象のディレクトリに入る。
「vmdir_vm_name_1111111111_11111.vbox」みたいな名前のvboxファイルを確認。
これが「vmdir_vm_name_1111111111_11111.vbox-temp」のように「-temp」が付いてた場合、それが原因の可能性大。
「-temp」を削って再度vagrant up。

「-temp」がついてしまう原因は、ちゃんとvagrant haltしないで適当に落とすとそうなることがあるっぽい。
大体これで直ってますが、治らなかったら諦めて一つ目の方法「VM削除」を行いましょう。

boxの作り方

まず、MACアドレスの重複を回避するため、VM側で以下のコマンドを実行。

70-persistent-net.rulesは、NICのポートにおけるマッピングを制御しているみたいですが、細かいことは省きます。とりあえず今回はboxさえ作れればOK。

で、vagrant packageのコマンドを叩くだけ。package.boxがVagrantfileと同じディレクトリに生成されます。

boxの使い方

作ったboxには、作った時の環境が丸々残っています。
パッケージを色々インストールしたとか、環境設定をいじった際にはboxを作っておくとバックアップになります。
初期設定的な部分はvagrantfileに書き込んでおいた方が良い気もしますが、boxの使いまわしもそれはそれで便利です。

作ったboxの使い方は、初期に追加するboxと同じ。
vagrant box add box_name package.box
で追加。

後は普通のvagrant initと同じ。vagrant init box_nameでvagrantfileが生成される。

Vagrantfileを修正して、vagrant upで利用。