電卓片手に

Vagrant のゲストOSで dist-upgrade すると shared_folder のマウントが失敗する

投稿日:

Vagrant 便利で色々いじってるんですが、ゲスト OS で apt-get dist-upgrade して、 再起動すると、共有ファイルとしてマウントしていた /vagrant がマウントでこけてしまいます。 この解決方法についてメモ。

現象と原因

端末で:

$ vagrant up
 ...
[default] Mounting shared folders...
[default] -- /vagrant # ←マウントできてる
$ vagrant ssh # ゲストOSにログイン
$ sudo apt-get update
 ...
$ sudo apt-get dist-upgrade # カーネル更新
 ...
   # grub 入れなくても大丈夫
 ...
$ exit # ゲストOS抜ける
$ vagrant reload
[default] Attempting graceful shutdown of VM...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant # ↓ 失敗してる
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` /vagrant /vagrant

# 試しに手動でマウントしてみる
$ vagrant ssh
$ sudo mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` /vagrant /vagrant
/sbin/mount.vboxsf: mounting failed with the error: No such device

原因は、カーネルアップデートしたことでファイル共有するためのカーネルモジュール?が うまく機能しなくなっているようです。

解決策

一番直接的な方法としては、上記の状態から virtualbox-ose-guest-utils と カーネルヘッダをインストールしてしまうことです。

今回は自動で更新してくれる Vagrant プラグイン vagrant-vbguest を使ってみます。

先述の端末の状態から:

$ vagrant plugin install vagrant-vbguest
$ vagrant reload
 ...
[default] Mounting shared folders...
[default] -- /vagrant
$ vagrant ssh -c 'ls -a /vagrant'
.
..
.vagrant
Vagrantfile
Vagrantfile~

うまくいっていることがわかると思います。

以上です。

そもそも共有フォルダ使わないので、機能自体を無効化することになりそうですが。