在电脑里,安装了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介绍。
同时,需要配置 /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时,需要注意到三个地方:
exports 文件中-maproot=xxxx的用户名配置,为客户端机器所用的用户名
客户端用户名要对应-maproot=xxxx
通过nfs分享出去的目录文件权限,也要使xxxx用户可读写,才能够在客户端自由地进行文件读写与创建。
----
为了实现我的目的:主机上编写文件,FreeBSD上编译执行,通过rsync,ftp 也可以实现,只是每次需要手动同步。而我实际上也搭建了rsync用来同步,只要把rsync命令写到expect文件中并配置好密码,可以直接运行脚本同步了,也挺方便的。