Vagrantでマウントエラーがでたので、解消してみた

Web関連
スポンサーリンク

はじめに

Vagrant+VirtualBoxにおける仮想マシン(VM)立ち上げる際に、
起動 vagrant up を実行すると共有フォルダでマウントエラーが発生しました。

開発状況(Version)

macOS Big Sur
Virtual Box 6.1.26
Vagrant 2.0.1
centOS 7.3

※ココから先のシェル名の「Bash」となっている箇所は全て「zsh」です。
ブログのコードエディターの言語設定に「zsh」がないため、「Bash」にしています。

解決方法

結論からいうと、
vagrant-vbguest というプラグインをインストールすることにより、
起動時$ vagrant upに自動的にホスト(VirtualBox)のバージョンに合わせて、ゲスト(Guest Additions)のバージョンを更新してくれるらしい。

$ vagrant plugin install vagrant-vbguest

全体の流れ

エラーまでの流れ

まず、vagrant up した際に下記のようなエラーが画面が表示されます。

% vagrant up    
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'bento/centos-7.3' version '201708.22.0' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2201.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2201 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2201
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
  
           -----抜粋-----

Mounting Virtualbox Guest Additions ISO to: /mnt
mount: /dev/loop0 is write-protected, mounting read-only
Installing Virtualbox Guest Additions 6.1.26 - guest version is 6.1.16
Verifying archive integrity... All good.
Uncompressing VirtualBox 6.1.26 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 6.1.16 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Building the modules for kernel 
3.10.0-514.26.2.el7.x86_64.
VirtualBox Guest Additions: Running kernel modules will not be replaced until 
the system is restarted
An error occurred during installation of VirtualBox Guest Additions 6.1.26. Some functionality may not work as intended.
In most cases it is OK that the "Window System drivers" installation failed.
Redirecting to /bin/systemctl start  vboxadd.service
Redirecting to /bin/systemctl start  vboxadd-service.service
Unmounting Virtualbox Guest Additions ISO from: /mnt
Got different reports about installed GuestAdditions version:
Virtualbox on your host claims:   6.1.16
VBoxService inside the vm claims: 6.1.26
Going on, assuming VBoxService is correct...
Got different reports about installed GuestAdditions version:
Virtualbox on your host claims:   6.1.16
VBoxService inside the vm claims: 6.1.26
Going on, assuming VBoxService is correct...
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
  
                            -----抜粋-----

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,_netdev vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: Invalid argument

しかしながら、vagrant status でステータスを確認すると、 running になっているため、
Virtual Box は起動しています。

% vagrant status
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

vagrant ssh で接続も可能です。

% vagrant ssh   
Last login: Thu Apr  7 15:22:40 2022 from 10.0.2.2

しかしながら、共有フォルダにマウントできていません。

エラー理由

記事を色々と漁っていると、同様な実証があったので、下記に添付します。

ホスト⇔ゲスト間のフォルダ共有機能はGuest Additionsが提供していますが
ホスト(VirtualBox)とゲスト(Guest Additions)でバージョン不一致があるとマウントエラーが起きるようです。
[参考URL]:https://qiita.com/ozawan/items/9751dcfd9bd4c470cd82

まとめると、

  • VirtualBoxには、VirtualBox Guest Addition がインストールされている。
    ⇒ VirtualBox Guest Addition = ゲスト(Guest Additions)
  • 自分の環境にあるホスト(VirtualBox)には、デフォルトの設定により仮想マシン(VM)起動時にバージョンが古ければ自動更新される。

その為、起動時にホスト(VirtualBox)のみバージョン更新されるので、
ホスト(VirtualBox)のバージョンとホスト(VirtualBox)にインストールされているゲスト(Guest Additions)のバージョン間に差異が生じバージョン不一致によるマウントエラー
が起きているらしい。

エラー解消までの流れ

vagrant-vbguest というプラグインをインストールすることにより、
起動時 vagrant upに自動的にホスト(VirtualBox)のバージョンに合わせて、ゲスト(Guest Additions)のバージョンを更新してくれるらしい。

$ vagrant plugin install vagrant-vbguest
% vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching vagrant-vbguest-0.30.0.gem
Successfully uninstalled vagrant-vbguest-0.21.0
Installed the plugin 'vagrant-vbguest (0.30.0)'!

↑無事にインストールされました。

% vagrant up                            
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'bento/centos-7.3' version '201708.22.0' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2201.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2201 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2201
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
[default] GuestAdditions 6.1.26 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...

             -----抜粋-----

==> default: Detected mount owner ID within mount options. (uid: 1000 guestpath: /home/vagrant/docks)
==> default: Detected mount group ID within mount options. (gid: 1000 guestpath: /home/vagrant/docks)
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

ホスト(VirtualBox)ゲスト(Guest Additions)バージョン同等になりエラーが解消されました。

最後に

Vagrant up /sshはできているのに、うまくマウントせずに、だいぶ環境構築で時間を要しました。。。
まさか、バージョンの差異によるエラーとは。参考記事を書いていた先人達には、感謝です!

参考記事

コメント