Vagrantで共有フォルダのマウントに失敗するときの対処方法(原因がGuestAdditionsでは無いとき)

vagrant.pngのサムネイル画像


いくつかVMを動かしていて一つだけ上手く動かない。
どうやら共有フォルダをマウントするときに失敗している様子。

manager: /vagrant => E:/project/ansible_manager
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: Protocol error

ログを見てわかるとおり、WindowsのフォルダをゲストのCentOSにマウントしたい。
Vagrantfileは以下の様に設定されていて、他のVMではきちんと動いているのになぜかこれだけ動かない。。

manager.vm.synced_folder "E:\\project\\ansible_manager", "/vagrant", owner: "vagrant", group: "vagrant", type: "virtualbox"





検索して出てくるのはGuestAdditionsの話ばかり

検索して出てくる原因は、

GuestAdditionsのバージョンがカーネルと合ってない

というもので、この解決には「vbguest」というVagrantプラグインをインストールすればOKです。

$ vagrant plugin install vagrant-vbguest

うん、入ってます。
Vagrantの起動ログでもこうなってます。

[manager] GuestAdditions 6.0.0 running --- OK.

じゃあなんだ?


結論:共有フォルダのパスを相対パスにしたらいけた

エラーログの中のこれ。

/sbin/mount.vboxsf: mounting failed with the error: Protocol error

指定したパスが間違ってるとか、変な文字が入っている場合に起きることが多いそうです。
Windowsのフォルダは「\」を「\\」と設定することで設定できるはずで、他のVMでは同じ設定でいけてるのになぜかこれだけ。仕方ないので、絶対パスでしていするのを止めて、相対パスで書いたらいけました。

manager.vm.synced_folder "./", "/vagrant"

それでいいのか……


原因はわからずじまいでしたが、それでいいよって言われたので良いことにしておきます。。


実はこれでもマウントは出来てた

すごい古い情報(まだVirtualBoxのGUIをみんながよく見てた頃)で、

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

で失敗するなら、

mount.vboxsf -o uid=1000,gid=1000 vagrant /vagrant

ってすればいいよっていう情報があって、確かにそれを打ち込んだらいけました……でも、起動するごとに毎回打ち込むわけには行かないんでね……原因を探るとすれば、この辺にヒントがありそうです。探らないけど。



(……結局、ホストがWindowsなのがダメなんじゃねという気はする。。)