CentOS7-搭建NFS服务、客户端NFS无法写入

  • 1.Server安装软件:nfs-utils
  • 2.Server建立共享文件夹
  • 3.Server修改配置文件
  • 4.Server重启服务:nfs-server
  • 5.Client验证
  • 5.1 排查错误
  • 6.Client挂载使用
  • 6.1.Client建立挂载文件夹
  • 6.2.Client挂载
  • 6.3.Client开机自动挂载
  • 6.4.Client测试写入读取


1.Server安装软件:nfs-utils

  • NFS服务:nfs-server
yum -y install nfs-utils

2.Server建立共享文件夹

mkdir /public01			#开放只读权限
mkdir /public02			#开放可读写权限

echo "i am read" > /public01/r0.txt						#分别写入一个文本
echo "i am read and write" > /public02/rw.txt

3.Server修改配置文件

  • 配置内容格式:共享文件夹路径 客户端地址1(ro或rw等控制参数) 客户端地址2(ro或rw等控制参数)
vim /etc/exports
#####写入以下内容#######
/public01	*(ro)			#表示所有客户均可访问(具有只读权限)
/public02	*(rw)			#表示所有客户均可访问(具有可读写权限)

4.Server重启服务:nfs-server

systemctl restart nfs-server		#重启nfs-server服务

service nfs-server status			#查看nfs-server服务状态
Redirecting to /bin/systemctl status nfs-server.service
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: active (exited) since 四 2022-03-31 10:58:28 CST; 35s ago		#服务正在运行
  Process: 3927 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
  Process: 3909 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 3907 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 3909 (code=exited, status=0/SUCCESS)
    Tasks: 0
   CGroup: /system.slice/nfs-server.service
  • 查看共享路径:
  • showmount -e ServerIP
showmount -e 192.168.162.134			#服务端IP:192.168.162.134

5.Client验证

showmount -e 192.168.162.134			#查看服务端共享路径
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

5.1 排查错误

  • 建议使用 方法三
以上错误提示是指:服务端的防火墙上默认没有开启nfs服务相应的端口
  1. 查看防火墙信息
firewall-cmd --get-default-zone 		#查看防火墙默认状态
public									#允许本机服务:sshd,ping,dhcp
firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
  1. 方法一:Server直接关闭防火墙
systemctl stop firewalld			#Server关闭防火墙

Client验证:能显示共享路径,证明可以挂载使用

centos nfslock 启动 centos nfs server_centos

  1. 方法二:Server防火墙打开允许所有(trusted)
firewall-cmd --set-default-zone=trusted 		#防火墙设置运行所有
success											#成功
firewall-cmd --reload 							#刷新防火墙策略
success											#成功

Client验证:能显示共享路径,证明可以挂载使用

centos nfslock 启动 centos nfs server_音视频_02

  1. 方法三:Server防火墙只开启NFS相关服务
    nfs 、 rpc-bind 、 mountd
firewall-cmd --set-default-zone=public 				#防火墙切换回public公开状态
success												#成功

firewall-cmd --zone=public --add-service=nfs		#public公开模式添加:nfs服务
success												#成功
firewall-cmd --zone=public --add-service=rpc-bind	#public公开模式添加:rpc-bind服务
success												#成功
firewall-cmd --zone=public --add-service=mountd		#public公开模式添加:mountd服务
success												#成功

Client验证:能显示共享路径,证明可以挂载使用
showmount -e 192.168.162.134
Export list for 192.168.162.134:
/public02 *
/public01 *

6.Client挂载使用

6.1.Client建立挂载文件夹

mkdir /mnt/test01			#用来存放、public01(只读)
mkdir /mnt/test02			#用来存放、public02(可读写)

6.2.Client挂载

  • 挂载格式: mount Server IP:共享文件夹路径 挂载到Client路径
mount 192.168.162.134:/public01  /mnt/test01				#Server:public01 挂载到 Client: /mnt/test01
mount 192.168.162.134:/public02  /mnt/test02				#Server:public02 挂载到 Client: /mnt/test02
df -h
文件系统                   容量  已用  可用 已用% 挂载点
192.168.162.134:/public01   47G  4.5G   43G   10% /mnt/test01
192.168.162.134:/public02   47G  4.5G   43G   10% /mnt/test02

6.3.Client开机自动挂载

  • 配置文件: /etc/fstab
  • 配置格式:Server IP:共享文件夹路径 挂载到Client路径 文件系统类型 挂载参数 备份 检查
vim /etc/fstab						#修改开机自启配置文件

....
<file system>       			 <dir>      	<type>   	 <options>     	<dump> 	<pass>
/dev/mapper/centos-swap swap                    swap    	defaults        	0 		0
192.168.162.134:/public01       /mnt/test01     nfs     	defaults,netdev 	0 		0
192.168.162.134:/public02       /mnt/test02     nfs     	defaults,netdev 	0 		0

6.4.Client测试写入读取

  • 分别测试两个文件读取正常
cat /mnt/test01/r0.txt 
i am read
cat /mnt/test02/rw.txt 
i am read and write
  • 分别测试写入
echo "haha" >> /mnt/test01/r0.txt
bash: /mnt/test01/r0.txt: 只读文件系统				#只读文件,所以不能写入
echo "haha" >> /mnt/test02/rw.txt
bash: /mnt/test02/rw.txt: 权限不够					#上面第三步已经开放写入权限,这是为什么?

/public02 *(rw) #表示所有客户均可访问(具有可读写权限)

检查Server端 /public02文件夹权限

ll -d /public02								#检查Server  /public02文件夹权限
drwxr-xr-x. 2 root root 20 3月  31 13:24 /public02				#其他人只有(rx)权限

Server端对/public02文件夹下开放其他人 写入(w)权限

chmod -R o+w /public02

Client端再次测试写入正常

echo "haha" >> /mnt/test02/rw.txt
cat /mnt/test02/rw.txt
i am read and write
haha

完。