往 NFS 挂载目录写日志时进程一直 D 状态不返回,df 要卡几秒才出结果,ls 也挂住,网络是通的但服务端 nfsd 没响应,整台机器像被冻住。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

nfsiostat 2 3
cat /proc/self/mountstats | grep -A3 nfs
timeout 3 stat /mnt/nfs
rpcinfo -p <nfs-server-ip>

NFS 默认是硬挂载并且无限重试,服务端不回应时客户端就一直等,stat 和 df 跟着阻塞,一个挂载点能把整台机器的运维命令拖死,先查服务端状态。这一点先确认清楚,后面就不用反复试。

「NFS 挂载卡死」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

具体做法是,用 nfsiostat 看该挂载点的 RPC 延迟和重传次数 延迟飙高就是它;对比服务端 showmount 与链路状态排除网络问题 先分清是谁的锅;评估改成 soft 挂载加 timeo 重传 或者本地落盘兜底 硬挂载的取舍要想清楚。

改完照着核一遍,stat 该目录三百毫秒内返回 写入不再卡在 D 状态 业务日志也正常滚动。

作者 9823189