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

cna*_*ize 154 macos virtualbox centos virtual-machine

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

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

sudo mount -t vboxsf myfolder /home/user/myfolder
Run Code Online (Sandbox Code Playgroud)

并有输出:

/sbin/mount.vboxsf: mounting failed with the error: No such device
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

更新:

Guest Additions 安装.

小智 156

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

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
Run Code Online (Sandbox Code Playgroud)

  • 你怎么停止v​​boxadd? (7认同)
  • @aristofun @brainmurphy1:在同一个目录中,在 `sudo ./vboxadd setup` 之前,你可以执行 `sudo ./vboxadd stop`。不确定是否仍然有必要,但我猜这就是这句话的意思。 (3认同)

ken*_*orb 66

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

流浪汉

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

vagrant plugin install vagrant-vbguest
vagrant vbguest
Run Code Online (Sandbox Code Playgroud)

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

vagrant ssh -c "cat /var/log/vboxadd-install.log"
Run Code Online (Sandbox Code Playgroud)

也许你只是缺少内核头文件.

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.

    • Debian:sudo 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模块

如果上面没有工作,这里有更复杂的步骤来解决它.这假设您已经安装了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
Run Code Online (Sandbox Code Playgroud)

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

ls -la /lib/modules/$(uname -r)/build
Run Code Online (Sandbox Code Playgroud)

检查内核目录是否存在(符号链接指向现有文件夹).如果不是,请将它们安装到正确的文件夹(例如/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
Run Code Online (Sandbox Code Playgroud)

如果内核版本与源代码不匹配,那么您可能需要升级Linux内核(如果源代码比内核更新).

CentOS的

CentOS的示例修复步骤:

vagrant plugin install vagrant-vbguest vagrant vbgues
Run Code Online (Sandbox Code Playgroud)


Atu*_*l N 52

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

modprobe -a vboxguest vboxsf vboxvideo

  • 这是有效的,因为这些是您需要在guest虚拟机上运行的内核模块,以便VirtualBox正确地执行其所有功能.具体来说,这里需要`vboxsf`(VirtualBox共享文件夹).您可以在`/ etc/modules-load.d /`(称之为`virtualbox.conf`)的文件中每行列出这3个文件,以便通过重新启动来保持此更改. (14认同)
  • 有用!但为什么? (2认同)

Fro*_*giz 21

除了@Mats的回答,我还添加了一些信息(它在Debian 8上帮助了我).

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

sudo mount -t vboxsf Shared_Folder ~/SF/
Run Code Online (Sandbox Code Playgroud)

给我以下结果:

VirtualBox: mount.vboxsf: mounting failed with the error: No such device
Run Code Online (Sandbox Code Playgroud)

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

cd /opt/VBoxGuestAdditions-*/init 
sudo ./vboxadd setup
Run Code Online (Sandbox Code Playgroud)

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

无此设备.Guest Additions安装可能已失败.该错误已登录/var/log/vboxadd-install.log

你需要安装linux头文件:

apt-get install linux-headers-$(uname -r)
Run Code Online (Sandbox Code Playgroud)

然后你可以安装Guest Additions:

sh /media/cdrom/VBoxLinuxAdditions.run --nox11
Run Code Online (Sandbox Code Playgroud)

并通过以下方式重启Linux:

reboot
Run Code Online (Sandbox Code Playgroud)

那么你将能够挂载你的共享文件夹!

mount -t vboxsf Shared_Folder ~/SF/
Run Code Online (Sandbox Code Playgroud)

更多信息(法语),请查看此页面.

  • 在aptBox上使用Lubuntu 15.04帮助`apt-get install linux-headers-virtual` (3认同)

xxx*_*nce 12

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

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

vagrant plugin install vagrant-vbguest
Run Code Online (Sandbox Code Playgroud)

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


cna*_*ize 9

这解决了:

yum install gcc kernel-devel make
Run Code Online (Sandbox Code Playgroud)

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

  • @AndrewShatnyy"以13票赞成回答"是模棱两可的.请将固定链接发布到您所指的答案(点击答案下的"分享") (4认同)

小智 6

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

modprobe -a vboxguest vboxsf vboxvideo

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


小智 5

我的主机是Windows10,我的VM来宾是由vagrant构建的ubuntu。这为我工作:

vagrant plugin install vagrant-winnfsd
Run Code Online (Sandbox Code Playgroud)