挂载失败需按顺序排查四环节:服务端是否导出(exportfs -v、服务状态、rpcinfo)、客户端连通性(ping、showmount)、mount参数准确性(路径、挂载点、nfs版本)、挂载点权限及selinux限制。

能挂上,但挂不上就卡在几个固定环节:服务端没导出、客户端连不通、mount参数写错、或挂载点权限/SELinux拦住了。别急着重试,先按顺序查这四块。
服务端有没有真正导出目录?
很多“挂载失败”其实压根没走到客户端,服务端压根没生效。重点看三件事:
-
exportfs -v必须输出你配置的共享路径,且显示 client IP 或网段(比如192.168.1.0/24),如果空输出或报错,说明/etc/exports没生效 -
systemctl is-active nfs-server(RHEL/CentOS)或nfs-kernel-server(Debian/Ubuntu)必须是active,不是inactive或failed -
rpcinfo -p localhost要能看到nfs、mountd、nlockmgr三项,缺一个就代表 RPC 注册失败
常见坑:exportfs -a 执行后不报错,但实际没 reload;或者改了 /etc/exports 忘了运行它;又或者用了通配符 * 却没关 SELinux 的 nfs_export_all_ro 布尔值。
客户端能不能跟服务端“说上话”?
网络层不通,mount 再对也没用。分两步验证:
- 基础连通:
ping -c 3 <strong><font color="green">服务端IP</font></strong>要通;不通就查路由、网卡、中间交换机或防火墙 - NFS 服务可达:
showmount -e <strong><font color="green">服务端IP</font></strong>必须列出共享目录;如果报clnt_create: RPC: Port mapper failure,大概率是rpcbind没启、防火墙没放rpc-bind端口(111),或服务端firewalld没开mountd服务
注意:showmount 依赖 RPC portmapper,它和 NFS 主服务是解耦的——nfs-server 启了,rpcbind 可能还停着,尤其 systemd 新版本默认不自动拉起 rpcbind。
mount -t nfs 命令怎么写才不报错?
最简能通的命令是:sudo mount -t nfs <strong><font color="green">服务端IP</font></strong>:/path/to/share /mnt/local。但实际中容易栽在这些细节上:
- 路径必须完全匹配服务端
/etc/exports里写的路径,比如服务端写的是/data/nfs,就不能写成/data/nfs/(末尾斜杠) - 挂载点目录(如
/mnt/local)必须存在且为空,mount不会自动创建父目录 - 如果服务端强制要求 NFSv4(比如 Azure NFS 或较新内核),得加
-o nfsvers=4.1;NFSv3 默认走 UDP,局域网没问题,但某些云环境或防火墙会拦截 UDP,可加-o proto=tcp - 遇到
stale file handle错误,通常是服务端改了/etc/exports但没exportfs -r,或客户端之前挂过又异常断开,先sudo umount -f /mnt/local再重试
/etc/fstab 自动挂载为什么开机失败?
/etc/fstab 里写错一行,系统可能卡在启动阶段。关键三点:
- 格式必须严格:
<strong><font color="green">服务端IP</font></strong>:/path/to/share /mnt/local nfs defaults,_netdev 0 0——_netdev是必须加的选项,告诉 systemd 等网络就绪再挂载,否则网卡还没 up 就去 mount,必然失败 - 不要用
defaults硬套,生产环境建议显式指定:nfsvers=4.1,hard,intr,rsize=1048576,wsize=1048576,timeo=14,避免默认值在不同内核版本间行为不一致 - 加完 fstab 后,务必手动执行
sudo mount -a测试,而不是等重启;报错信息比开机日志直观得多
最常被忽略的是:fstab 条目里写的挂载点目录(如 /mnt/local)在系统启动时可能还不存在,而 mount -a 不会自动创建它——得配合 systemd tmpfiles 或提前在 initramfs 里建好,或者改用 systemd-mount 单元管理。











