先看现象。CentOS 7.9 做 NFS 服务端,客户端挂载时 mount.nfs 报 access denied by server while mounting,服务端 rpcinfo -p 能看到 nfs 和 mountd 都在监听。
这类报错背后常见的原因有几处,逐个排除就行。exports 里只写了 192.168.1.0/24,客户端实际走的是 10.0.0.0/8 的内网地址。还有一种是改完 exports 没有执行 exportfs -ra,内核里还是旧的导出表。
少数情况下是客户端用 NFSv4 挂载,导出的是 /data 子目录,路径层级对不上。
不容易想到的是,服务端的 root_squash 把 root 映射成 nobody,写权限被拒绝。
动手时先在服务端看当前生效的导出表
exportfs -v
随后确认客户端源地址和导出网段对得上
ip -4 addr show && showmount -e 10.0.0.5
补齐网段后重新导出
exportfs -ra && exportfs -v | grep data
客户端指定版本重新挂载
mount -t nfs -o vers=4.1 10.0.0.5:/data /mnt/data
隔了一天再看,现象没变,说明不是偶发。
恢复的判定其实很直接。客户端挂载不再报 access denied,df 能看到服务端的容量,在挂载点建文件后服务端属主正确。
提醒一点。showmount -e 的结果来自 mountd,和内核导出表可能不一致;exports 改完必须 exportfs -ra,只重启 nfs 服务不一定刷新。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
