VirtualBox: mount.vboxsf: mounting failed with the error: No such device

VirtualBox: mount.vboxsf: mounting failed with the error: No such device

我正在使用 VirtualBox,OS X 作为主机,CentOS 在来宾 VM 上。

在 OS X 中,我创建了文件夹 myfolder,将其作为共享文件夹添加到 VM,打开了 VM,在 CentOS 中创建了文件夹 /home/user/myfolder 并键入:

sudo mount -t vboxsf myfolder /home/user/myfolder

并有输出:

/sbin/mount.vboxsf: mounting failed with the error: No such device

我做错了什么?

更新:

Guest Additions 已安装。

这已解决:

yum install gcc kernel-devel make

解决方法在这里:https://gist.github.com/larsar/1687725

我的共享 folder/clipboard 由于某种原因停止工作(可能是由于我的虚拟机上安装了补丁)。

sudo mount -t vboxsf Shared_Folder ~/SF/

给出以下结果:

VirtualBox: mount.vboxsf: mounting failed with the error: No such device

我的解决方案是停止 vboxadd 并在之后进行设置:

cd /opt/VBoxGuestAdditions-*/init  
sudo ./vboxadd setup

好吧,每个人都缺少一个基本事实。

mkdir /test - 在当前目录中创建子目录。

sudo mkdir /test - 在 Root 中创建目录。

因此,如果您的共享目录名称是 shared 并且您执行以下操作:

mkdir /test
sudo mount -t vboxsf shared /test

它生成此错误:

sbin/mount.vboxsf: mounting failed with the error: No such file or directory

因为目录放错了!是的,这就是这个错误所说的。错误不是说重新加载 VBOX 来宾选项。

但是如果你这样做:

sudo mkdir ~/test
sudo mount -t vboxsf shared ~/test

然后它工作正常。

令我惊讶的是,有多少人建议重新加载 Vbox 来宾添加来解决此错误或编写复杂的程序来解决在错误位置创建的目录。

我可以通过 运行 下面的命令

解决这个问题

modprobe -a vboxguest vboxsf vboxvideo

我也有一个工作系统突然停止工作并出现所述错误。

在我的 /lib/modules 中翻来覆去后,vboxvfs 模块似乎已不复存在。相反,modprobe vboxsf 是重新启动所需的咒语。

不确定这种变化是什么时候发生的,但它引起了我的注意。

除了 @Mats answer,我还添加了更多信息(它对我在 Debian 8 上有帮助)。

我的共享 folder/clipboard 由于某种原因停止工作(可能是由于我的虚拟机上安装了补丁)。

sudo mount -t vboxsf Shared_Folder ~/SF/

给我以下结果:

VirtualBox: mount.vboxsf: mounting failed with the error: No such device

我的解决方案是停止 vboxadd 并在之后进行设置:

cd /opt/VBoxGuestAdditions-*/init 
sudo ./vboxadd setup

此时,如果仍然出现以下错误:

No such device. The Guest Additions installation may have failed. The error has been logged in /var/log/vboxadd-install.log

您需要安装linux headers:

apt-get install linux-headers-$(uname -r)

然后您可以安装 Guest Additions:

sh /media/cdrom/VBoxLinuxAdditions.run --nox11

并通过以下方式重新启动您的 Linux:

reboot

然后你就可以挂载你的共享文件夹了!

mount -t vboxsf Shared_Folder ~/SF/

更多信息(法语),查看此 page

共享文件夹早些时候为我工作,但突然它停止工作(Virualbox - 主机是 Windows 7,来宾是 OpenSuSe)

modprobe -a vboxguest vboxsf vboxvideo

