我们有一个 NFS 4 共享,在多个服务器(NFS 服务器和所有 Debian 8 的客户端)之间共享一个卷。最近我们遇到了一些问题,网络中断会冻结客户端系统。
我们的 NFS 选项很少,只是rw
(因此默认值hard
,fg
等等)。
我现在正在尝试这些选项,但没有得到我期望的行为:
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
我的一些回答是基于经验的意见。如果我有事实,我会(尽量记住)链接到它们。
- NFS 4 被认为是改进超过版本 2 和 3。但是,我还没有看到需要改进的强大用例。也许这是因为我的目标是使用 Samba 将文件系统导出到 Windows 客户端,使用 NFS 将文件系统导出到 Unix/Linux 客户端。
soft
几乎在任何情况下我都不会推荐。它允许数据因错误而被丢弃。相反,我建议hard,intr
.- 正如您所指出的,
intr
对于 NFS 4 无效,但似乎这是一个内核变化而不是 NFS。 - NFS 自动挂载程序 (
autofs
) 非常适合我使用 NFS 版本 2 和 3 的用例,并且仅在需要时挂载 NFS 文件系统,从而设法帮助保护我的客户端系统免受服务器故障的影响。
我给您的建议是考虑从 NFS 4 迁移到 NFS 3,看看这是否对您的特定用例有帮助。不要将其视为降级。