Virtualbox共享文件夹从fstab挂载失败;只有在启动完成后才能正常工作

我在Virtualbox 4.3中安装了Ubuntu 13.10。主机是Windows。
我有一些由/etc/fstab挂载的共享文件夹。直到最近,这个设置都运行良好,但在从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 启动后再在终端手动挂载,一切都正常运行:
benme-vb ~ % ls Documents
benme-vb ~ % sudo mount Documents
[sudo] password for benme: 
benme-vb ~ % ls Documents
    # actual file list omitted

请注意,当我手动挂载时,我让挂载命令从/etc/fstab中获取所有选项,并且它可以正常工作。这让我觉得可能是一种时间上的问题,即在启动过程中,Virtualbox还没有准备好提供共享文件挂载,而/etc/fstab挂载命令已经执行。
为了完整起见,以下是fstab的配置行:
Documents       /home/benme/Documents   vboxsf  uid=benme,gid=benme,dmode=774,fmode=664     0   0

有没有什么我可以从Ubuntu方面解决这个问题的办法?或者有没有人对Virtualbox有更多了解的?
我在Virtualbox的错误跟踪器上找到了一个旧报告,症状完全相同,但在那种情况下,用户更新了Virtualbox而没有更新其客户机附加组件,解决了问题;但这里不是这种情况,我肯定已经安装了4.3版的客户机附加组件。
9个回答

我也遇到了这个问题。我使用 VBox 共享文件夹功能挂载了 /var/www,所以这个问题非常令人恼火。

我找到的解决办法是强制提前加载 vboxsf 模块,在挂载文件系统之前。只需在 /etc/modules 中添加一个独立的行:vboxsf

另一种解决办法是在 /etc/fstab 中设置 noauto,并在 /etc/rc.local 中手动挂载驱动器,但对我来说这并不是一个好的解决方案,因为此时 Apache 已经启动,并且无法在 /var/www 中找到任何内容。


1太棒了!将内容添加到/etc/modules中完美地解决了问题。谢谢Richard! - ThePosey
@ThePosey 很高兴能帮助! - Richard Turner
这对我来说是一个问题,在Ubuntu Server 14.04虚拟机上。而这个答案(/etc/modules解决方案)为我解决了它。谢谢!顺便说一下,如果你碰巧在尝试解决问题时启用了Virtualbox设置中的自动挂载功能,请再次禁用它 ;) - Reinis
这个解决方案使用的实际代码/文本是什么?@Reinis - qodeninja
2正如我在第二段所说:“只需在/etc/modules中单独添加一行vboxsf即可。@qodeninja - Richard Turner
1我必须在Ubuntu 14.04客户系统的/etc/modules中添加vboxguest和vboxsf才能使其正常工作。 - mattanja

除了Richard Turner建议在/etc/modules中单独添加vboxsf一行之外,我建议在/etc/fstab中添加_netdev挂载选项。我在Ubuntu 12.04 LTS上进行了测试,这似乎为挂载成功提供了适当的延迟。
我的/etc/fstab条目:
dev /media/dev vboxsf defaults,_netdev 0 0

4这对我来说很有效,甚至不需要使用Turner的解决方案。这也很有道理,因为Ubuntu社区帮助页面上关于fstab选项的说明中写着:“_netdev - 这是一个网络设备,在网络启动后再挂载它。”我没有必须在/etc/modules中加载vboxsf,只需添加_netdev就可以了! - Mark Mikofski
1这对我来说也适用于Ubuntu 16.04,甚至不需要Turner的解决方案。 - Zhenya

Richard的修复在最新更新(VirtualBox 4.3.18,Ubuntu 14.04)后对我不再起作用。幸运的是,我能够通过正确加载内核中的vboxsf来解决这个问题。
# echo "vboxsf" >> /etc/initramfs-tools/modules
# update-initramfs -u

第一条命令向内核添加一个参数来加载模块,第二条命令更新初始化文件系统。重启后,我能够再次使用我的fstab挂载点 :)

警告:如果无法挂载共享文件夹,则引导过程可能会冻结。因此,在将模块添加到initramfs之前,请测试您的配置。如果您的系统无论如何都挂起,您可以以恢复模式引导以修复问题。


