概述
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进行注册。
请求流程
- 客户端向服务器端的RPC(port 111)发出NFS档案存取功能的询问要求
- 服务器端找到对应的已注册的NFS daemon端口后,返回给客户端
- 客户端了解对应的端口后,直接通过获取到的端口与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