让Vagrant在Windwos下支持使用NFS/SMB共享文件夹从而解决目录共享IO缓慢的问题

自己的本是mbp vagrant使用nfs共享文件夹,所以使用一切ok,但是公司的开发环境是windows10。
windows下是有些问题的,就是在windows下默认的虚拟机共享文件夹的方式,磁盘IO效率实在是太低了。
表现情况,vagrant ssh 在/vagrant/project 下敲命令都卡啊卡,表现的和连接美国vps一样!
执行php程序,从调试来看,花费在文件IO上的时间实在是有点长,能达到1-3秒
vagrant在windows共享文件夹实在是太慢了,亏我忍受那么久。
一直在忍啊忍啊,今天实在是受不了,想要解决掉这个问题,想办法让windows支持NFS或者samb的方式共享文件夹给vagrant虚拟机
如果能支持NFS就当然是最好。
找到vagrant-winnfsd这个vagrant的插件
发现新版也支持Windows下SMB的方式了

NFS方式使用vagrant-winnfsd

安装vagrant 插件 vagrant-winnfsd

$ vagrant plugin install vagrant-winnfsd
但是这样安装会出现以下错误

看来是缺少childprocess-0.5.8.gem这个东西
索性把需要的包都下载到本地,然后本地安装
https://rubygems.org/gems/childprocess-0.5.8.gem
https://rubygems.org/gems/vagrant-winnfsd-1.1.0.gem
然后

看一看安装好的插件

配置

编辑项目下的Vagrantfile文件
网络设置为私有,仅宿主机

在Vagrant.configure(‘2’) do |config| 中加入

SMB方式Windows共享方式

配置

启动vagrant虚拟机, 注意启动过程当中需要输入windwos系统的帐号和密码

发现vagrant开启了一个名称为c30268623ba3dedeaa9f098b570dca21的共享
这个地方有个安全大坑,共享权限居然是Everyone!所以注意母鸡Windows上是否有其他帐号能访问!
我把c30268623ba3dedeaa9f098b570dca21本共享的权限改了,发现vagrant还是会把权限设置为Everyone
如果有开启其他普通帐号,guest什么的这里有安全隐患

为了防止smb共享剔除不活动的连接需要执行以下命令让系统不要自动踢掉不活动的连接
net config server /autodisconnect:-1

vagrant不会自动删除共享,要删除共享使用命令
net share c30268623ba3dedeaa9f098b570dca21 /delete

参考资料

vagrant-winnfsd项目源码
开启 NFS 文件系统提升 Vagrant 共享目录的性能
NFS for Vagrant on Windows
Vagrant SYNCED FOLDERS
Vagrant 使用 samba 共享文件夹

故障

vagrant管理的centos虚拟机在做过 yum -y update 后更新了系统以及内核

然后下一次vagrant up的时候共享目录不能挂载到/vagrant目录( /sbin/mount.vboxsf: mounting failed with the error: No such device)

详细信息

搜索资料知道原因是yum update更新了内核,但是没有更新VirtualBox的连接的问题。

需要执行

修复即可

 

资料

‘vagrant up’ fails to mount linked directory /vagrant

Vagrant up遇到mount no such device的问题

下载安装VirtualBox和Vagrant

要使用Vagrant需要先安装依赖支持的VirtualBox。下一步,下一步默认安装完成2个软件。

下载安装 VirtualBox 官网:https://www.virtualbox.org/

下载安装 Vagrant 官网:http://www.vagrantup.com/

 

配置使用Vagrant 安装 kali linux

http://www.vagrantbox.es/ 这里提供了超全的linux系统预制box包。已经给你搞好系统了,任君选取所需,我这里选kali linux

先用迅雷把http://ftp.sliim-projects.eu/boxes/kali-linux-1.0-amd64.box

下载好,放入你的工作目录如D:\Vagrant

增加box

vagrant  box add base kali-linux-1.0-amd64.box

初始化

vagrant init

 

D:\Vagrant>vagrant  box add base kali-linux-1.0-amd64.box
==> box: Adding box ‘base’ (v0) for provider:
    box: Downloading: file://D:/Vagrant/kali-linux-1.0-amd64.box
    box: Progress: 100% (Rate: 65.2M/s, Estimated time remaining: –:–:–)
==> box: Successfully added box ‘base’ (v0) for ‘virtualbox’!

D:\Vagrant>vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Vagrantfile配置

打开目下的Vagrantfile配置文件

网络配置

Vagrant的网络有三种模式

1、端口映射方式,映射虚拟机中端口到宿主机

config.vm.network :forwarded_port, guest: 80, host: 8080

guest: 80 表示虚拟机中的80端口, host: 8080 表示映射到宿主机的8080端口。

2、私有网络

config.vm.network :private_network, ip: "192.168.1.104"

192.168.1.104 表示虚拟机的IP,多台虚拟机的话需要互相访问的话,设置在相同网段即可

3、桥接

config.vm.network :public_network

这样一个广播域的dhcp就可以分配ip了

目录映射

默认情况下,当前的工作目录,会被映射到虚拟机的 /vagrant 目录,当前目录下的文件可以直接在 /vagrant 下进行访问

也可以自己根据需要映射下

config.vm.synced_folder "work1/", "/data1"

前面的参数 “work1/”  表示的是本地的路径,这里使用对于工作目录的相对路径,这里也可以使用绝对路径,比如: “D:\Vagrant\work1”

启动

set VBOX_INSTALL_PATH=%VBOX_MSI_INSTALL_PATH%

vagrant up –provider=virtualbox

常用管理命令

vagrant up (启动虚拟机)
vagrant halt (关闭虚拟机——对应就是关机)
vagrant suspend (暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)
vagrant resume (恢复虚拟机 —— 与前面的暂停相对应)
vagrant destroy (删除虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留)

参考来源

使用Vagrant在Windows下部署开发环境