NFS简介
NFS(Network File System)即网络文件系统,用于计算机之间通过网络共享资源。
简单来说:将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以读写位于远端NFS服务器上的文件,就像访问本地文件一样
场景
多台服务器共享同一份静态资源
安装配置
- 服务端安装
#服务端安装nfs(192.168.1.100)
yum install nfs-utils rpcbind -y
#创建共享目录
mkdir -p /opt/nfs
#编辑/etc/exports
vim /etc/exports
/opt/nfs 192.168.1.0/24(rw,async,no_root_squash) #具体客户端ip和策略
#重新挂载导出
exportfs -ra
# 开机启动
systemctl enable rpcbind
systemctl enable nfs
#启动nfs
systemctl start rpcbind; #一定要先启动rpc
systemctl start nfs;
# centos6 改成service rpcbind start;service nfs start
- 客户端安装
#安装nfs(客户端) 192.168.1.101
yum install nfs-utils rpcbind -y
#创建目录
mkdir /mnt
#挂载
mount -t nfs 192.168.1.100:/opt/nfs /mnt
#取消挂载
umount -v /mnt
# 开机自动挂载
vim /etc/fstab
192.168.1.100:/opt/nfs /mnt nfs defaults 0 0
在客户端机器/mnt 目录的操作就像在服务端/opt/nfs 操作一样,其实操作是同一个目录文件,只有服务器端是真实存储
/etc/exports
服务端配置文件
/opt/nfs 192.168.1.0/24(rw,async,no_root_squash)
格式:/path/to/somedir CLIENT_LIST
多个客户端使用空白字符分隔,每个客户端小括号里定义客户端访问特性
ro:只读 rw:读写
sync 数据会同步写入到内存与硬盘中
async 数据会先暂存内存root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户,非root用户映射成NFS服务器跟客户端一样用户id的用户(默认值)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员, 非root用户映射成NFS服务器跟客户端一样用户id的用户(存在安全隐患,不建议使用)
all_squash 不论登入 NFS 的使用者身份为何, 均被映射为匿名用户, 通常也就是 nobody(nfsnobody)anonuid, anongid 指定映射的来宾账号的UID和GID
当NFS客户端以非root访问时,映射为NFS服务器的nobody/(nfsnobody),
vim /etc/exports
#nfs服务端添加用户501
useradd -u 501 webrunner
#所有NFS使用者都映射为501用户,501组
/opt/nfs 192.168.1.0/24(rw,async,all_squash,anonuid=501,anongid=501)
#客户端无论以什么用户身份创建文件,都映射成501用户和501组
cd /mnt
touch test.txt
#查看NFS客户端 test.txt 的属主为用户501,组501
#查看NFS服务端 test.txt 的属主为用户501,组501,由于存在501用户,直接显示webrunner 名称
常见命令
exportfs(服务器端使用)
exportfs -ra #重新挂载导出
# -a:跟-r或-u选项同时使用,表示重新挂载所有文件系统或取消导出所有文件系统;
# -r: 重新导出
# -u: 取消导出
# -v: 显示详细信息
showmount
showmount -e #查看本机NFS服务器导出文件系统,以及客户端列表,与/etc/exports 配置文件一致
rpcinfo
rpcinfo -p #显示所有的 port 与 program 的信息
原理
NFS 涉及两个服务RPC和NFS,当客户端访问NFS服务器文件时,RPC client端通过(port 111)连接RPC server,RPC server找到对应的NFS注册端口(前提:RPC先启动,NFS服务启动向RPC注册信息,包括端口号),回报给客户端,客户端通过端口连接NFS server端,实现数据通讯。
主要进程端口 rpcbind/portmapper(tcp和udp上111),nfsd(tcp和udp上2049),mountd(默认半随机分配),quotad(默认随机分配),编辑/etc/sysconfig/nfs 可以固定mountd和quotad进程的端口
主要日志目录/var/lib/nfs