我正在使用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
安装。
我的共享文件夹/剪贴板由于某种原因停止工作(可能是由于我的虚拟机上安装了补丁)。
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
我正在运行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
在两种情况下可能存在错误/不正确的方法。检查它们并弄清楚 情景1: 运行VBoxLinuxAdditions.run或VBoxSolarisAdditions.pkg或VBoxWindowsAdditions.exe后,请检查是否正确安装了所有模块。 1.1.a.如果是VBoxLinuxAdditions,如果 构建VirtualBox Guest Additions内核模块失败, 检查/var/log/vboxadd-install.log中的日志文件。如果错误是由内核版本更新内核并重新启动vm。在fedora的情况下, 1.1.b. yum更新内核* 1.1.c.重启 1.2。如果什么都没有失败,那么一切都很好。您已经拥有预期的内核版本
情景2: 如果安装了VBoxGuestAdditions(检查文件夹/ opt / VBoxGuestAdditions- *是否存在.... *表示版本),则需要在安装前启动它。 2.1。 cd / opt / VBoxGuestAdditions - * / init && ./vboxadd start 您需要将vm用户的用户标识和组标识指定为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
在Ubuntu这工作:
sudo apt-get install build-essential linux-headers-`uname -r` dkms
与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
我的解决方案是更新客人添加内容
(单击设备 - >插入访客添加CD图像)
对我来说,在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
如果您发现guest虚拟机添加中的框失败,您可以尝试执行以下操作以确保正确安装插件。这将为您的系统(对于我的CentOS)和may resolve the issue(它为我做的!)下载最新的图像。
$ vagrant box update
我有类似的问题,如果它不匹配则检查标题然后在命令下运行
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
没有这样的文件或目录)。
更新为我做了诀窍!
$ vagrant box update
$ vagrant plugin install vagrant-vbguest
您正在使用共享文件夹,因此您需要在虚拟机中安装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,内核头文件并启动服务并仔细检查内核扩展是否正在运行。
这取决于客户操作系统,因此这里有简短的步骤:
sudo apt-get update && sudo apt-get install kernel-devel
CentOS:sudo yum update && sudo yum -y install kernel-headers kernel-devel
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 file(例如wget
)并安装它,例如
wget http://download.virtualbox.org/virtualbox/5.0.16/VBoxGuestAdditions_5.0.16.iso -P /tmp
sudo mount -o loop /tmp/VBoxGuestAdditions_5.0.16.iso /mnt
sudo sh -x /mnt/VBoxLinuxAdditions.run # --keep
额外调试:cd ~/install && sh -x ./install.sh /mnt/VBoxLinuxAdditions.run
sudo modprobe vboxsf
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
如果上面没有工作,这里有更复杂的步骤来解决它。这假设您已经安装了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内核(如果源代码比内核更新)。
尝试:
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 ssh
sudo mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant
好的,每个人都错过了一个基本事实。
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虚拟机添加来解决此错误或编写复杂的程序来解决在错误的位置创建的目录。
我可以通过运行以下命令来解决这个问题
modprobe -a vboxguest vboxsf vboxvideo
除了@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。
这是唯一对我有用的解决方案:
安装Vagrant插件:vagrant-vbguest,它可以使您的VirtualBox Guest Additions保持最新。
vagrant plugin install vagrant-vbguest
资料来源:https://github.com/aidanns/vagrant-reload/issues/4#issuecomment-230134083
共享文件夹之前为我工作,但突然间它停止工作(Virtualbox - 主机是Windows 7,Guest是OpenSuSe)
modprobe -a vboxguest vboxsf vboxvideo
然后mount -t vboxsf testsf /opt/tsf
(testsf
是在Windows C驱动器中添加到Virtualbox共享文件夹中的文件夹---而/opt/tsf
是OpenSuse中的文件夹
我的主机是Windows10,我的VM客户端是由vagrant构建的ubuntu。这对我有用:
vagrant plugin install vagrant-winnfsd
我还有一个突然停止处理所述错误的工作系统。
在我的/ lib / modules中进一步后,似乎vboxvfs
模块不再存在。相反,modprobe vboxsf
是重新启动事物所需的咒语。
不确定何时发生了这种变化,但它让我感到震惊。