9月8日晚重启 freeshell 1 号节点之后,其他节点通过 NFS 访问的外部存储,在文件加锁时会超时,这导致 freeshell 创建缓慢、SSH 无法登录等问题。该问题现已修复,非常抱歉此问题给您带来的不便。

问题的原因是9月8日 Freeshell NFS 故障,@zsj 暂时关闭了 NFS 服务。我在开启 nfs-kernel-server 服务(nfsd)后,测试从其他节点读写 NFS 正常,就没再管了。我以为 nfs-common 服务(statd、idmapd)中的 statd 是 NFS 客户端才需要使用的,而 idmapd 是 NFSv4 需要使用的(我们用的是 NFSv3,原因见此),就没有启动 nfs-common 服务。事实上,statd 为 NFSv3 提供了远程锁的支持,我们的 NFS 挂载参数里没有 nolock,也就是当 statd 服务未启动时,如果远程挂载的节点执行了文件加锁操作,NFS 客户端会等待服务器端上锁,但这个上锁操作是永远不能完成的。Freeshell 创建过程中设置 root 密码需要文件锁,SSH 登录也需要文件锁,因此这些操作无法正常完成。

从9月8日晚开始,就不断收到服务器报警邮件,但我并没有重视起来。今晚 sa514122 同学坚持给我报 bug,一开始我也是隔靴搔痒,没有认真去调查,甚至人肉修改了 freeshell 系统在检测到数据不一致时的锁定标志,让该同学重试。在继续报 bug 的情况下,我自己试着注册了个 freeshell 才发现问题真的存在。我对这种忽视问题的行为深深自责,感谢 sa514122 同学的 bug 反馈!