然后 mount -t vboxsf testsf /opt/tsf (testsf 是 Windows C 盘中的文件夹,添加到 Virtualbox 共享文件夹中 --- /opt/tsf 是 OpenSuse 中的文件夹

在 Ubuntu 上有效:

sudo apt-get install build-essential linux-headers-`uname -r` dkms

在两种情况下可以有 errors/incorrect 方法。检查这两个并找出答案

情景 1:

一旦你是 运行 VBoxLinuxAdditions.run 或 VBoxSolarisAdditions.pkg 或 VBoxWindowsAdditions.exe ,检查是否所有模块都正确安装。

1.1.a。在 VBoxLinuxAdditions 的情况下,如果
构建 VirtualBox Guest Additions 内核模块 失败,
检查 /var/log/vboxadd-install.log 中的日志文件。如果 错误 是由于 内核版本 更新您的内核并重新启动虚拟机。如果是 fedora,
1.1.b。 yum 更新内核*
1.1.c。 重启
1.2.如果没有失败,那么一切都很好。您已经拥有预期的内核版本

情景 2:

如果安装了 VBoxGuestAdditions(检查文件夹 /opt/VBoxGuestAdditions-* 是否存在 .... * 代表版本),您需要在安装前启动它。

2.1. cd /opt/VBoxGuestAdditions-*/init && ./vboxadd start

您需要指定您的 vm 用户的用户 ID 和组 ID 作为 mount 命令的选项。

2.2.a。获取用户的 uid 和 gid:
id -u <'user'>
id -g <'user'>
2.2.b。在 mount 命令的选项中设置 uid 和 gid:
mount -t vboxsf -o uid=x,gid=x shared_folder_name guest_folder

您正在使用共享文件夹,因此您需要在虚拟机中安装 VirtualBox Guest Additions 以支持该功能。

流浪汉

如果您使用 Vagrant (OS X: brew cask install vagrant), 运行:

vagrant plugin install vagrant-vbguest
vagrant vbguest

如果失败,请检查日志,例如

vagrant ssh -c "cat /var/log/vboxadd-install.log"

也许您只是缺少内核 header 个文件。

虚拟机

在 VM 内部,您应该安装 Guest Additions、内核 headers 并启动服务并仔细检查内核扩展名是否为 运行ning。

这取决于来宾操作系统,因此这里是简要步骤:

  1. 安装内核包含 headers(VBoxLinuxAdditions 需要)。

    • RHEL:sudo apt-get update && sudo apt-get install kernel-devel
    • 分OS: sudo yum update && sudo yum -y install kernel-headers kernel-devel
  2. 安装 Guest Additions(这取决于操作系统)。

    • Ubuntu: sudo apt-get -y install dkms build-essential linux-headers-$(uname -r) virtualbox-guest-additions-iso

      如果找不到,请按aptitude search virtualbox查看。

    • Debian: sudo apt-get -y install build-essential module-assistant virtualbox-ose-guest-utils

      如果找不到,请按dpkg -l | grep virtualbox查看。

    • 手动下载 iso file inside VM(例如 wget)并安装它,例如

      1. wget http://download.virtualbox.org/virtualbox/5.0.16/VBoxGuestAdditions_5.0.16.iso -P /tmp
      2. sudo mount -o loop /tmp/VBoxGuestAdditions_5.0.16.iso /mnt
      3. sudo sh -x /mnt/VBoxLinuxAdditions.run # --keep

        额外调试:cd ~/install && sh -x ./install.sh /mnt/VBoxLinuxAdditions.run

  3. 仔细检查内核扩展是否启动并且 运行ning:

    • sudo modprobe vboxsf
  4. Start/restart 服务:

    • 手动:sudo /opt/VBoxGuestAdditions*/init/vboxadd setup(添加sudo sh -x进行调试)
    • Debian:sudo /etc/init.d/vboxadd-service start
    • 软呢帽:sudo /etc/init.d/vboxdrv setup
    • 分OS: sudo service VBoxService start

构建主要的 Guest Additions 模块

如果上述方法不起作用,可以使用更复杂的步骤来修复它。这假设您已经安装了 VBoxGuestAdditions(如上所示)。

安装共享文件夹不起作用的最常见原因可能与构建失败的 Guest Additions 模块有关。如果在 /var/log/vboxadd-install.log 中出现以下错误:

The headers for the current running kernel were not found.

这意味着您没有安装内核源代码,或者找不到它们。

如果您已经按照上面的说明安装了它们,运行此命令:

$ sudo sh -x /opt/VBoxGuestAdditions-5.0.16/init/vboxadd setup 2>&1 | grep KERN
+ KERN_VER=2.6.32-573.18.1.el6.x86_64
+ KERN_DIR=/lib/modules/2.6.32-573.18.1.el6.x86_64/build

所以基本上 vboxadd 脚本期望您的内核源代码在以下目录中可用:

ls -la /lib/modules/$(uname -r)/build

检查内核目录是否存在(符号 link 指向现有文件夹)。如果不是,请将它们安装到正确的文件夹中(例如 /usr/src/kernels)。

所以vboxadd脚本可以进入你的内核源码目录和运行make kernelrelease,获取值并与你当前的内核版本进行比较

逻辑如下:

KERN_VER=`uname -r`
KERN_DIR="/lib/modules/$KERN_VER/build"
if [ -d "$KERN_DIR" ]; then
    KERN_REL=`make -sC $KERN_DIR --no-print-directory kernelrelease 2>/dev/null || true`
    if [ -z "$KERN_REL" -o "x$KERN_REL" = "x$KERN_VER" ]; then
        return 0
    fi
fi

如果内核版本与源不匹配,也许您需要升级 Linux 内核(以防源比您的内核更新)。

分OS

尝试:

vagrant plugin install vagrant-vbguest vagrant vbgues

如果不起作用,请为 CentOS 尝试以下手动步骤:

$ sudo yum update
$ sudo yum install kernel-$(uname -r) kernel-devel kernel-headers # or: reinstall
$ rpm -qf /lib/modules/$(uname -r)/build
kernel-2.6.32-573.18.1.el6.x86_64
$ ls -la /lib/modules/$(uname -r)/build
$ sudo reboot # and re-login
$ sudo ln -sv /usr/src/kernels/$(uname -r) /lib/modules/$(uname -r)/build
$ sudo /opt/VBoxGuestAdditions-*/init/vboxadd setup

这是对我有用的唯一解决方案:

安装 Vagrant 插件:vagrant-vbguest,它可以使您的 VirtualBox Guest Additions 保持最新。

vagrant plugin install vagrant-vbguest

来源:https://github.com/aidanns/vagrant-reload/issues/4#issuecomment-230134083

我的主机是 Windows10 我的 VM 来宾是 ubuntu 由 vagrant 构建。这对我有用:

vagrant plugin install vagrant-winnfsd

与 VirtualBox 5.0.16/rXXX 有同样的问题

已安装最新的 VirtualBox 5.0.18 和最新的 Vagrant 1.9.3,问题已解决。

我添加为 root 用户

/etc/rc.d/rc.local 
/root/mount-vboxsf.sh

然后

chmod +x /etc/rc.d/rc.local

和示例脚本 /root/mount-vboxsf.sh(设置您自己的 uid 和 gid 选项)

modprobe -a vboxguest vboxsf vboxvideo
mount -t vboxsf NAME_SHARED_DIRECTORY /media/sf_NAME_SHARED_DIRECTORY -o rw,uid=0,gid=0

你需要添加

chmod + /root/mount-vboxsf.sh

我是 运行 VirtualBox 5.1.20,遇到了类似的问题。这是我找到修复的地方的 url,以及我实施的修复:

# https://dsin.wordpress.com/2016/08/17/ubuntu-wrong-fs-type-bad-option-bad-superblock/
if [ "5.1.20" == "${VBOXVER}" ]; then
  rm /sbin/mount.vboxsf
  ln -s /usr/lib/VBoxGuestAdditions/mount.vboxsf /sbin/mount.vboxsf
fi

link 有类似于 /usr/lib/VBoxGuestAdditions/other/mount.vboxsf 的内容,而不是我在脚本摘录中的内容。

对于我在 vagrant 中用于添加的构建脚本:

https://github.com/rburkholder/vagrant/blob/master/scripts/additions.sh

似乎是 https://www.virtualbox.org/ticket/16670

的修复

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

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

如果您使用的是 Debian:

1) 通过 Virtualbox Guest Additions ISO 文件删除所有已安装的软件包:

