问题描述
我在Virtualbox 4.3中安装了Ubuntu 13.10。主机是Windows。
我有几个由/etc /fstab挂载的Virtualbox共享文件夹。直到最近这个设置工作得很好,但在从Ubuntu 13.04和Virtualbox 4.2(基本上同时)升级后,fstab安装停止工作。我在启动过程中收到以下错误:
An error occurred while mounting /home/benme/Documents.
keys:Press S to skip mounting or M for manual recovery
按M进行手动恢复然后尝试手动安装也会失败:
root@benme-vb:~# cd /home/benme
root@benme-vb:/home/benme# mount Documents
/sbin/mount.vboxsf: mounting failed with the error: No such device
但是,如果我在启动过程中跳过挂载,等待Unity启动,然后手动挂载到shell中,一切正常:
benme-vb ~ % ls Documents
benme-vb ~ % sudo mount Documents
[sudo] password for benme:
benme-vb ~ % ls Documents
# actual file list omitted
请注意,当我手动挂载时,我让mount从/etc /fstab获取所有选项,并且它可以工作。这告诉我,这是某种计时问题,其中Virtualbox不是”ready”来提供共享文件安装点/etc /fstab挂载在启动期间运行。
这是fstab系列,只是为了完整性:
Documents /home/benme/Documents vboxsf uid=benme,gid=benme,dmode=774,fmode=664 0 0
我可以从Ubuntu方面做些什么吗?或者是否有人碰巧从Virtualbox角度了解更多信息?
我发现Virtualbox bug-tracker的旧报告有相同的症状,但在这种情况下,用户更新了Virtualbox而没有更新其guest添加内容并解决了修复问题的问题;这不会发生在这里,我肯定已经安装了4.3加入客户端。
最佳解决方法
我也碰到了这个问题。我使用VBox共享文件夹功能挂载/var/www
,所以这非常烦人。
我找到的解决方案是在安装文件系统之前强制加载vboxsf
模块。只需在/etc/modules
中自行添加vboxsf
即可。
另一种解决方案是在/etc/fstab
中设置noauto并在/etc/rc.local
中手动安装驱动器,但这对我来说不是一个好的解决方案,因为到那时Apache已经启动并且无法在/var/www
中找到任何内容。
次佳解决方法
除了理查德特纳建议将vboxsf
自行添加到/etc/modules
之外,我建议将_netdev
安装选项添加到/etc/fstab
中。我在Ubuntu 12.04 LTS上进行了测试,这似乎为mount增加了适当的延迟时间。
我的/etc/fstab
条目:
dev /media/dev vboxsf defaults,_netdev 0 0
第三种解决方法
在最后一次更新后,Richard的修复程序停止了为我工作(VirtualBox 4.3.18,Ubuntu 14.04)。幸运的是,通过在内核中加载vboxsf
,我能够修复它:
# echo "vboxsf" >> /etc/initramfs-tools/modules
# update-initramfs -u
第一个命令添加一个参数以将模块加载到内核,第二个命令更新init文件系统。重新启动后,我能够再次使用我的fstab-mounts 🙂
警告:如果无法装入共享文件夹,则引导过程可能会冻结。因此,在将模块添加到initramfs之前,请测试您的配置。如果您的系统仍然挂起,则可以在恢复模式下启动以解决问题。
第四种方法
我只想说强迫vboxsf
模块提前加载帮助我(如Richard Turner的回答),但fstab线仍然不适合我。
我最终做的是将mount命令(确实有效)放入/etc/rc.local
。有点黑客但它有效。
第五种方法
使用fstab中列出的共享文件夹,我发现当尝试使用VirtualBox 5和Ubuntu 14.04挂载时,启动将挂起。解决方案似乎是延迟安装,直到GuestAddition服务可用(Richard Turner的/etc/modules
解决方案对我来说似乎不够)。
为此,请确保将noauto
作为/etc/fstab
中共享文件夹的选项。例如,对于名为vmshare
的共享文件夹:
vmshare /home/user/share vboxsf defaults,noauto 0 0
然后在/etc/rc.local
中添加一行以在引导后安装共享:
mount vmshare
第六种方法
看起来vboxsf
缺少fs-vboxsf
别名(这是第一次安装该文件系统类型时内核模块自动加载的方式),因此在/etc/modprobe.d
中添加别名应该可以解决问题:
$ echo "alias fs-vboxsf vboxsf" | sudo tee /etc/modprobe.d/vboxsf.conf
第七种方法
我遇到了同样的问题,正在研究建议的解决方案,但没有成功。 Torben的解决方案冻结了靴子,所以不得不撤消它。然后我想我应该使用sudo mount -a
对/etc/fstab
进行故障排除。我的条目的语法看起来很完美,但它仍然失败了。我还能够在终端窗口中使用mount命令手动挂载filesysten。
我发现前两个参数(设备和挂载点)之间有空格。我用一个标签替换它们,它可以工作。真?!!!!