背景:一个奇怪的问题,本地 NFS Server 系统里面,NFSv4 callback 状态为 D,并且存在 mount nfs 的进程 D 状态,重启 nfs server 进程之后,其他 client 能正常 mount nfs ,但 nfs server 一直无法在本地挂载,只能重启服务器才能恢复正常
初步日志检查:重启前,nfs server 本地挂载会堵塞在 nfs4_try_mount 这一步;重启服务器之后,挂载日志能看到 nfs4_try_mount 之后就开始 get client cookie 以及之后的操作,并且挂载正常
目的:打算模拟将 NFSv4 callback 进程设置为 D 状态,然后重启 nfs server 进程,看是否能复现上面情况
已测试的无效操作,下面操作有单独操作,也有组合操作过:
- 停止 nfs server 进程,本地执行大批量 df/mount -t nfs xxxx 的命令
- 通过 stress-ng 将本地 cpu 、io 等负载打满,然后再批量 mount
- 手动 strace 、gdb 等命令指向 NFSv4 callback 进程,打算手动 sleep ,但提示无法找到对应进程(测试机,root 权限)
待解决:是否有其他方案能定位原因?