1. 程式人生 > >讓Vagrant在Windwos下支持使用NFS/SMB共享文件夾從而解決目錄共享IO緩慢的問題

讓Vagrant在Windwos下支持使用NFS/SMB共享文件夾從而解決目錄共享IO緩慢的問題

隱患 1.0 erl set ring htm minute 情況 如果

此問題是在擁有相同配置的環境中,項目在win10跑的慢而在win7就正常的情況下發現的,一步步調試之後發現是文件操作的相關行為變的很慢,於是考慮到可能是系統問題,後來在如下鏈接找到了解決辦法:http://www.iamle.com/archives/2011.html

1。nfs方式

安裝vagrant 插件 vagrant-winnfsd

$ vagrant plugin install vagrant-winnfsd

但是這樣安裝會出現以下錯誤

Installing the vagrant-winnfsd plugin. This can take a few minutes...
Bundler, the underlying system Vagrant uses to 
install plugins, reported an error. The error is shown below. These errors are usually caused by misconfigured plugin installations or transient network issues. The error from Bundler is: An error occurred while installing childprocess (0.5.8), and Bundler cannot continue. Make sure that `gem install
childprocess -v 0.5.8` succeeds before bundling. Warning: this Gemfile contains multiple primary sources. Using `source` more than once without a block is a security risk, and may result in installing unexpected gems. To resolve this warning, use a block to indicate which gems should come from the secondary source. To upgrade this warning to an error, run `bundle config disable_multisource true
`.Gem::RemoteFetcher::FetchError: Errno::ECONNABORTED: An established connection was aborted by the software in your host machine. - SSL_connect (https://rubygems.org/gems/childprocess-0.5.8.gem)

看來是缺少childprocess-0.5.8.gem這個東西
索性把需要的包都下載到本地,然後本地安裝
https://rubygems.org/gems/childprocess-0.5.8.gem
https://rubygems.org/gems/vagrant-winnfsd-1.1.0.gem
然後

vagrant plugin install childprocess-0.5.8.gem
vagrant plugin install vagrant-winnfsd-1.1.0.gem

看一看安裝好的插件

$ vagrant plugin list
childprocess (0.5.8)
  - Version Constraint: 0.5.8
vagrant-share (1.1.4, system)
vagrant-winnfsd (1.1.0)
  - Version Constraint: 1.1.0

編輯項目下的Vagrantfile文件

Vagrant.configure(2) do |config|
  # other config here
  config.vm.network "private_network", ip: "192.168.33.10"

  #winfsd
  config.winnfsd.logging = "on"
  config.winnfsd.uid = 1
  config.winnfsd.gid = 1
  config.vm.synced_folder "./", "/vagrant", type: "nfs"
end

2.SMB方式

Vagrant.configure(2) do |config|
  # other config here
  config.vm.network "private_network", ip: "192.168.33.10"

  #SMB
  config.vm.synced_folder "./", "/vagrant", type: "smb",
      smb_username: "母雞Windows帳號",
      smb_password: "母雞Windows密碼",
      owner: "www",
      group: "www"
      #mount_options: ["dmode=775,fmode=664"]
end

啟動vagrant虛擬機, 註意啟動過程當中需要輸入windwos系統的帳號和密碼

d:\projects>vagrant up
Bringing machine default up with virtualbox provider...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Preparing SMB shared folders...
    default: You will be asked for the username and password to use for the SMB
    default: folders shortly. Please use the proper username/password of your
    default: Windows account.
    default:
    default: Username: administrator
    default: Password (will be hidden):
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.3.26
    default: VirtualBox Version: 5.0
==> default: Configuring and enabling network interfaces...
==> default: Mounting SMB shared folders...
    default: D:/projects => /vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

d:\projects>

發現vagrant開啟了一個名稱為c30268623ba3dedeaa9f098b570dca21的共享
這個地方有個安全大坑,共享權限居然是Everyone!所以註意母雞Windows上是否有其他帳號能訪問!
我把c30268623ba3dedeaa9f098b570dca21本共享的權限改了,發現vagrant還是會把權限設置為Everyone
如果有開啟其他普通帳號,guest什麽的這裏有安全隱患

C:\Users\Administrator>net share

共享名       資源                            註解

-------------------------------------------------------------------------------
IPC$                                         遠程 IPC
c30268623ba3dedeaa9f098b570dca21
             D:\projects
命令成功完成。

為了防止smb共享剔除不活動的連接需要執行以下命令讓系統不要自動踢掉不活動的連接
net config server /autodisconnect:-1

vagrant不會自動刪除共享,要刪除共享使用命令
net share c30268623ba3dedeaa9f098b570dca21 /delete

讓Vagrant在Windwos下支持使用NFS/SMB共享文件夾從而解決目錄共享IO緩慢的問題