概述

NFS就是Network File System的缩写,他最大的功能就是可以通过网络,让不同的机器、不同的操作系统共享彼此的文件,所以也可以将NFS理解为一个文件服务器。NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地的文件系统中,从而像使用本地磁盘一样使用远端的共享目录。
NFS端口:2049

RPC

因为NFS支持的功能相当多,而不用的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能说对应的端口并不固定,而是随机取用一些未被使用的小于1024的端口来作为传输之用。如此一来,就会面临用户端如何知道服务端的相关端口的问题。
此时需要远程过程调用(RPC)服务来完成这个事情。它最主要的功能就是在指定每个NFS功能所对应的port number,并且通知给客户端,让客户端可以连接到正确的端口上去。NFS服务在启动是会随机调用数个端口,并且主动向RPC注册,因此RPC服务可以知道每个端口及其对应的功能,然后RPC又使用固定的端口:111来监听客户端的需求并向客户端相应正确的端口,因此使NFS的启动更加快捷。

在启动NFS服务前,就需要先启动RPC服务,否则NFS服务无法向RPC进行注册,如果RPC需要重新启动,原来注册的数据会丢失,所以如果重启RPC,那么RPC所管理的服务,也需要重新启动向RPC进行注册。

请求流程

  1. 客户端向服务器端的RPC(port 111)发出NFS档案存取功能的询问要求
  2. 服务器端找到对应的已注册的NFS daemon端口后,返回给客户端
  3. 客户端了解对应的端口后,直接通过获取到的端口与NFS daemon进行连接

服务部署

常用选项

常用选项描述
rw允许读写
ro只读
sync同步写入
async先写入缓冲区,必要时才写入磁盘,速度快,但有可能丢失数据
subtree_check若输出一个子目录,则nfs服务将检查其父目录权限
no_subtree_check若输出一个子目录,不检查父目录,提高效率
no_root_squash客户端以root登陆时,赋予其本地root权限
root_squash客户端以root都登陆时,将其映射为匿名用户
all_squash将所有用户映射为匿名用户

常用命令

exportfs -v  #查看详细的nfs信息
exportfs -r  #重读配置文件
showmount -e #查看本机发布的NFS共享目录
showmount -e +IP #查看IP地址发布的NFS共享目录
mount -t nfs 192.168.1.11:/opt /mnt #将NFS服务端192.168.48.6下的/opt挂载到/mnt下
rpcinfo -p localhost  #查看rpc注册的端口信息

服务端配置

检查并安装软件
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
创建共享目录

vim /etc/exports	# NFS的配置文件,默认文件内容为空
# 设置/opt目录为共享目录,允许192.168.1.0/24网段的ip地址访问
/opt 192.168.1.0/24(rw,sync,no_root_squash)

启动服务

systemctl enable --now rpcbind
systemctl enable --now nfs

查看服务端的共享目录及网段
showmount -e
查看服务端的nfs详细信息
exportfs -v

客户端配置

检查并安装软件

rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
systemctl enable --now rpcbind
systemctl enable --now nfs

将共享目录挂载到本地

showmount -e 192.168.1.11
mount -t nfs 192.168.1.11:/opt /mnt
df -Th

开机自动挂载nfs

# 第一种:不推荐
# 修改/etc/rc.d/rc.local文件,添加如下内容,有可能依赖此路径的程序已启动,盘还没挂载成功,会导致故障。
mount -t nfs 192.168.1.11:/opt /mnt

# 第二种,推荐
# 修改/etc/fstab文件,添加如下内容
192.168.1.11:/opt /nfs   nfs     defaults        0 0

星霜荏苒 居诸不息