CentOS搭建NFS服务、windows挂载权限问题; NFS读写缓慢调优
CentOS搭建NFS服务、windows挂载权限问题
1. CentOS和统信UOS(与ubuntu一样)命令不一样,但操作大同小异,参考如下:
https://blog.csdn.net/wangzongyu/article/details/127009158
截图如下:
![]()
如上图进行操作
(注意:windows挂载linux的NFS时必须添加计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default 新建AnonymousGig和AnonymousUid (QWORD(64位值)),其值都设置为。并重启操心系统方可进行文件写操作,否则会报无权限操作)
centOS7的nfs服务端使用固定端口并启用防火墙开放
# 防火墙常用关闭、启动命令 ,详细请看 https://www.cnblogs.com/zdyang/p/17484160.html systemctl stop firewalld #关闭防火墙 systemctl disable firewalld #开机不自启防火墙 systemctl start firewalld #启动防火墙 systemctl enable firewalld #开机自启防火墙 systemctl status firewalld #来检查防火墙状态,如果显示 "active (running)",则表示防火墙已经成功启动并正在运行中。
参考地址:https://blog.csdn.net/jxlhljh/article/details/121588980
nfs通信是使用udp或tcp协议进行的,上面的nfs环境是建立在nfs服务器防火墙关闭的情况下的搭建,即需要已经放通相关的端口,一般线上环境要求较高,会开启防火墙并授权一些策略来控制访问,
由于nfs默认除了用111(portmapper使用,客户端向服务器发出NFS文件存取功能的询问请求)和2049(nfs使用)端口是固定的,其他的几个端口是随机的,因此需要在nfs服务器上配置成固定的端口,再通过防火墙进行开放
1.修改配置文件
vi /etc/sysconfig/nfs #在最后加上以下配置 RQUOTAD_PORT=30001 LOCKD_TCPPORT=30002 LOCKD_UDPPORT=30002 MOUNTD_PORT=30003 STATD_PORT=30004
- 重启服务 rpcbind 和 nfs
systemctl restart rpcbind
systemctl restart nfs
3.重新查看端口情况
rpcinfo -p localhost,可看到端口已经使用固定的端口
(重启nfs后,如发现 有的端口不是设定的(eg:status端口不是设定的30004),reboot重启下操作系统再看就OK了)

4.接下来进行相关的防火墙开放,授权在客户端机器172.20.1.79上能访问
#centOS7防火墙配置文件是/etc/firewalld/zones/public.xml #在 CentOS7 系统中,默认使用的防火墙管理工具是 firewalld,而非传统的 iptables 命令行工具 #nfs之防火墙 172.20.1.79为客户机ip (防火墙为启动状态下面命令才会生效) firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.20.1.79" port protocol="tcp" port="111" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.20.1.79" port protocol="udp" port="111" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.20.1.79" port protocol="tcp" port="2049" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.20.1.79" port protocol="udp" port="2049" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.20.1.79" port protocol="tcp" port="30001-30004" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.20.1.79" port protocol="udp" port="30001-30004" accept" #更新防火墙规则 firewall-cmd --reload #查看所有已开放端口: firewall-cmd --list-all
配置完成后执行 firewall-cmd --list-all 命令如下图:

2.windows读写linux搭建的NFS内文件是比较慢,调优
https://blog.csdn.net/yysalad/article/details/117366232
截图如下:

