这不是关于由于共享文件夹访问缓慢而导致流浪者或 virtualbox 来宾运行缓慢,我们知道这可以通过启用 nfs 或多或少地解决。
而是关于当虚拟机中有许多文件操作时挂载的共享文件夹不同步(启用 nfs 不会阻止它发生)。
例如,当我们在 vm 内部安装软件包时,例如使用 php composer
或 node.js npm
,正常composer update
或npm 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) 不匹配。所以文件同步失败了。
简单的解决方法:
-
在 VM
sudo apt-get -y -q purge virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
中运行此命令以删除旧的来宾添加 -
安装流浪Vbguest插件,以便在
up
期间自动处理将来的更新:https://github.com/dotless-de/vagrant-vbguest