sh /media/cdrom/VBoxLinuxAdditions.run uninstall

2) 安装 Virtualbox 包:

apt-get install build-essential module-assistant virtualbox-guest-dkms virtualbox-guest-utils

请注意,即使 modprobe vboxsf 不返回任何内容(因此模块已正确加载),vboxsf.so 将调用名为 mount.vboxsf 的可执行文件,该文件由 virtualbox-guest-utils.忽略这一点会使您无法理解错误的真正原因。

strace mount /your-directory 帮了大忙(/sbin/mount.vboxsf 上没有这样的文件或目录)。

我的解决方案更新来宾添加

(单击设备 -> 插入 Guest Additions CD 映像)

对我来说,在 mac 上,我发现我的 machine 上存储了一个没有元数据的旧 VirtualBox 图像,所以它没有更新到最新版本。

那个旧图像中安装了旧版本的 vbguest 插件,我的 machine 上的新 vbguest 插件无法使用。

所以为了修复它,我只是删除了我的 Vagrant 所基于的图像,然后 Vagrant 下载了更新的版本并且它工作正常。

# Remove an old version of the virtual box image that my vagrant was using    
$ vagrant box remove centos/7 

您可以通过 运行:

找出您在 machine 上缓存了哪些框
$ vagrant box list

在我之前的尝试中,我还升级了我的 vbguest 插件,使用以下过程,但我认为这没有帮助。仅供参考!

# Get rid of old plugins
vagrant plugin expunge 

# Globally install the latest version of the vbguest plugin`
vagrant plugin install vagrant-vbguest 

如果您发现来宾添加框失败,您可以尝试执行以下操作以确保插件正确安装。这会为您的系统(对我来说是 CentOS)下载最新的基于映像,并且 may resolve the issue(对我来说是这样!)

$ vagrant box update

更新对我有用!

$ vagrant box update
$ vagrant plugin install vagrant-vbguest 

下面两个命令对我有用。

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