NFS工作原理
NFS是Network File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。
1、由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。
2、NFS服务端的RPC找到对应已注册的NFS端口,通知客户端RPC服务。
3、客户端获取正确的端口,并与NFS daemon联机存取数据。
4、存取数据成功后,返回前端访问程序,完成一次存取操作。
所以无论客户端,服务端,需要使用NFS,必须安装RPC服务。
NFS的RPC服务,在Centos5下名为portmap,Centos6/7下名称为rpcbind。
部署环境
Server端:192.168.21.35
Client端 :192.168.21.230
Server端软件:nfs-utils、rpcbind
Client端软件 :安装NFS文件系统模块
部署操作
服务端操作
1、关闭selinux
sh-4.2# sed -i 's/enforcing/disabled/' /etc/selinux/config
sh-4.2# reboot
2、卸载防火墙
sh-4.2# rpm -qa | grep "firewall" | xargs rpm -e --nodeps
sh-4.2# rpm -qa | grep "iptables" | xargs rpm -e --nodeps
3、配置本地源
sh-4.2# cat GuGe.repo
[GuGe]
name=GuGe
baseurl=file:///mnt
gpgcheck=0
enable=1
4、安装部署NFS
sh-4.2# yum install nfs-utils rpcbind
sh-4.2# systemctl restart rpcbind.service # 启动rpcbind
sh-4.2# systemctl status rpcbind.service
sh-4.2# systemctl enable rpcbind
sh-4.2# ss -anpt | grep "111"
LISTEN 0 128 *:111 *:* users:(("rpcbind",pid=18264,fd=4),("systemd",pid=1,fd=39))
LISTEN 0 128 :::111 :::* users:(("rpcbind",pid=18264,fd=6),("systemd",pid=1,fd=41))
sh-4.2# rpcinfo -p localhost # 向rpc注册nfs信息
sh-4.2# systemctl start nfs.service # 启动nfs服务
sh-4.2# rpcinfo -p localhost # 查看启动nfs服务之后的rpc状态
5、进程详解
sh-4.2# ps -ef|egrep "rpc|nfs"
rpc 18264 1 0 22:46 ? 00:00:00 /sbin/rpcbind -w
rpcuser 18319 1 0 22:51 ? 00:00:00 /usr/sbin/rpc.statd
root 18320 2 0 22:51 ? 00:00:00 [rpciod]
root 18332 1 0 22:51 ? 00:00:00 /usr/sbin/rpc.idmapd
root 18366 1 0 22:51 ? 00:00:00 /usr/sbin/rpc.mountd
root 18371 2 0 22:51 ? 00:00:00 [nfsd4_callbacks]
root 18377 2 0 22:51 ? 00:00:00 [nfsd]
root 18378 2 0 22:51 ? 00:00:00 [nfsd]
root 18379 2 0 22:51 ? 00:00:00 [nfsd]
root 18380 2 0 22:51 ? 00:00:00 [nfsd]
root 18381 2 0 22:51 ? 00:00:00 [nfsd]
root 18382 2 0 22:51 ? 00:00:00 [nfsd]
root 18383 2 0 22:51 ? 00:00:00 [nfsd]
root 18384 2 0 22:51 ? 00:00:00 [nfsd]
root 18402 18050 0 22:52 pts/0 00:00:00 grep -E rpc|nfs
nfsd(rpc.nfsd)主进程,主要是管理客户端能否登入服务端,登入者ID判别。
mountd(rpc.mountd)管理NFS文件系统,登入者的权限管理
rpc.lockd(非必要)用来锁定文件,用于客户端同时写入
rpc.statd(非必要)检查文件一致性
rpc.idmapd 名字映射后台进程
6、配置共享目录
sh-4.2# vi /etc/exports # NFS服务端配置
/test 192.168.21.0/24(rw,sync)
sh-4.2# exportfs -rv # 重新加载nfs配置
exporting 192.168.21.0/24:/test
sh-4.2# showmount -e localhost # 查看nfs服务器挂载情况
Export list for localhost:
/test 192.168.21.0/24
sh-4.2# chown -R nfsnobody.nfsnobody /test/ # 设置目录权限
exports文件配置格式:
FS共享的目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)
NFS客户端地址:
指定IP: 192.168.0.1
指定子网所有主机: 192.168.0.0/24
指定域名的主机:
指定域名所有主机: *.
所有主机: *
参数:
ro:目录只读
rw:目录读写
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区中,必要时才写入磁盘
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)
no_all_squash:与all_squash取反(默认设置)
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置)
no_root_squash:与rootsquash取反
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户
客户端操作
sh-4.2# yum -y install nfs-*
sh-4.2# mount -t nfs 192.168.21.35:/test /test
# 这里已经关闭了防火墙及selinuxsh-4.2# vi /etc/fstab
192.168.21.35:/test /test nfs defaults 0 0
windows也可以挂在NFS文件
参考地址:
心若向阳,无谓悲伤!
















