Vagrant Error: Unable to Mount VirtualBox Shared Folders (Guest Additions, vboxsf)

Vagrant Error: Unable to Mount VirtualBox Shared Folders (Guest Additions, vboxsf)

问题

我在 Windows10 上安装了 Vagrant,所以我可以在虚拟机中创建个人本地开发环境。我读到的关于 Vagrant 的所有内容都说我什至可以启动多个系统并使用 NAT 端口转发测试它们之间的通信。但首先,我只想创建一个开发环境虚拟机,然后再对它的其余部分做太多。

我根据这个 SitePoint 教程安装了 VirtualBox、Vagrant、PuTTy 和 PuTTYGen:https://www.sitepoint.com/getting-started-vagrant-windows/。接下来我在 C: 驱动器上创建了一个 vagrant 项目文件夹,做了 vagrant init,删除了 Vagrantfile,最后,vagrant init ubuntu/trusty64。然后我做了 vagrant up,但过程失败并出现错误:

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:

: No such file or directory

这是我的 Windows 命令行的屏幕截图:

这里是文字版:

C:\vagrant\sitepoint-test-2017-02-05>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: A newer version of the box 'ubuntu/trusty64' is available! You currently
==> default: have version '20160602.0.0'. The latest is version '20170202.0.0'. Run
==> default: `vagrant box update` to update.
==> default: Setting the name of the VM: sitepoint-test-2017-02-05_default_1486399403587_55255
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (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:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Remote connection disconnect. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => C:/vagrant/sitepoint-test-2017-02-05
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:

: No such file or directory

我的设置

OS: Microsoft Windows [Version 10.0.14393]
VirtualBox Version: 4.3.10 r93012
GuestAdditions Version: ???
Vagrant Version: 1.9.1 (Latest)
PuTTy Version: 0.67
PuTTYGen Version: 0.67

已安装插件和扩展程序

Vagrant:
- vagrant-share (1.1.6, system)
- vagrant-vbguest (0.13.0)

我已经试过了

This post 在我的研究中似乎是最有前途的。

不幸的是,none 提供的解决方案和提供的任何链接都没有解决问题。我已经尝试了很多东西,但我不是系统管理员(我猜这是解决此问题所需的技能)。尤其令人不安的是,2013/2014 年的许多 "solutions" 最近都表明不再有效。这些解决方案讨论了一些与符号链接不工作有关的事情,安装像 vagrant-vbguest 这样的插件,以及一些关于 vbox 添加不匹配的事情。我真的不明白所有这些,但我尽力了。这是我已经尝试但尚未解决的方法:

  1. vagrant plugin install vagrant-vbguest。 Vagrant 显示插件已安装,但我在 vagrant up.

  2. 上遇到相同的错误
  3. 我在研究此问题时阅读的未提供有效解决方案的链接列表。

我的问题

  1. 我怀疑问题出在 VirtualBox,而不是 Vagrant。这是真的吗?

  2. 我该如何解决这个问题才能继续教程?

  3. 从 2014 年左右开始,在 Stack Overflow 上回答的 Vagrant 问题似乎急剧下降。这是什么原因? Vagrant/VirtualBox 不再被认为是 "best practice" 了吗?有没有更好的解决方案让用户忽略 Vagrant 问题?

再次声明,我不是系统管理员,但我精通技术,可以遵循技术指导。

可能有多种原因:

  1. 加客版本与VirtualBox版本不匹配,可以通过运行 vagrant plugin install vagrant-vbguest
  2. 更新加客版本
  3. 您在 Windows 上遇到了带有 NFS 的 vagrant 错误:应该已修复,因此可以尝试更新到最新版本的 Vagrant 和 VirtualBox
  4. 在此 github 问题中 https://github.com/fideloper/Vaprobash/issues/92, there is two thing that you can test : use the winnfsd plugin (https://github.com/winnfsd/vagrant-winnfsd) 或尝试配置没有 NFS 的默认装载

我遇到了同样的问题,只是来宾添加不是 up-to-date ...

UDPATE : Windows 上带有 NFS 的 Vagrant 错误(第 2 点)已在 5.1.18 版中修复,re-appears 在 5.1 版中修复.20 并在 5.2 版中再次修复。

Guest Additions 与 VirtualBox 的版本不兼容。自动更新 VirtualBox Guest Additions 将解决可能相关的问题:

vagrant plugin install vagrant-vbguest

我在这些堆栈中遇到了这个问题:

  • Windows 10
  • 甲骨文 VirtualBox 5.1.16
  • Vagrant 1.9.2
  • config.vm.box = "hashicorp/precise64"

You can downgrade VirtualBox or edit the line in the file:

On my setup this was Line 206 of:

C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.9.2\lib\vagrant\util\platform.rb

on my host machine.

我这样做了并且在 Windows 10 上运行良好!我想添加我对第 206 行所做的操作:

编辑前:"\\?\" + path.gsub("/", "\")

编辑后:path.gsub("/", "\")

vagrant plugin install vagrant-vbguest

这对我不起作用,它似乎与 vagrant 1.9.2 不兼容,我卸载了最新版本的 virtual box (5.1.16) 并使用最新版本的 vagrant 1.9 安装了 5.1.12 版本.2 和宅基地,它对我有用。

从 Virtual Box 5.1.16 降级到 Virtual Box 5.1.14 工作正常。

此问题已在 VirtualBox 5.1.18 中解决。

我正在使用 Vagrant 1.9.4 和 VirtualBox 5.1.20。这里没有解决方案帮助我。

我终于通过禁用来宾添加的自动更新解决了这个问题:

Vagrant.configure("2") do |config|
    config.vbguest.auto_update = false
    [...]
end

这与其说是解决方案,不如说是一种变通方法。我仍然不太清楚实际问题是什么,但我认为它与此有关:https://www.virtualbox.org/ticket/16670

Virtualbox 5.1.20 也有回归

流浪问题: https://github.com/mitchellh/vagrant/issues/8502

Virtualbox 问题: https://www.virtualbox.org/ticket/16670#comment:4

目前的修复是将角色恢复到它工作的 Virtualbox 5.1.18。

我有类似的问题,检查 header 如果它不匹配然后 运行 下面的命令

CentOS: sudo yum update && sudo yum -y install kernel-headers kernel-devel

流浪者重新加载

对我有用。

这是 Vbox 中的错误。有一个解决方案可以解决。

登录Vbox guestos:默认密码为(vagrant/vagrant)

su
ln -sf /opt/VBoxGuestAdditions-5.1.20/lib/VBoxGuestAdditions/mount.vboxsf /sbin/mount.vboxsf
mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

关机

运行 从本地机器输入 cmd 提示符:

vagrant up

它会起作用的。

总结

synced/shared 文件夹突然不再工作的问题是,没有加载 VirtualBox Guest 添加内核模块。

问题与VirtualBox版本没有直接关系!过去可能是这种情况,但以下解释涵盖了大约 95% 的此问题。


说明

这主要是由于linux内核的自动更新造成的,例如虚拟机中有cronapt 运行。

如果内核有新版本,虚拟机重启后无法重新启动来宾添加的dkms模块。 服务文件/etc/init.d/virtualbox-guest-utils检查

中是否有内核模块
/lib/modules/`uname -r`

vboxguestvboxsf 的文件夹。

让来宾添加的初始设置的内核版本为:1.2.3

更新后的内核版本为:1.2.4

uname -r 将导致 1.2.4,而 dkms 模块安装了内核版本 1.2.3。 这将导致 virtualbox 来宾添加服务中止执行并失败并显示类似 modprobe xxxx failed.....

的错误消息

解决方案

我们需要做的是,安装内核的头文件和新的内核版本,这样用于 virtualbox guest 添加的 dkms 模块可以自动重建。

幸运的是有一个元包,它让我们安装了最新版本的内核头文件。

它似乎在不同的 linux 口味中被命名为不同的。这是其中的一小部分。

Debian

sudo apt install linux-headers-amd64

Ubuntu

sudo apt install linux-headers-generic

CentOS(未测试)

感谢@Jayen Chondigara

sudo yum -y install kernel-headers kernel-devel