磁盘与文件系统51 条

NFS 挂载与排错

中小企业共享文件的主流方案:服务端 exports,客户端 mount -t nfs;排错看 showmount、rpcinfo 与内核 nfs 错误信息。

Linux 运维命令速查系统更新于 2026-10-13

NFS 的组成与排错入口

NFS 是中小企业共享文件的主流方案:服务端在 /etc/exports 声明导出目录与允许的客户端范围,客户端用 mount -t nfs 服务器:/路径 挂载。排错主要看四处:服务端 exportfs -v 的导出与参数、客户端 showmount/findmnt 的实际挂载、rpcinfo 的端口注册(v3 相关的 rpcbind 与 mountd)、以及内核 dmesg 里的 nfs 报错。v4 与 v3 的端口与防火墙要求不同,先确认版本再查连通性。

基本信息

适用平台Linux(服务端 nfs-utils / nfs-kernel-server,客户端内核自带)
客户端语法mount -t nfs 服务器:/导出路径 /挂载点 -o 选项
常用选项vers、soft/hard、timeo、retrans、_netdev、noatime
排错工具showmount -e、exportfs -v、rpcinfo -p、findmnt、nfsstat
端口v4 只需 2049/tcp;v3 另需 rpcbind 与 mountd 等动态端口

典型使用场景

  • 多台应用服务器共享上传目录或静态资源(只读分发用 ro 更稳)
  • 集中存放备份与归档,便于统一容量管理
  • 虚拟化与容器共享数据目录或镜像仓库
  • 跨部门文档共享,用 squash 选项收敛权限
  • 排查挂载后卡死、写入报 stale file handle、开机卡在挂载阶段

客户端挂载与检查

客户端挂载与检查
sudo showmount -e 10.0.0.8          # 先确认服务端到底导出了什么
sudo mount -t nfs 10.0.0.8:/data /mnt/nfs -o vers=4.2,soft,timeo=30,retrans=3
findmnt /mnt/nfs                    # 复核实际生效的版本与选项
# fstab 持久化;_netdev 让网络就绪后再挂载,避免开机卡住
10.0.0.8:/data  /mnt/nfs  nfs  vers=4.2,soft,timeo=30,retrans=3,_netdev,noatime  0 0
sudo exportfs -v                    # 服务端:查看导出目录与客户端范围
sudo exportfs -ra                   # 服务端:改完 /etc/exports 后重新生效
sudo rpcinfo -p 10.0.0.8 | head     # v3 环境确认 rpcbind/mountd 端口已注册
sudo dmesg | grep -i nfs | tail     # 内核侧报错:超时、stale handle 等

挂载参数取舍

选项作用取舍
vers=4.2指定协议版本v4 只需 2049/tcp,跨防火墙简单;老存储可能只支持 v3
soft超时后返回错误避免无限挂起,但可能把 IO 错误抛给应用
hard无限重试直到成功一致性更好,代价是进程可能长时间处于不可中断状态
timeo / retrans超时与重试参数soft 场景必须给合理上限,否则重试过密
noatime不更新访问时间读多写少的共享目录可明显减少写流量
数据库文件、需要强一致的应用不要放在 NFS 上;确需共享就用 hard 并让应用自己做超时控制,用可接受的卡顿换数据一致性。
fstab 里不加 _netdev(或 x-systemd.automount),网络未就绪时会拖慢甚至卡住开机,远程维护的机器尤其危险;改 fstab 前先留好救援通道。

易错点

  • fstab 少写 _netdev:网络未就绪时挂载失败或阻塞启动,严重时需进单用户模式修复
  • soft 与 hard 选错:soft 在网络抖动时给应用抛 IO 错误,hard 在网络故障时让进程长期不可中断
  • 改完 /etc/exports 忘记 exportfs -ra:客户端看到的仍是旧权限范围,误判为服务端未生效
  • 按 v4 的端口要求排查 v3 环境的防火墙:v3 需要 rpcbind 与 mountd 的动态端口,规则完全不同
  • 把数据库文件放上 NFS:文件锁与延迟特性都不适合,容易出现数据损坏

数据来源与参考

  • man 5 nfs
  • man 5 exports
  • man 8 mount(nfs 选项)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