在电脑里,安装了FreeBSD的虚拟机器,并且想通过nfs来实现主机与虚拟机之间共享目录。共享的目的是我希望在主机上可以读写FreeBSD上的文件、创建文件,并在FreeBSD上进行编译。


在网上搜索教程和在FreeBSD的手册中,都看到需要进行大致配置,如下:


在 /etc/rc.conf 中增加如下配置:


nfs_server_enable="YES"

nfs_server_flags="-u -t -n 4"

mountd_flags="-r"

rpcbind_enable="YES"

rpcbind_flags="-r"

rpc_lockd_enable="YES"

rpc_statd_enable="YES"


配置中具体用途,可以参见FreeBSD手册的NFS介绍。

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-nfs.html


同时,需要配置 /etc/exports 文件,我当时配置如下:


/home   -maproot=xxxx -alldirs 10.10.0.100


其中,xxxx 是主机上的用户名,10.10.0.100 上主机IP。FreeBSD 的虚拟机是通过桥模式连接到网络的,与主机同在一个网段,IP 为 10.10.0.101


配置完后,执行命令:


service nfsd restart

service mountd onereload


执行完命令后,在主机上进行挂载:


mount -t nfs 10.10.0.101:/home  ~/nfs


挂载成功后,偿试对/home下文件进行编辑,但失败,原因是文件是只读的,于是通过chmod给文件加上写权限,便可以写文件了。但是创建文件时,发现不能创建,经查找,发现在目录对其他用户没有写权限,所以又给目录加了权限,于是便可以创建文件了。


但是发现通过给文件加写权限是不合适的,会破坏文件原有的权限,不安全。于是为了能够保持良好的权限,我在FreeBSD上创建xxxx的用户,并把/home/xxxx目录通过nfs分享出去。在主机上挂载/home/xxxx后,发现不需要修改权限,就可以进行读写了。


通过此次nfs经验,在配置nfs时,需要注意到三个地方:


  1. exports 文件中-maproot=xxxx的用户名配置,为客户端机器所用的用户名

  2. 客户端用户名要对应-maproot=xxxx

  3. 通过nfs分享出去的目录文件权限,也要使xxxx用户可读写,才能够在客户端自由地进行文件读写与创建。


----

为了实现我的目的:主机上编写文件,FreeBSD上编译执行,通过rsync,ftp 也可以实现,只是每次需要手动同步。而我实际上也搭建了rsync用来同步,只要把rsync命令写到expect文件中并配置好密码,可以直接运行脚本同步了,也挺方便的。