基于Java+SpringBoot+SSM云与糖蛋糕购物平台系统(源码+LW+调试文档+讲解等)/云与糖蛋糕平台/云与糖蛋糕系统/云与糖购物平台/云与糖购物系统/蛋糕购物平台系统/云与糖蛋糕商城
2026/1/9 1:54:25
网络文件系统(Network File System)是一种分布式文件系统协议,允许客户端计算机通过网络访问服务器上的文件,就像访问本地存储一样。
# 检查NFS相关服务状态systemctl status nfs-server systemctl status rpcbind systemctl status nfs-mountd# 启动/停止/重启NFS服务systemctl start nfs-server systemctl stop nfs-server systemctl restart nfs-server# 设置开机自启systemctlenablenfs-server systemctlenablerpcbind# 验证exports文件语法exportfs -v# 重新加载exports配置(不中断服务)exportfs -ra# 查看当前生效的共享exportfs -s# 基本格式:共享目录 客户端(选项) /data/share 192.168.1.0/24(rw,sync,no_root_squash) /home/public *.example.com(ro,async)# 添加新共享(立即生效)echo"/data/nfs_share 10.0.0.0/8(rw,sync,no_subtree_check)">>/etc/exports exportfs -ra# 临时取消共享exportfs -u10.0.0.0/8:/data/nfs_share# 完全移除共享并更新配置exportfs -ua# 取消所有共享vi/etc/exports# 编辑配置文件exportfs -ra# 重新应用# 查看所有已挂载的客户端showmount -a# 示例输出:# All mount points on nfs-server.example.com:# 10.0.1.100:/data/share# 10.0.1.101:/data/share# 10.0.2.50:/home/public# 仅显示客户端IP(不显示挂载点)showmount --no-headers -a|cut-d: -f1|sort-u# 查看当前客户端连接状态cat/var/lib/nfs/rmtab# 实时监控客户端连接变化watch-n2'cat /var/lib/nfs/rmtab'# 使用netstat查看NFS相关连接netstat-an|grep:2049netstat-tnp|grepnfsd# 显示NFS服务器统计信息nfsstat -s# 查看详细的连接信息nfsstat -c# 客户端统计nfsstat -s# 服务器统计# 监控实时连接watch-n1'nfsstat -c -n'# 查看NFSD线程状态cat/proc/net/rpc/nfsd# 查看客户端挂载信息cat/proc/fs/nfsd/clients/*/info2>/dev/null# 查看详细的导出统计cat/proc/fs/nfsd/exports#!/bin/bash# 查询特定客户端的挂载情况CLIENT_IP="10.0.1.100"echo"=== 客户端$CLIENT_IP的挂载信息 ==="# 方法A:从showmount输出过滤showmount -a|grep"$CLIENT_IP"# 方法B:检查连接状态ss -tnp|grepnfs|grep"$CLIENT_IP"# 方法C:查看详细的NFS会话nfsdclnts2>/dev/null|grep"$CLIENT_IP"#!/bin/bash# generate_nfs_clients_report.shREPORT_FILE="/tmp/nfs_clients_$(date+%Y%m%d_%H%M%S).log"echo"NFS客户端连接报告 - 生成时间:$(date)">$REPORT_FILEecho"=========================================">>$REPORT_FILEecho-e"\n1. 当前连接的客户端列表:">>$REPORT_FILEshowmount -a>>$REPORT_FILE2>&1echo-e"\n2. 唯一的客户端IP地址:">>$REPORT_FILEshowmount -a2>/dev/null|awk-F:'{print $1}'|sort-u>>$REPORT_FILEecho-e"\n3. 按共享目录分组的客户端:">>$REPORT_FILEshowmount -a2>/dev/null|awk-F:'{print $2}'|sort|uniq-c>>$REPORT_FILEecho-e"\n4. NFS服务器统计:">>$REPORT_FILEnfsstat -s>>$REPORT_FILE2>&1echo-e"\n5. 网络连接状态:">>$REPORT_FILEss -tnp|grep:2049>>$REPORT_FILE2>&1echo"报告已生成:$REPORT_FILE"# 实时监控NFS操作nfsstat -c -s -2# 每2秒刷新一次# 使用iostat监控磁盘I/Oiostat -x2|grep-E"^sd|nfs"# 使用nfsiostat(如可用)nfsiostat2# 监控NFSD线程psaux|grepnfsdtop-p$(pgrep nfsd|tr'\n'','|sed's/,$//')# 调整NFSD线程数(在/etc/sysconfig/nfs中)# 默认是8,根据需求调整RPCNFSDCOUNT=32# 调整读写缓冲区大小(在/etc/nfs.conf或/etc/sysctl.conf中)# 增加NFS读写缓冲区echo"sunrpc.tcp_slot_table_entries=128">>/etc/sysctl.confecho"sunrpc.udp_slot_table_entries=128">>/etc/sysctl.conf sysctl -p# 优化TCP参数echo"net.core.rmem_max = 16777216">>/etc/sysctl.confecho"net.core.wmem_max = 16777216">>/etc/sysctl.conf# 系统日志中的NFS相关信息journalctl -u nfs-server journalctl -u rpcbind# 特定时间段的日志journalctl -u nfs-server --since"2 hours ago"# 查看内核NFS日志dmesg|grepnfsdmesg|grepmount# RPC调试信息rpcinfo -p localhost# 1. 检查服务是否正常运行rpcinfo -p|grepnfs# 2. 检查端口是否监听netstat-tulnp|grep-E"2049|111"# 3. 测试本地挂载mount-t nfs localhost:/data/share /mnt/testumount/mnt/test# 4. 检查防火墙规则firewall-cmd --list-all|grepnfs iptables -L -n|grep-E"2049|111"# 5. 验证客户端访问权限exportfs -v# 查看拒绝的连接cat/var/log/messages|grepnfs|grepdenied# 检查配额限制repquota -a|grepnfs# 验证文件权限ls-la /data/share getfacl /data/share# 1. 限制共享范围(最小权限原则)# 在/etc/exports中使用精确的IP或网段# 2. 使用只读共享(当不需要写权限时)/data/backups10.0.1.0/24(ro,sync)# 3. 避免使用no_root_squash# 除非绝对必要,否则使用root_squash# 4. 启用NFSv4(更安全)# 在/etc/nfs.conf中设置[nfsd]vers4=yvers3=n# 5. 配置防火墙firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=mountd firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --reload# 使用主机名代替IP(结合DNS)/data/share client-hostname.example.com(rw,sync)# 设置匿名用户映射/data/public192.168.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)# 定期审计客户端访问#!/bin/bash# audit_nfs_access.shLOGFILE="/var/log/nfs_access_audit.log"echo"$(date): NFS access audit">>$LOGFILEshowmount -a>>$LOGFILEss -tnp|grep:2049>>$LOGFILE#!/bin/bash# monitor_nfs_clients.shINTERVAL=60# 监控间隔(秒)LOG_FILE="/var/log/nfs_client_monitor.log"echo"=== NFS客户端连接监控启动于$(date)===">>$LOG_FILEwhiletrue;doTIMESTAMP=$(date"+%Y-%m-%d %H:%M:%S")# 获取当前连接数CONN_COUNT=$(showmount -a2>/dev/null|wc-l)# 获取唯一客户端数UNIQUE_CLIENTS=$(showmount -a2>/dev/null|awk-F:'{print $1}'|sort-u|wc-l)# 记录到日志echo"[$TIMESTAMP] 连接数:$CONN_COUNT, 独立客户端:$UNIQUE_CLIENTS">>$LOG_FILE# 如果连接数异常增加,发出警告if[$CONN_COUNT-gt100];thenecho"[$TIMESTAMP] 警告: NFS连接数过高 ($CONN_COUNT)">>$LOG_FILE# 可以添加邮件通知# mail -s "NFS连接警告" admin@example.com < /tmp/nfs_alert.txtfisleep$INTERVALdone#!/bin/bash# cleanup_stale_nfs.sh# 清理长时间未活动的NFS连接STALE_TIME=3600# 1小时(秒)echo"开始清理过期的NFS连接..."# 方法:检查并清理旧的rmtab条目forentryin$(cat/var/lib/nfs/rmtab2>/dev/null);doCLIENT=$(echo$entry|cut-d: -f1)MOUNT=$(echo$entry|cut-d: -f2)# 检查客户端是否仍然连接if!ping-c1-W1$CLIENT>/dev/null2>&1;thenecho"清理断开的客户端:$CLIENT->$MOUNT"# 可以执行exportfs -u进行清理fidoneecho"清理完成。"| 命令 | 功能说明 | 常用参数 |
|---|---|---|
showmount | 显示挂载信息 | -a所有客户端,-e导出列表 |
exportfs | 管理导出目录 | -ra重载所有,-u取消共享 |
nfsstat | 显示NFS统计 | -s服务器端,-c客户端 |
rpcinfo | 显示RPC信息 | -p显示端口映射 |
mount | 挂载测试 | -t nfs指定NFS类型 |
ss/netstat | 网络连接查看 | 查看2049端口连接 |
最后更新: $(date +%Y-%m-%d)
适用系统: RHEL/CentOS 7+, Ubuntu 18.04+
注意事项: 生产环境操作前建议在测试环境验证,关键操作做好备份。