VirtualBox:mount.vboxsf:安装失败,并显示以下错误:没有此类设备


160

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

在OS XI创建的文件夹中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 已安装。


确保Guest Additions已正确安装,您可能必须sudo apt-get upgrade; sudo apt-get install build-essential module-assistant; 须藤马准备 您需要查看正在构建的来宾招生模块...
ntg

9
对于遇到此问题的随机互联网冲浪者:请帮个忙,看看第二个答案。
jrharshath 2015年

4
提示- sudo mount -t vboxsf sf_folder /home/user/folder,这里的sf_folderfolder 必须使用不同的名称
2016年

5
@jrharshath“第二个答案”是哪个?排序可以改变。单击share答案以获取永久链接。
Wisbucky

Answers:


167

我的共享文件夹/剪贴板由于某种原因停止工作(可能是由于在虚拟机上安装了补丁程序)。

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

1
将我的Ubuntu 12.04 vm升级到Ubuntu 14.04后,我的共享文件夹在vm中为空,并且尝试手动挂载时出现错误/sbin/mount.vboxsf: mounting failed with the error: No such device。运行以上命令并重新启动系统后,我的共享文件夹显示为升级之前的样子。.谢谢!
Angelo

在带有Ubuntu 16.04来宾的VirtualBox 5.0.18上,问题仍然存在,该解决方案对我有用。
伊万·佩雷斯

7
如何停止vboxadd?
aristofun

1
谢谢!我还必须安装无业游民,vbguest插件- stackoverflow.com/a/23752848/2043134
thomas_inckx

1
@aristofun @ brainmurphy1:在同一目录下sudo ./vboxadd setup,您可以执行操作sudo ./vboxadd stop。不知道是否仍然有必要,但是我猜那是那句话的意思。
hraban

76

您正在使用共享文件夹,因此需要在虚拟机中安装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"

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

虚拟机

在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
    • 软呢帽: sudo /etc/init.d/vboxdrv setup
    • CentOS的: sudo service VBoxService start

构建主要的访客添加模块

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

无法安装共享文件夹的最常见原因可能与构建来宾添加模块失败有关。如果出现/var/log/vboxadd-install.log以下错误:

找不到当前正在运行的内核的标头。

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

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

$ 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
RE CentOS修复,它解决了我的问题,但请确保您已安装gcc。
ggdx

1
使用Chef's Test Kitchen(Vagrant),vagrant插件安装vagrant-vbguest对我
有用

在我的情况下,这是因为GuestAdditions与Vagrant和Guest之间的声明不同。
AnthonyB

1
vagrant plugin install vagrant-vbguest vagrant vbguest也可以在centos 7上工作并解决了该问题。谢谢
Med Ali Difallah

55

我可以通过以下命令解决此问题

modprobe -a vboxguest vboxsf vboxvideo


我的vbox5.0.6和Centos 7 guest虚拟机上发生了相同的问题。问题是(重新)引导后,我每次都需要运行此程序。
webbertiger 2015年

14
之所以可行,是因为这些是您需要在客户机上运行的内核模块,以便VirtualBox正确执行其所有功能。具体来说,vboxsf这里需要(VirtualBox共享文件夹)。您可以在文件中的每行中列出这3个文件/etc/modules-load.d/(可能称为virtualbox.conf),以使更改在重新启动后仍然有效。
两位炼金术士

1
在Debian 8 guest虚拟机上,运行此命令破坏了视频输出。
CodingWithSpike

23

