1.操作系统环境:rhel 7.0 转载地址:https://blog.csdn.net/zfx1997/article/details/78855881
https://blog.csdn.net/sj349781478/article/details/79970739
2.NFS(Network File System)
即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端可以读写位于远端NFS服务器上的文件,就像访问本地文件一样。
3.NFS 有很多实际应用。下面是比较常见的一些
(1) 多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。
(2)在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。
(3)不同客户端可在NFS上观看影视文件,节省本地空间。
(4)在客户端完成的工作数据,可以备份保存到NFS服务器上用户自己的路径下。
4.NFS原理:
经过前面介绍,NFS系统是通过网络来进行数据传输,所以必定会使用端口来进行网络传输。NFS的传输端口是随机选择的,并且通过RPC协议来实现客户端的协调。
什么是RPC服务?
RPC(远程调用服务)。因为NFS支持的功能特别多,而不同的功能都会使用不同的程序来启动,每启动一个功能端口就会用一些端口来传输数据,因此,NFS的功能所对应的端口才无法固定,而是随机取用一些未被使用的小于1024的端口来进行传输。(常规服务端口:0~655535,1024一下,系统服务常用)
所以,客户端要准确的获得NFS服务器所使用的端口,就需要RPC服务。 NFS RPC最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,让客户端可以链接到正确的端口上去,从而实现数据传输。(本人觉得RPC像是中介)
RPC怎样知道NFS的每个端口呢?
原因是,当NFS服务启动时会随机取用数个端口,并主动向RPC服务注册取用的相关端口信息,这样,RPC服务就可以知道每个端口所对应的NFS功能了,然后RPC服务使用固定的端口号111来监听NFS客户端提交的请求,并将正确的NFS端口答应给NFS客户端,这样一来,就可以让NFS客户端与服务端进行数据传输了。
5.mountd服务用于客户端使用服务端共享资源的管理
6.要想正常使用NFS服务,需要防火墙开放一些服务:nfs,mountd,rpc-bind,防火墙设置如下,firewall-cmd --add-service=nfs
firewall-cmd --add-service=nfs --permanent
7.NFS主配置文件exports参数,如下:
ro 只读访问
rw 读写访问
sync 代表数据会同步写入到内存与硬盘中
async 代表数据会暂存于内存当中,而非直接写入硬盘
root_squash , no_root_squas 默认情况下,客户端root的身份会由root_squash的设置压缩成nfsnobody,如此对服务器的系统会较有保障。但如果想要开放客户端使用root身份来操作服务器的文件系统,那么这里就需要开放no_root_squash才行。
还有一些默认选项,不在介绍,想了解请看/var/lib/nfs/etab
8.实战演练
nfs服务器:192.168.64.130 nfs客户端:192.168.64.131
第一步:确认主机是否安装与rpcbind和nfs相关的软件呢?
rpm -qa | grep nfs
rpm -qa | grep rpcbind
如果没有安装用yum install nfs-utils //nfs-utils 就是提供rpc.nfsd及rpc.mountd这两个NFS daemons与其他相关documents与说明文件,可执行文件等软件,这个是NFS服务所需要的主要软件,一定要有。
第二步:创建目录mkdir /xx,并编辑/etc/exports,添加如下内容:
/xx 192.168.64.131/32(rw,async)
/xx 192.168.64.0/24(ro,async,no_root_squash)

修改完配置文件以后,要记得确保rpcbind服务是运行状态 ,查看状态systemctl status rpcbind,若已经启动,就不要重新启动
第三步:启动nfs-server并设置开机自动启动,systemctl restart nfs-server
systemctl enable nfs-server
第四步:在NFS服务器设置妥当之后,我们可以在server端自我测试一下是否可以连接。具体做法就是利用showmount这个命令查看:
showmount -e localhost //-e是显示某台主机/etc/exports所共享的目录数据。当我们需要扫描一台主机提供的NFS共享的目录时,就使用showmount -e IP(或hostname)即可。
第五步:如果不在/etc/exports中设置成no_root_squash的话,那nfs客户端即使root用户对共享目录进行写操作也是不行,方法有两种,一是设置no_root_squash,创建出来的文件属性的所有者,所属组是客户端当前登录的用户,二是不指定no_root_squash但要想nfs客户端对共享目录有写权限,需要添加共享目录的other写权限才行,例如:chmod o+w /xx/
第六步:在nfs客户端创建目录mkdir /nfs,并临时挂载,在操作之前先确保rpcbind服务已经启动,如果没有该服务需要安装一下,并启动。然后在showmount一下,确认能看到共享的目录
mount 192.168.64.130:/xx /nfs
df -hT 查看挂载上没有
第六步:永久挂载,如果一斤临时挂载上了,那就先卸载 umount /nfs 编辑/etc/fstab,添加如下内容:
192.168.64.130:/xx /nfs nfs defaults 0 0 //IP也可以换成hostname也就是nfs服务端的主机名,然后mount -a 再df -hT 查看是否挂载上了