上面的执行OK,下面这部分我是AI查的,讲的很详细,但在客户端(windowsserver2016)执行时,报错,执行不了,权当了解下先:
挂载命令优化:
# 兼顾速度+稳定性的通用挂载命令(混合文件/局域网场景) mount -o rw,codepage=utf8,rsize=1048576,wsize=1048576,hard,timeout=5,retry=2 \\NFS服务器IP(或共享名) 本地盘符: eg: mount -o rw,codepage=utf8,rsize=1048576,wsize=1048576,hard,timeout=5,retry=2 \\192.168.1.200\NFS X:
-o 是 **“选项(options)” 的缩写 **,作用是指定挂载时的额外配置参数(如权限、编码、传输规则等)
无论是 Windows 的 NFS 客户端mount命令,还是 Linux 的mount命令,-o的核心用途都是传递多个挂载参数,参数之间用逗号分隔(无需空格)
| 参数 | 含义 & 单位 | 默认值 | 通用作用(适配文件传输 / 同步场景) | 不同场景最优配置 | 关键注意事项 |
|---|---|---|---|---|---|
rw |
挂载权限模式,无单位 | 未指定时默认ro(只读) |
定义 NFS 客户端挂载后的读写权限:
rw:允许对共享目录执行读写 / 文件传输 / 同步操作;
ro仅能读取,无法写入 / 传输文件。 |
- 写入 / 传输 / 备份场景:rw(必选)
ro(更安全) |
需服务端/etc/exports同步配置rw,否则客户端指定rw也会实际只读 |
codepage=utf8 |
文件名编码格式,无单位 | gb2312(Windows 默认) |
指定 NFS 客户端解析文件名的字符编码:
utf8:适配 Linux(UTF-8)/Windows 跨系统编码,避免文件名乱码、文件传输 / 比对时识别错误;
gb2312易导致非 GBK 编码文件名乱码。 |
- 含中文 / 非 ASCII 文件名:codepage=utf8(必选)
gb2312/utf8均可 |
需服务端系统 另外有的用lang参数替换codepage参数 |
rsize=1048576 |
读块大小,字节(B) | 4096(4KB) |
设置客户端从 NFS 服务端读取数据的单次块大小:
|
- 大文件(>100MB):1048576(1MB)/2097152(2MB)
65536(64KB)
1048576(兼顾) |
最大值不超 4MB(4194304),否则因网络 MTU 限制易分包重传,反而降低传输速度 |
wsize=1048576 |
写块大小,字节(B) | 4096(4KB) |
设置客户端向 NFS 服务端写入数据的单次块大小:
|
- 大文件(>100MB):1048576(1MB)/2097152(2MB)
65536(64KB)
1048576(兼顾) |
需与rsize保持一致,避免读写块大小不匹配导致性能损耗;NFSv4 默认支持该配置 |
hard |
挂载超时策略,无单位 | soft(软挂载) |
定义网络超时后的处理逻辑:
hard:超时后持续重试操作,保障文件传输 / 同步的稳定性;
soft超时直接失败,易导致传输中断。 |
- 稳定性优先(定时备份 / 大文件传输):hard(必选)
soft |
如设置为hard,若服务端长时间离线,客户端对挂载盘的操作会卡住,需先执行net use 盘符: /delete卸载 |
timeout=10 |
单次操作超时时间,秒 | 3.2秒 |
设置单次 NFS 操作的超时等待时间:
|
- 局域网(延迟 < 10ms):5-10秒
15-30秒
5秒 |
值过大(>60 秒)会导致无响应时等待过久,影响传输任务的失败感知速度 |
retry=3 |
超时后重试次数,次数 | 1次 |
设置超时后的重试次数:
|
- 局域网(低波动):2-3次
5-8次
1-2次 |
总等待时间 = timeout×retry,避免总等待过久(如timeout=10+retry=8=80 秒) |
3.文件名中文乱码
1) centOS对于中文文件名乱码
CentOS 中文文件名乱码的核心原因是 编码不一致。CentOS优先统一编码为 UTF-8(Linux 生态默认推荐,兼容性最强)
1.先通过命令确认 CentOS 当前的编码配置 locale # 查看所有编码相关环境变量 2.编辑系统编码配置文件: vi /etc/locale.conf # CentOS 7+/8+/9+ 通用(永久生效) 3.写入以下内容(覆盖原有内容): LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 # 强制所有子进程继承 UTF-8 编码 4.保存退出(:wq),然后生效配置(无需重启,临时生效) source /etc/locale.conf 5.再次查看 locale

2)centOS中文文件名正常,但共享到windows客户端后,在windows客户端查看文件名为中文乱码
windows默认编码GBK,centOS为UTF-8 导致。不过这个没有解决呢还
本文来自博客园,作者:东方飘雪,转载请注明原文链接:https://www.cnblogs.com/zdyang/p/17482261.html
浙公网安备 33010602011771号