除了@Mats答案,我还添加了更多信息(它对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-virtualLubuntu 15.04在VirtualBox上提供了帮助
fider 2015年

/ media / cdrom对于我来说是空的
-CCC

您是否从“设备”菜单中单击“安装来宾添加项”?
Froggiz


9

解决方法是:

yum install gcc kernel-devel make

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


跑所有更新根本没有运气。抱歉,答案为13的投票确实效果更好
Andrew Shatnyy 2015年

我正在将Windows 7主机与RHEL 7配合使用,并且为我解决了该问题(包括gist链接中的信息)-谢谢!
克里斯·汤森

在Ubuntu上,这uname -r
可行

4
@AndrewShatnyy的“ 13票赞成”答案是模棱两可的。请将永久链接发布到您所指的答案(单击share答案下方)
wisbucky

1
@wisbucky,对不起。stackoverflow.com/a/29456128/849187已经工作了两次
Andrew Shatnyy

6

共享文件夹对我更早了,但突然停止了工作(Virualbox-主机是Windows 7,Guest是OpenSuSe)

modprobe -a vboxguest vboxsf vboxvideo

然后 mount -t vboxsf testsf /opt/tsftestsf是Windows C驱动器中的文件夹,该文件夹已添加到Virtualbox共享文件夹---中,并且/opt/tsf是OpenSuse中的文件夹


5

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

vagrant plugin install vagrant-winnfsd

3

我也有一个工作系统,该系统突然停止处理所述错误。

在我的/ lib / modules中四处乱逛之后,似乎该vboxvfs模块不再存在了。代替modprobe vboxsf是使事情重新开始所需的咒语。

不知道何时会发生这种变化,但这使我失望了。


1
它的工作对我来说运行`须藤modprobe的vboxsf`后
维奥雷尔MIREA

3

我正在运行VirtualBox 5.1.20,并且遇到了类似的问题。这是我找到修复程序以及实现的修复程序的网址:

# 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

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

对于构建脚本,我在vagrant中使用了其他功能:

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

似乎是对https://www.virtualbox.org/ticket/16670的修复


3

我的解决方案更新访客添加

(单击设备->插入来宾添加CD映像)


2

    在两种情况下可能有错误/错误的方法。两者都检查并       找出来。

场景1:

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

1.1.a. 如果使用VBoxLinuxAdditions,如果
构建VirtualBox Guest Additions内核模块失败,
请检查/var/log/vboxadd-install.log中的日志文件。如果错误是由于内核版本引起的,请更新您的内核并重新引导虚拟机。如果是软呢帽,则
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


2

对我来说,在Mac上,事实证明我的机器上存储了一个旧的VirtualBox映像,该映像没有元数据,因此没有被更新到最新版本。

该旧映像中安装了较旧版本的vbguest插件,而我的计算机上较新的vbguest插件无法使用。

因此,要解决此问题,我只是删除了Vagrant所基于的图像,然后Vagrant下载了较新的版本,效果很好。

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

您可以通过运行以下命令找出已缓存在计算机上的框:

$ 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),并且可能会解决问题(对我来说确实如此!)

$ vagrant box update

1

在Ubuntu上,这有效:

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

1

VirtualBox 5.0.16 / rXXX遇到相同的问题

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


1

我以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


0

如果您使用的是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)。



-1

以下两个命令对我有用。

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

-8

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

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

sudo mkdir /test -在根目录下创建目录。

因此,如果您的共享目录名称是,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来宾来解决此错误,或者编写复杂的程序来解决在错误位置创建的目录,这真让我感到惊讶。


2
遇到的错误是“没有这样的设备”,而不是“没有这样的文件或目录”。:)
mjtko 2015年

mynttest @ mynttest-VirtualBox:/ media / sf_shared $ sudo mkdir〜/ test sudo mount -t vboxsf vbshared〜/ test mkdir:无效的选项-'t'尝试`mkdir --help'了解更多信息。
贝里特·拉尔森

1
mkdir /test将在/中创建目录/ test。sudo mkdir /test将创建相同的目录,但由root而非当前用户拥有。
bschlueter

我有同样的问题。所以我安装kernel-devel.x86_64 0:2.6.32-754.11.1.el6并运行这些命令- cd /opt/VBoxGuestAdditions-*/initsudo ./vboxadd setup。那对我有用。
Vishwanath Sharma
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.