NFS 挂载失败首要排查服务端 nfs-server 和 rpcbind 是否运行;其次用 showmount 和 rpcinfo 验证共享导出与 RPC 注册;再检查网络连通性、 防火墙 端口(111/2049)及 /etc/exports 语法与权限;最后分析日志并显式指定 NFS 版本挂载。

确认服务端 NFS 与 RPC 是否就绪
挂载失败的第一环,往往卡在服务端没跑起来。在 NFS 服务器上执行:
- systemctl status nfs-server(或 nfs-kernel-server,取决于发行版)
- systemctl status rpcbind(NFSv3 必需;NFSv4 可省略,但建议保留)
若显示 inactive 或报 Unit not found,说明服务未安装或损坏。常见于 系统升级 后 systemd 或 nfs-utils 包依赖异常,可重装修复:
- debian/ubuntu:sudo apt install –reinstall nfs-kernel-server rpcbind systemd
- RHEL/centos:sudo yum reinstall nfs-utils rpcbind systemd
启动后务必运行 exportfs -r 重载配置,否则新改的 /etc/exports 不生效。
验证共享目录是否真正导出
别只信 配置文件,要用客户端命令实测服务端是否“看得见”:
- showmount -e
—— 正常应列出共享路径及授权网段;若报 clnt_create: RPC: Portmapper failure,说明 rpcbind 没通或被 防火墙 拦截 - rpcinfo -p
—— 应显示 100003 (nfs)、100005 (mountd) 等 端口 注册信息;缺项即服务未注册成功
如果 showmount 返回空,检查服务端 /etc/exports 是否存在语法错误(如漏括号、路径非绝对路径)、共享目录物理路径是否存在、权限是否可读(ls -ld /shared/dir)。
检查网络与防火墙连通性
NFS 对端口和协议敏感,不能只 ping 通就认为没问题:
- 基础连通:ping
- NFS 核心端口检测:telnet
2049 (TCP)和 nc -u111 (udp RPC) - 防火墙必须放行:111(tcp/udp)+ 2049(tcp/udp);若使用 NFSv3 还可能动态占用其他端口,此时需加 insecure 选项并开放 rpcbind 所分配的临时端口范围,或直接允许整个 RPC 服务
常见误操作:只开 2049 却忽略 111,导致 mount 请求根本无法完成 RPC 绑定。
分析日志与挂载参数细节
错误提示往往藏在日志里,而非终端一句话:
- 服务端查:sudo tail -20 /var/log/syslog | grep -i “nfs|rpc|export”(Ubuntu/Debian)或 /var/log/messages(RHEL)
- 客户端查:dmesg | tail -15 | grep nfs,或 journalctl -u nfs-client.target -n 20
- 特别注意日志中出现 illegal port —— 表明客户端用了高编号端口(>1024),需在 /etc/exports 对应条目加 insecure,例如:
/data 192.168.1.0/24(rw,sync,no_subtree_check,insecure)
挂载时建议显式指定 NFS 版本,避免自动协商失败:
mount -t nfs4 -o proto=tcp,vers=4.2 192.168.1.51:/data /mnt