VirtualBox:mount.vboxsf:出现错误无法挂载:没有这样的设备。

190
我是一名有用的助手,可以为您进行翻译。以下是需要翻译的内容:

我正在使用VirtualBox,主机操作系统是OS X,客户机操作系统是CentOS。

在OS X中,我创建了一个名为myfolder的文件夹,并将其添加为共享文件夹到虚拟机中,在启动虚拟机后,在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,您可能需要执行sudo apt-get upgrade; sudo apt-get install build-essential module-assistant; sudo m-a prepare命令。您需要看到正在构建Guest Additions模块... - ntg
14
给遇到这个问题的随机上网者:给自己一个好处,看看第二个答案。 - jrharshath
9
一条提示 - sudo mount -t vboxsf sf_folder /home/user/folder,注意 sf_folderfolder 必须是不同的名称。 - cnaize
8
"第二个答案"是哪一个?排序可能会改变。点击答案中的“分享”以获取永久链接。 - wisbucky
@cnaize 好的,那就是真正的答案。我实际上花了几个小时来尝试弄清楚为什么这不起作用。是的,需要将文件夹名称和共享名称设置为不同的名称,否则挂载命令将无法工作。大家注意,这是真正的解决方案! - shrimpwagon
jrhashath所提到的第二个答案是这个:https://dev59.com/t14c5IYBdhLWcg3wFm44#37706087,作者是@kenorb。而cnaize上面关于名称的评论也很相关。 - Amarghosh
21个回答

188

由于虚拟机中的一次补丁安装,我的共享文件夹/剪贴板出现了故障。

sudo mount -t vboxsf Shared_Folder ~/SF/

结果如下:

VirtualBox: mount.vboxsf: 挂载失败,错误为:No such device

对我来说解决方案是停止vboxadd并在此之后进行设置:

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

1
将我的 Ubuntu 12.04 虚拟机升级到 Ubuntu 14.04 后,我的虚拟机中的共享文件夹变为空白,并在尝试手动挂载时出现错误 /sbin/mount.vboxsf: mounting failed with the error: No such device。运行上述代码并重新启动系统后,我的共享文件夹恢复了之前的状态...谢谢! - Angelo
这个问题在VirtualBox 5.0.18上的Ubuntu 16.04客户机上仍然存在,而这个解决方案对我有效。 - Ivan Perez
9
如何停止vboxadd? - aristofun
1
谢谢!我还需要安装vagrant-vbguest插件-https://dev59.com/leo6XIcBkEYKwwoYJA7p#23752848 - thomas_inckx
4
在同一目录下,在运行sudo ./vboxadd setup之前,你可以执行sudo ./vboxadd stop。不确定是否仍然需要,但我猜这就是那句话的意思。 - hraban
显示剩余6条评论

101

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

Vagrant

如果你正在使用Vagrant(在 OS X 上: brew cask install vagrant),运行以下命令:

vagrant plugin install vagrant-vbguest
vagrant vbguest

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

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

可能你只是缺少内核头文件。

虚拟机 (VM)

在 VM 中,你需要安装 Guest Additions、内核头文件并启动服务,并检查内核扩展是否运行。

