两天前,我的 NFS 卷出现了问题。该问题似乎与写入操作有关,以下操作需要较长时间(10 秒)才能完成:
sed -i
rm
- 编辑并保存
vim
使用strace
,我可以看到sed -i
会挂起在rename("./sedXXXXX", ...)
,或者 close(4)
给出-1 EIO
(输入/输出错误)。此外,对于每个sed -i
调用(即使它有效),NFS: nfs4_reclaim_open_state: unhandled error -13
中都会报告一行dmesg
。
最后,长时间的等待不会每次发生,并且命令将“随机”完成而没有问题。
系统采用CentOS 7.4,内核为:
$ uname -r
3.10.0-693.5.2.el7.x86_64
您知道可能出了什么问题吗?或者我如何才能更准确地追踪问题?
提前致谢 !
编辑按照grawity
的建议,设置rpcdebug -m nfs -s all
会导致输出中出现更多打印dmesg
,特别是:
$ dmesg | grep -i error | grep -i nfs
nfs41_handle_sequence_flag_errors: "IP_OF_NFS_SERVER" (client ID 22b1f26668d8b0fc) flags=0x00000040
nfs41_sequence_process: Error 0 free the slot
但我不知道这是否相关...
因此,问题可能与 NFS 缓存问题有关(请参阅下面的进一步诊断)。按照本文,我最终
hard,async,tcp
在客户端/etc/fstab
和sync
服务器上使用了参数/etc/exports
。卸载 NFS、重新启动服务器和客户端上的服务并重新安装即可解决问题。
进一步诊断
ls
或时,我遇到了类似的错误du
strace
with时ls
,我发现系统在getents()
调用时挂起了,这让我看到了这个StackOverflow 帖子,指向 NFS 缓存问题。