如何改善流浪汉中缓慢的共享文件夹

时间:2017-03-13 07:43:16

标签: ubuntu vagrant filesystems shared-directory vagrant-windows

在我的Windows 7上我使用:

  • VirtualBox 5.0.20
  • Vagrant 1.9.1
  • vagrant-share(1.1.6,system)
  • vagrant-winnfsd(1.3.1)

我有一个带有一些PHP软件(piwik)的ubuntu vagrant box,它在特定的CLI命令上执行一些涉及文件的处理。我已经测量了命令完成从guest(ubuntu)到主机(win7)的各种类型共享所需的时间:

  • 在一个简单的共享文件夹上30秒。
  • nfs共享文件夹上的
  • 5秒(通过BuildConfig.APPLICATION_IDconfig.vm.network "private_network", type: "dhcp")。
  • 复制了config.vm.synced_folder "piwik", "/web-pub/piwik", :nfs => true, :mount_options => ['actimeo=2']下未共享的所有相关文件后,
  • 0.5秒没有共享。

我确认在不同的任务上按比例相似的数字(例如在香草drupal 7装置上/tmp)。

您知道如何让共享文件夹的速度超过5秒吗?我想避免使用基于rsync的解决方案。

2 个答案:

答案 0 :(得分:2)

如果您默认拥有数千个文件和vagrant mounts主目录,那么Vagrant文​​件共享速度很慢,请尝试禁用默认共享:

config.vm.synced_folder ".", "/vagrant", disabled: true

您可以尝试enabling FS Cache。我没有看到启用或不启用差异但是仍然启用了...在guest虚拟机中安装cachefilesd并将fsc添加到挂载选项中:

config.vm.synced_folder "src/", "/mnt/project", type: "nfs", 
                        mount_options: ['rw', 'vers=3', 'tcp', 'fsc']

你可能会遇到NFS的权限问题,你可以使用bindfs插件:

config.bindfs.bind_folder "/mnt/project", "/var/www/drupal", 
                          owner: "www-data", group: "www-data"

这是我们用于drupal8开发的最终Vagrantfile

["vagrant-bindfs", "vagrant-vbguest"].each do |plugin|
    unless Vagrant.has_plugin?(plugin)
      raise plugin + ' plugin is not installed. Hint: vagrant plugin install ' + plugin
    end
end

Vagrant.configure("2") do |config|
  config.vm.box = "geerlingguy/ubuntu1604"

  # Shared folders
  config.vm.synced_folder ".", "/vagrant", disabled: true 
  config.vm.synced_folder "src/", "/mnt/drupal", type: "nfs", 
                          mount_options: ['rw', 'vers=3', 'tcp', 'fsc']
  config.bindfs.bind_folder "/mnt/drupal", "/opt/drupal", 
                            owner: "www-data", group: "www-data"

  config.vm.network "private_network", ip: "192.168.33.20"
  config.vm.provider "virtualbox" do |v|
    v.memory = 2048
    v.cpus = 2
  end
end

答案 1 :(得分:0)

您可以挂载根文件夹“不同步”,并挂载其他文件夹“带同步”,这是我对laravel和homestead的配置:

folders:
  - map: "./"
    to: "/home/vagrant/green-rush"
    type: "nfs"
    options:
      disabled: true
  - map: "./app"
    to: "/home/vagrant/green-rush/app"
    type: "nfs"
  - map: "./resources"
    to: "/home/vagrant/green-rush/resources"
    type: "nfs"
  - map: "./routes"
    to: "/home/vagrant/green-rush/routes"
    type: "nfs"
  - map: "./tests"
    to: "/home/vagrant/green-rush/tests"
    type: "nfs"
  - map: "./public"
    to: "/home/vagrant/green-rush/public"
    type: "nfs"

现在,根据您的情况,速度应该非常接近0.5秒。您可以挂载所有想要作为“同步文件夹” 的文件夹,只是不必挂载“。git文件夹”。。因为问题最多的文件夹是” .git” 文件夹。对于非挂载文件夹,“ node_modules” 文件夹也是不错的选择。唯一的问题是现在根文件中的文件现在不同步,但这是一个折衷方案,您可以使用以下命令手动将这些文件移至无用状态: :

scp "C:\projects\test\.env" "vagrant@vagrant.local:/home/vagrant/test/.env"

或者您可以创建一个脚本,该脚本将在更改任何文件时自动为您执行此操作。