我尝试了这个解决方案来提前加载 vboxsf 模块……但它只是导致我的启动序列冻结,所以我必须将其删除。 - Rerito
是的,如果你的共享文件夹配置出了问题,提前包含该模块可能会导致启动过程冻结。然而,我从未在正确配置下遇到过任何启动冻结的情况... - Torben
我在答案中添加了一个警告,以使事情更清楚。 - Torben

我只是想说,强制加载vboxsf模块确实帮了我(就像Richard Turner的答案中提到的),但是对我来说,fstab行仍然不起作用。
最后我做的是将mount命令(可以正常工作)放入/etc/rc.local。这有点取巧,但是起到了作用。

1我不明白Richard Turner的建议如何“帮助了你”,但与此同时,fstab行“对你仍然不起作用”...? - j_random_hacker

使用在fstab中列出的共享文件夹时,我发现当使用VirtualBox 5和Ubuntu 14.04挂载它时,启动会卡住。解决方案似乎是延迟挂载直到GuestAddition服务可用(Richard Turner的/etc/modules解决方法对我来说似乎不够)。

要实现这一点,请确保在/etc/fstab中将共享文件夹的选项设置为noauto。例如,对于名为vmshare的共享文件夹:

vmshare    /home/user/share    vboxsf    defaults,noauto    0    0

然后在启动后添加一行到/etc/rc.local来挂载共享文件夹。
mount vmshare

1这是唯一对我有效的解决方案,使用VBox 5.0.16和Ubuntu 14.04。 - T.J. Compton

看起来 vboxsf 缺少 fs-vboxsf 别名(这是内核模块在首次挂载该文件系统类型时自动加载的方式),因此在 /etc/modprobe.d 中添加别名应该可以解决问题。
$ echo "alias fs-vboxsf vboxsf" | sudo tee /etc/modprobe.d/vboxsf.conf

虽然我自己没有尝试过,但看起来很有前途。 - j_random_hacker

根据2020年的情况,对我来说唯一(且有效)的解决方案是由ultracrepidarian在Arch Wiki中描述的那个。 与此同时,fstab中的条目略有不同:
desktop  /media/desktop  vboxsf  uid=<user-id>,gid=<group-id>,rw,dmode=700,fmode=600  0  0

我遇到了同样的问题,并尝试了建议的解决方案,但都没有成功。Torben的解决方案导致启动卡住了,所以我不得不撤销它。然后我想我应该使用sudo mount -a来排查/etc/fstab的问题。我的条目语法看起来完美无缺,但仍然失败了。我还能够在终端窗口中使用mount命令手动挂载文件系统。
我发现的问题是在第一个和第二个参数(设备和挂载点)之间有空格。我用制表符替换了它们,然后就成功了。真的吗?!!!

你确定是两个空格字符(ASCII码32)吗?因为一个或多个空格字符应该和制表符一样好用。有时候我在按下空格键的时候,不小心按得太早或者松开得太晚,结果输入了不间断空格字符。它们看起来一样,但会让很多应用程序产生困惑。 - David Foerster
我只知道我删除了所有的空格并插入了一个制表符,然后它就起作用了。 - svenyonson
将我的空格替换为制表符对我起了作用。我现有的/etc/fstab文件中有空格(据我所知),我完全复制了它们。现有的行只有一个空格。但是,使用制表符重新编写我的内容使一切正常运行。 - jcaruso
这对我来说没有起作用,但是遵循Kevin Sadler的建议,使用noauto延迟挂载,然后将mount <sharename>添加到rc.local中解决了问题。我没有尝试Turner的解决方案。 - Mark Mikofski

我相信我找到了处理这个问题的正确方法,可以在Arch Wiki中找到。使用comment=systemd.automount选项。
上述选项与其他选项一起放在/etc/fstab文件中。例如:
Fedora /var/ftp/pub/Fedora vboxsf uid=1001,gid=1001,comment=systemd.automount 0 0

1这对我没用,但是Keven Sadlier的回答很有用。 - Mark Mikofski