防止 NFS 连接中断导致客户端系统冻结

防止 NFS 连接中断导致客户端系统冻结

我们有一个 NFS 4 共享,在多个服务器(NFS 服务器和所有 Debian 8 的客户端)之间共享一个卷。最近我们遇到了一些问题,网络中断会冻结客户端系统。

我们的 NFS 选项很少,只是rw(因此默认值hardfg等等)。

我现在正在尝试这些选项,但没有得到我期望的行为: rw,soft,bg,retrans=6,timeo=150

(我增加了重传以抵消一些软风险)

我要测试的程序是:

  • 开机机
  • cd/mnt/mountpoint
  • 验证 NFS 连接是否正常
  • cd /
  • 杀掉网络ifdown eth0
  • cd/mnt/mountpoint
  • ls

此时命令行冻结了,我无法中断它。 一段时间后,消息“nfs:服务器[服务器名称]未响应,超时”,似乎每分钟重复一次(无限期)。

我希望/期望操作失败并返回控制权时会发生什么。

请有人告诉我这些设置哪里出了问题?

(PS:我也尝试使用 autofs 挂载,但看到了类似的行为)

谢谢

答案1

intr当您点击 时,应该可以让您再次获得控制权^C,但通常不会立即获得控制权。

   intr           If an NFS file operation has a major timeout and it is hard mounted, then allow signals to interupt the
                  file  operation  and cause it to return EINTR to the calling program.  The default is to not allow file
                  operations to be interrupted.

正如你所说,期望是这里的问题。网络问题可能是暂时的,但操作失败是永久性的。因此,大多数操作默认只是阻塞,直到操作完成。

这是标准答案,但查看当前的手册页我看到:

                  The  intr / nointr mount option is deprecated after ker-
                  nel 2.6.25.  Only SIGKILL can interrupt  a  pending  NFS
                  operation on these kernels, and if specified, this mount
                  option is ignored  to  provide  backwards  compatibility
                  with older kernels.

所以在我看来这不是一个 NFS3/NFS4 问题,而是一个关于如何intr工作的决定。所以你应该能够完成KILL这个过程,但这可能不会给你带来太多用处。

我找不到有关为什么删除该选项的讨论。你能杀死-KILL你的进程吗?

答案2

我的一些回答是基于经验的意见。如果我有事实,我会(尽量记住)链接到它们。

  1. NFS 4 被认为是改进超过版本 2 和 3。但是,我还没有看到需要改进的强大用例。也许这是因为我的目标是使用 Samba 将文件系统导出到 Windows 客户端,使用 NFS 将文件系统导出到 Unix/Linux 客户端。
  2. soft几乎在任何情况下我都不会推荐。它允许数据因错误而被丢弃。相反,我建议hard,intr.
  3. 正如您所指出的,intr对于 NFS 4 无效,但似乎这是一个内核变化而不是 NFS。
  4. NFS 自动挂载程序 ( autofs) 非常适合我使用 NFS 版本 2 和 3 的用例,并且仅在需要时挂载 NFS 文件系统,从而设法帮助保护我的客户端系统免受服务器故障的影响。

我给您的建议是考虑从 NFS 4 迁移到 NFS 3,看看这是否对您的特定用例有帮助。不要将其视为降级。

相关内容