我有一个案例,其中一台机器有多个 NFS 挂载。偶尔,其中一个 NFS 服务器会因为硬件问题而丢失其设备,需要重新启动才能修复。
然后,用户通过 ftp 之类的东西进来,对目录执行 ls,然后挂起。然后他们通常会感到沮丧并重试。这最终会因为耗尽所有 ftp 会话而导致客户端计算机挂起。
有没有办法让 NFS 放弃挂载,这样当他们执行 ls 时,他们只会得到一个空目录?或者有什么方法可以让我检测 NFS 主机何时没有正确响应并将其删除?... 或者当驱动器消失时,我可以从服务器端以某种方式执行此操作吗?
答案1
首先,您需要将您的 nfs 挂载更改为使用可中断选项(大多数情况下为 intr)。这将允许您按 Ctl-C 退出通常会挂起等待内核返回的应用程序,而这永远不会发生。
答案2
如果您在客户端上使用 autofs、软挂载和较短的 timeo 值,这将会有所帮助。
答案3
从客户端的角度来看,上述答案非常好,但您还应该考虑服务器端。
在我们的环境中,我们使用 nfs 服务器在多台机器之间共享 Web 内容。这些机器还使用 pacemaker/openais 来确定谁应该运行 NFS 服务器进程、挂载光纤通道卷以及 nfs 服务器的 IP 地址。
当我们需要重新启动一台机器时,pacemaker 会检测到这一点,并将活动的 NFS 服务器移动到另一个节点,以免服务中断。