防止断开的NFS连接冻结客户端系统


21

我们有一个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进行挂载,但行为类似)

谢谢


3
soft在任何情况下我都不建议。它允许在出错时丢弃数据。相反,我建议hard,intr
roaima

2
@roaima-谢谢。这种观点似乎在网络上非常普遍:)问题是我们目前所处的状况对我们hard同样有害(系统在死机并死机直到重新启动)。intr根据man的说法,NFS4不支持。
UpTheCreek

2
(更正,似乎intr它受NFS4的支持,但不受内核> 2.6.25的支持)
UpTheCreek

我认为与“标准”答案不同的是,您正在将当前工作目录更改为安装点。没有cd,您会得到相同的行为,而是这样做ls /mnt/mountpoint吗?这有可能是后ls失败,你的shell试图依赖PWD文件系统操作。(更糟糕的是,如果您愚蠢到可以放进.$PATH
Toby Speight

Answers:


4

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此过程,但这可能不会给您带来太多实用性。

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


谢谢,但是根据男人的说法intr是得到nfs 2/3而不是4的支持
。– UpTheCreek

@UpTheCreek,我不明白为什么会这样。我这里没有debian系统,但已明确提到它可用。你试过了吗?“ intr这将允许在等待服务器响应时中断NFS4操作(在硬装载上)。”
BowlOfRed

2
是的,我尝试过,但似乎没有任何效果。Man说在最新的内核版本中忽略了它。
UpTheCreek

由于整个系统冻结,因此无法杀死进程。根据我的经验,无法发出任何命令。(尽管在某些情况下可能会通过SSH进入这种冻结的计算机。)
Monica Cellio的MountainX

3

我的答案是根据经验得出的意见。在我有事实的地方,我将(尝试记住)链接到它们。

  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,看看是否对您的特定用例有所帮助。不要认为这是降级。


1
谢谢,但是我不能切换到NFS3,即使如您所说,即使intr最新的内核版本也不支持我。
UpTheCreek

2
啊是啊看起来就像intr 在NFS4(它在两个列出的2/3唯一的选择支持 4个选项的人,这是一个有点混乱),但只是在最近版本的内核不支持。
UpTheCreek

1
“在任何情况下我都不建议您选择软”-真的吗?就我而言,我有一个繁忙的Web服务器,该服务器安装了图像目录。如果图像主机出现故障,而我们使用hard,则整个网站都将崩溃。如果使用soft,我们可能会得到一些破碎的图像(尽管我们的缓存系统几乎可以完全缓解这种情况)。soft允许文件损坏的风险实际上并不是什么大问题。我宁愿拥有一个损坏的映像文件,也不愿意将其关闭!
Doug McLean

1
@DougMcLean也遇到过类似情况(繁忙的Web场,图像服务器,NFS ...),我想说这是一个有点特殊的情况。如果我的图像服务器不可靠,我怀疑我很可能已经soft接受了可接受的解决方案。答案从“从不”修改为“几乎从不”。谢谢!
roaima

1
如果我的内存正确,则NFS v3中也存在此系统冻结问题。
Monica Cellio的MountainX '17年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.