通过NFS共享

Windows用户: NFS文件夹在Windows主机上不起作用

1、先决条件:

  • 宿主机上安装nfs,但是Mac OS X 默认是集成了的,可以省略

    我这边是centos7.3

    1. [root@vagrant ubuntu]# yum -y install nfs-utils rpcbind
    2. [root@vagrant ubuntu]# systemctl start nfs
  • 虚拟机上安装nfs

    首先要把虚拟机的网络设置成 :private_network 模式,不能用public——network模式

    1. vagrant@ubuntu-xenial:~$ sudo apt-get install nfs-common
  • 暂停虚拟机

2、配置Vagrantfile文件,添加如下

  1. config.vm.synced_folder "website/" "/opt/website", type: "nfs"

3、宿主机上创建目录

  1. [root@vagrant ubuntu]# mkdir website

4、当我启动虚拟机(或者重启载入虚拟机的时候)

使用命令 vagrant reload 重启虚拟机后才会生效,期间会修改宿主计算机的 /etc/exports 文件

然后查看exports发现多了如下(默认是anonuid为root)

  1. [root@vagrant website]# vim /etc/exports
  2. VAGRANT-BEGIN: 0 c7e6bcff-6e7d-4551-8fcb-e5cabda96273
  3. "/vagrant/ubuntu/website" 192.168.30.100(rw,no_subtree_check,all_squash,anonuid=0,anongid=0,fsid=1307718439)
  4. VAGRANT-END: 0 c7e6bcff-6e7d-4551-8fcb-e5cabda96273

选项: 1、map_uid和map_gid(int) - 分别映射所有读/写请求的UID / GID

  1. config.vm.synced_folder "website/","/opt/website", type: "nfs",map_uid: "1002",map_gid: "1002"

注意:

  • 主机上的用户和虚拟机上的用户,必须使用同一个uid和gid
  • 宿主机和虚拟机上都要有该用户

    宿主机上创建如下:

    1. [root@vagrant website]# useradd -u 1002 www

    重新载入虚拟机

    1. [root@vagrant ubuntu]# vagrant reload

    登录虚拟机上查看

    1. [root@vagrant ubuntu]# vagrant ssh
    2. vagrant@ubuntu-xenial:/opt/website$ ll
    3. total 4
    4. drwxr-xr-x 2 www www 33 Jan 31 10:25 ./
    5. drwxr-xr-x 3 root root 4096 Jan 31 10:05 ../
    6. -rw-r--r-- 1 www www 0 Jan 31 10:06 a
    7. -rw-r--r-- 1 www www 0 Jan 31 10:25 b
    8. -rw-r--r-- 1 www www 0 Jan 31 10:25 c

注意: 如果vagrant宿主机是普通用户运行,那么就需要根据系统类型,配置visudoer,摘入官网如下:

对于OS X,sudoers应该有这个条目:

  1. Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
  2. Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
  3. Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
  4. %admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE

对于Ubuntu Linux,sudoers应该是这样的:

  1. Cmnd_Alias VAGRANT_EXPORTS_CHOWN = /bin/chown 0:0 /tmp/*
  2. Cmnd_Alias VAGRANT_EXPORTS_MV = /bin/mv -f /tmp/* /etc/exports
  3. Cmnd_Alias VAGRANT_NFSD_CHECK = /etc/init.d/nfs-kernel-server status
  4. Cmnd_Alias VAGRANT_NFSD_START = /etc/init.d/nfs-kernel-server start
  5. Cmnd_Alias VAGRANT_NFSD_APPLY = /usr/sbin/exportfs -ar
  6. %sudo ALL=(root) NOPASSWD: VAGRANT_EXPORTS_CHOWN, VAGRANT_EXPORTS_MV, VAGRANT_NFSD_CHECK, VAGRANT_NFSD_START, VAGRANT_NFSD_APPLY

对于Fedora Linux,sudoers可能看起来像这样(因为你的用户属于流浪者组):

  1. Cmnd_Alias VAGRANT_EXPORTS_CHOWN = /bin/chown 0:0 /tmp/*
  2. Cmnd_Alias VAGRANT_EXPORTS_MV = /bin/mv -f /tmp/* /etc/exports
  3. Cmnd_Alias VAGRANT_NFSD_CHECK = /usr/bin/systemctl status --no-pager nfs-server.service
  4. Cmnd_Alias VAGRANT_NFSD_START = /usr/bin/systemctl start nfs-server.service
  5. Cmnd_Alias VAGRANT_NFSD_APPLY = /usr/sbin/exportfs -ar
  6. %vagrant ALL=(root) NOPASSWD: VAGRANT_EXPORTS_CHOWN, VAGRANT_EXPORTS_MV, VAGRANT_NFSD_CHECK, VAGRANT_NFSD_START