这取决于客户操作系统,所以以下是简要步骤:

  1. 安装内核包含的头文件(VBoxLinuxAdditions 需要)。

    • RHEL: sudo apt-get update && sudo apt-get install kernel-devel
    • CentOS: 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 命令。

    • Debiansudo apt-get -y install build-essential module-assistant virtualbox-ose-guest-utils

      如果找不到请使用 dpkg -l | grep virtualbox 命令。

    • 手动下载 VM 中的iso 文件(例如使用 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. 双重检查内核扩展是否正常运行:

    • sudo modprobe vboxsf
  4. 启动或重新启动服务:

    • 手动: sudo /opt/VBoxGuestAdditions*/init/vboxadd setup (添加 sudo sh -x 以进行调试)
    • Debian: sudo /etc/init.d/vboxadd-service start
    • Fedora: sudo /etc/init.d/vboxdrv setup
    • CentOS: sudo service VBoxService start

构建主 Guest Additions 模块

如果以上方法没有解决问题,则可以尝试更 sophisticated 的步骤进行修复。这假设你已经安装了 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

检查内核目录是否存在(符号链接指向现有文件夹)。 如果不存在,请将它们安装到正确的文件夹中(例如,在/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内核(如果源代码比您的内核版本更新)。

CentOS

尝试:

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

1
关于CentOS的修复,它解决了我的问题,但请确保您已安装了gcc。 - ggdx
1
使用Chef的Test Kitchen(Vagrant)时,vagrant plugin install vagrant-vbguest 对我有效。 - pfernandom
在我的情况下,这是因为Vagrant和Guest之间声明的GuestAdditions不同。 - AnthonyB
1
vagrant plugin install vagrant-vbguest vagrant vbguest 也适用于CentOS 7,并解决了该问题。 谢谢。 - Med Ali Difallah

58
我可以通过运行以下命令解决这个问题:

modprobe -a vboxguest vboxsf vboxvideo

该命令可以加载vboxguest、vboxsf和vboxvideo驱动程序,从而解决该问题。

我的vbox5.0.6和Centos 7虚拟机也遇到了同样的问题。问题是每次(重新)启动后都需要运行这个命令。 - webbertiger
14
这能够运作是因为这些内核模块需要在虚拟机中运行,以便VirtualBox能够正确地执行其所有功能。具体来说,这里需要的是vboxsf(VirtualBox共享文件夹) 模块。你可以将这三个文件分别列在位于 /etc/modules-load.d/ 目录下的一个文件中(例如 virtualbox.conf),以使此更改在重新启动后保持生效。 - Two-Bit Alchemist
1
在Debian 8虚拟机中,运行此命令会破坏视频输出。 - CodingWithSpike
1
´modprobe: 警告:在目录 /lib/modules/5.3.11-100.fc29.x86_64 中未找到 vboxsf 模块´。 - Andor Németh

26

除了@Mats answer,我还要补充一些信息(这对我在Debian 8上很有帮助)。

由于虚拟机安装的一些更新可能原因,我的共享文件夹/剪贴板出现了问题。

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

如果您仍然收到以下错误:

找不到设备。可能是客户机附加组件的安装失败了。错误已记录在/var/log/vboxadd-install.log中。

您需要安装Linux头文件:

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

然后您可以安装Guest Additions:

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

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

reboot

那么你就可以挂载你的共享文件夹了!

mount -t vboxsf Shared_Folder ~/SF/

获取更多信息,请查看此页面


3
apt-get install linux-headers-virtual 可以帮助在 VirtualBox 上使用 Lubuntu 15.04。 - fider
在我的情况下,/media/cdrom是空的。 - CCC
你是否从“设备”菜单中点击了“安装增强功能”? - Froggiz
/sbin/mount.vboxsf:挂载失败,错误为:没有这样的设备。 - Andor Németh

16

谢谢,它帮了我很多(Y) - Pankaj Garg

10

运行了所有更新,但都没有成功。抱歉,得到13个赞的答案效果更好。 - Andrew Shatnyy
4
“@AndrewShatnyy的回答赞数为13”有歧义。请发布您所指的答案的永久链接(在答案下方点击“分享”)。 - wisbucky
1
@wisbucky,你是对的,抱歉。https://dev59.com/t14c5IYBdhLWcg3wFm44#29456128 已经成功运行了两次。 - Andrew Shatnyy
嗯,我不需要安装“make”,但我独立找到了另外两个。这对我起作用了。 - Wildcard
在Ubuntu上,我成功地使用sudo apt-get -y install dkms build-essential linux-headers-3.13.0-36-generic(使用uname -a获取正确的版本号) - Michael
显示剩余4条评论

6

之前共享文件夹对我来说是可用的,但突然间它停止工作了(Virualbox - 主机是Windows 7,客户机是OpenSuSe)

modprobe -a vboxguest vboxsf vboxvideo

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


5

我的主机是Windows10,我的虚拟机客户端是通过Vagrant构建的Ubuntu。以下方法适用于我:

vagrant plugin install vagrant-winnfsd

4
我的解决方案是更新虚拟机增强功能(guest additions)(点击设备->插入增强功能CD镜像)。

3
我之前有一个正常工作的系统,但突然出现了描述的错误。在我的 /lib/modules 中寻找后,发现 vboxvfs 模块已经不存在了。相反,需要使用命令 modprobe vboxsf 来重新启动系统。不确定这个更改是何时发生的,但它让我受到了影响。

1
在运行 sudo modprobe vboxsf 后,它对我起作用了。 - Viorel Mirea
1
modprobe: 致命错误:在目录 /lib/modules/5.3.11-100.fc29.x86_64 中未找到 vboxsf 模块。 - Andor Németh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接