环境
类型 | 操作系统 | ip地址 | 共享目录 | 挂载目录 |
---|---|---|---|---|
NFS服务器 | CentOS 7.6 | 192.168.160.129 | /data/share | - |
NFS客户端 | CentOS 7.6 | 192.168.160.128 | - | /data/share |
根据红帽官网说明 Chapter 8. Network File System (NFS) - Red Hat Customer Portal,RHEL 7.4 以后,支持 NFS v4.2 不需要 rpcbind 了,但是如果客户端只支持 NFS v3 则需要 rpcbind 这个服务。
服务器端配置
- 安装nfs
# yum install -y nfs-utils
注意
只安装 nfs-utils 即可,rpcbind 属于它的依赖,也会安装上。
- 修改nfs配置文件
# vim /etc/exports
/data/share 192.168.160.128(rw, no_root_squash ,sync) 1
- 创建共享目录,并修改权限
若共享目录已存在,可无需创建,但依然要修改权限
# mkdir /data/share
# chmod 777 /data/share
- 启动服务2
请按顺序执行以下命令,否则nfs会启动异常
# systemctl enable rpcbind && systemctl start rpcbind
# systemctl enable nfs && systemctl start nfs
- 查看服务器共享的文件系统
# exportfs
/data/share 192.168.160.128
客户端配置
- 安装nfs
# yum install -y nfs-utils
- 启动服务
客户端无需启动nfs
# systemctl enable rpcbind && systemctl start rpcbind
- 查询nfs服务器信息3
# showmount -e 192.168.160.129
- 创建挂载点
# mkdir /data/share
- 挂载
# mount 192.168.160.129:/data/share /data/share
- 验证
# mount | grep 192.168.160.129
192.168.160.129:/data/share on /data/share type nfs4 (rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.160.128,local_lock=none,addr=192.168.160.129)
- 开机自动挂载
/etc/fstab 文件新增行记录
# vim /etc/fstab
192.168.160.129:/data/share /data/share nfs4 defaults 0 0
注脚
1. 扩展知识
nfs配置文件格式:
<输出目录> 客户端(选项:访问权限,用户映射,其他)
输出目录
是指NFS系统中所定义的共享给客户端使用的文件系统客户端
是定义网络中可以访问这个NFS共享目录的IP地址或网段或域名等
客户端常用的指定方式
- 指定ip地址的主机:192.168.160.128
- 指定一个子网:192.168.160.0/24 也可以写成:10.13.26.0/255.255.255.0
- 指定域名的主机:main.test.com
- 指定域中的所有主机:.test.com
- 所有主机:*
选项
用来设置输出目录的访问权限、用户映射等。
NFS主要有3类选项:
目录的访问权限
设置输出目录只读:ro
设置输出目录读写:rw用户映射选项
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)no_all_squash:与all_squash取反(默认设置)
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置) no_root_squash:与rootsquash取反
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)其它选项
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)
insecure:允许客户端从大于1024的tcp/ip端口连接服务器
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区中,必要时才写入磁盘
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
no_wdelay:若有写操作则立即执行,应与sync配合使用
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
2. 问题分享
场景一
- 问题描述
rhel 7.6 机器重启存在rpcbind、nfs服务状态异常情况,导致nfs服务挂掉情况,且无法手动start服务,报监听错误(Failed to listen on RPCbind Server Activation Socket.
) - 原因
rhel 7.6 上的rpcbind版本有更新(rpcbind-0.2.0-47.el7.x86_64),socket文件新增监听ipv6端口,但又因为我们搭建的机器(生产和非生产)默认都是关闭了ipv6
- 解决办法
关闭rpcbind对ipv6端口的监听,重启服务即可(或者启用ipv6(不推荐
))
1、用“#”注释掉与ipv6有关的配置
# vim /usr/lib/systemd/system/rpcbind.socket
2、重启服务
# systemctl daemon-reload
# systemctl start rocbind
# systemctl start nfs
场景二
该问题存在于rhel老版本以下(rhel 5、6)版本部分机器
-
问题描述
rpcbind服务已启动,并做开机启动配置,且在/etc/fstab配置挂载信息后,开机依然无法自动挂载nfs -
原因
由于rhel老版本(rhel 5、6)系统启动自动挂载网络文件需要依赖于netfs服务,且在部分机器上没有启动该服务,导致开机无法正常挂载nfs情况 -
解决办法
启动netfs服务,并做开机启动该服务
3. showmount -e 异常
客户端若出现以下情况
请按顺序执行以下操作:
- 服务器端
rhel 7版本执行
# systemctl stop nfs
# systemctl stop rpcbind
# systemctl start rpcbind
# systemctl start nfs
rhel 6版本执行
# /etc/init.d/nfs restart
- 客户端
# systemctl restart rpcbind