NFS介绍
NFS(Network File System)是一个基于网络的文件系统,S最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本。
NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。NFS的服务端和客户端本身无法直接通信,需要借助RPC来完成。
NFS原理
1.用户进程访问NFS客户端,使用不同的函数对数据进行处理
2.NFS客户端通过TCP/IP的方式传递给NFS服务端。
3.NFS服务端接收到请求后,会先调用portmap进程进行端口映射。
4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端。
5.Rpc.mount进程判断客户端是否有对应的权限进行验证。
6.idmap进程实现用户映射和压缩
7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。
注意: rpc是一个远程过程调用,那么使用nfs必须有rpc服务
安装
安装nfs服务端
yum -y install nfs-utils
配置 /etc/exports
严格按照共享目录的路径 允许访问的NFS客户端(共享权限参数)格式书写,定义要共享的目录与相应的权限
- /data nfs共享目录
- 192.168.184.0/24 客户端地址(共享范围,可写*)
- (rw,sync,no_root_squash,no_all_squash) 参数1,参数2。。。(所有客户端主机都拥有读写权限(rw,sync,all_squash))
/data 192.168.184.0/24(rw,sync,no_root_squash)
文件共享之前,需要使用RPC(Remote Procedure Call远程过程调用服务将NFS服务器的IP地址和端口号信息发送给客户端
#加入开机自启
[root@nfs ~]# systemctl enable rpcbind nfs-server
#启动服务
[root@nfs ~]# systemctl restart rpcbind nfs-server
nfs共享参数参数作用
- rw 读写权限
- ro 只读权限
- root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
- no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
- all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
- no_all_squash 无论NFS客户端使用什么账户访问,都不进行压缩
- sync 同时将数据写入到内存与硬盘中,保证不丢失数据
- async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
- anonuid 配置all_squash使用,指定NFS的用户UID,必须存在于系统
NFS客户端挂载卸载
安装客户端,仅启动rpc服务
[root@nfs-client ~]# yum -y install nfs-utils rpcbind
[root@nfs-client ~]# systemctl restart rpcbind
客户端挂载:
[root@nfs-client ~]# mkdir /nfsdir
[root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /nfsdir
开机挂载
#编辑fstab文件
[root@nfs-client ~]# vim /etc/fstab
172.16.1.31:/data /nfsdir nfs defaults 0 0
#验证fstab是否写正确
[root@nfs-client ~]# mount -a