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

时间:2015-02-04 18:32:01

标签: macos centos virtual-machine virtualbox

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

在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已安装。

21 个答案:

答案 0 :(得分:149)

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

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 :(得分:60)

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

在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 file(例如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
  5. 构建主要的Guest Additions模块

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

    安装共享文件夹不起作用的最常见原因可能与构建失败的Guest Additions模块有关。如果在/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
    

答案 2 :(得分:50)

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

modprobe -a vboxguest vboxsf vboxvideo

答案 3 :(得分:20)

@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

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

  

没有这样的设备。 Guest Additions安装可能已失败。该错误已记录在/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/

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

答案 4 :(得分:12)

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

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

vagrant plugin install vagrant-vbguest

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

答案 5 :(得分:8)

这解决了:

yum install gcc kernel-devel make

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

答案 6 :(得分:5)

共享文件夹之前为我工作但突然间它停止工作(Virualbox - 主机是Windows 7,Guest是OpenSuSe)

modprobe -a vboxguest vboxsf vboxvideo

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

答案 7 :(得分:4)

我的主机是Windows10,我的虚拟机客户端是由vagrant构建的ubuntu。这对我有用:

vagrant plugin install vagrant-winnfsd

答案 8 :(得分:3)

我还有一个突然停止处理上述错误的工作系统。

在我的/ lib / modules中进一步后,似乎vboxvfs模块已不复存在。相反,modprobe vboxsf是重新启动事物所需的咒语。

不确定何时发生了这种变化,但它让我感到震惊。

答案 9 :(得分: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

的解决方法

答案 10 :(得分:2)

在两种情况下可能存在错误/不正确的方法。检查两者并弄清楚
情景1:

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

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

情景2:

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

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

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

二。二.2得到用户的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

答案 11 :(得分:1)

在Ubuntu上,这有效:

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

答案 12 :(得分:1)

与VirtualBox 5.0.16 / rXXX相同的问题

安装了最新的VirtualBox 5.0.18并安装了最新的Vagrant 1.9.3,问题就出现了问题。

答案 13 :(得分: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

答案 14 :(得分:1)

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

(点击设备 - >插入访客添加CD图像)

答案 15 :(得分:1)

对于我来说,在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)下载最新的基于映像的映像,对may resolve the issue(对我来说是成功的!)

$ vagrant box update

答案 16 :(得分:0)

我有类似的问题,如果它不匹配则检查标题然后在命令

下面运行

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

答案 17 :(得分: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上没有此类文件或目录)。

答案 18 :(得分:0)

更新对我有用!

$ vagrant box update
$ vagrant plugin install vagrant-vbguest 

答案 19 :(得分:-1)

下面两个命令对我有用。

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

答案 20 :(得分:-8)

好的,每个人都错过了一个基本事实。

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 guest虚拟机添加来解决此错误或编写复杂程序来解决在错误位置创建的目录。