Vagrant / Virtualbox,共享文件夹不同步时有许多与文件相关的操作



这不是关于由于共享文件夹访问缓慢而导致流浪者或 virtualbox 来宾运行缓慢,我们知道这可以通过启用 nfs 或多或少地解决。

而是关于当虚拟机中有许多文件操作时挂载的共享文件夹不同步(启用 nfs 不会阻止它发生)。

例如,当我们在 vm 内部安装软件包时,例如使用 php composer 或 node.js npm,正常composer updatenpm install有一定的可能性会失败,一旦失败,只有 vagrant reload 才能帮助恢复同步文件夹并允许相同的命令毫无问题地通过。

这种随机故障仅在共享文件夹(无论是否为 nfs)上执行时发生,因此apt-get upgrade不会触发与在 vm 文件夹中运行时相同的问题。

由于当我们从主机服务器运行作曲家或 npm 时不会出现相同的同步问题,我想知道是什么原因造成的,我们如何调试它?

我们的流浪者设置和配置:

if Vagrant::Util::Platform.windows?
    config.vm.synced_folder "www", "/var/www", :extra => "dmode=777,fmode=777", :owner => "vagrant", :group => "vagrant"
else
    config.vm.synced_folder "www", "/var/www", :extra => "dmode=777,fmode=777", :nfs => true
end

嘉宾: 优麒麟 12.04 LTS x64

主机:Windows 8,Mac OSX 10.8,Ubuntu 13(是的,它们都随机遇到相同的问题)

认为我们或多或少发现了问题的根源:

我们的 Ubuntu 12 LTS 盒子附带的来宾添加版本 (4.1.x) 与主机上安装的当前 Virtualbox 版本 (4.2.x) 不匹配。所以文件同步失败了。

简单的解决方法:

  1. 在 VM sudo apt-get -y -q purge virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11 中运行此命令以删除旧的来宾添加

  2. 安装流浪Vbguest插件,以便在up期间自动处理将来的更新:https://github.com/dotless-de/vagrant-vbguest

最新更新