我最近在 nfs 客户端上遇到了与某个特定共享目录相关的 nfs 问题。我使用的应用程序(Sonarr 和 Plex)都位于不同的虚拟机上,但它们都无法读取某个目录的内容,而且当它们尝试读取时,该目录的内容会在所有虚拟机(所有子目录和文件)中消失。
如果我通过 SSH 登录并在尝试读取文件后查看这个麻烦目录中的某个子目录,我会收到“过时的文件句柄”警告。当目录正常工作时,我能够查看所有文件并ls
在 bash 中浏览目录而不会出现问题。真正奇怪的是,nfs 挂载上的所有其他目录都完全正常,并且两个应用程序都可以使用这些目录。在客户端,nfs 使用 v4。
对于我的设置,我有一台主机服务器(运行 CentOS 7 - 3.10.0-693.21.1.el7.x86_64),其中有 6 个数据驱动器,所有驱动器都使用 MergerFS 汇集在一起。我使用 NFS 导出合并的目录。在同一台服务器上,我有多个挂载 NFS 共享的虚拟机。nfs 导出在客户端的 /etc/fstab 中挂载,使用<ip_addr>:/ /media nfs4 rsize=32768,wsize=32768,intr,noatime,bg 0 0
我尝试了多种方法来调试这个问题:
- 我已经使用可重复模式的 lsof(我认为是 lsof -Nr)来监控 NFS 共享,但是当我按下更新系列按钮时没有看到来自 mono 的访问(Sonarr 通过 mono 运行)。
- 在客户端打开了 nfs 调试,但并没有真正得到任何有用的信息,尽管不是 100% 确定我在寻找什么。
- 我确实在服务器端打开了 nfs 调试,但在消息文件中只得到了 1 行额外的信息,抱怨没有主机名。
- 我也尝试了 strace,但仍然没有看到任何有用的信息。
- 使用 smartmontools 检查我的硬盘是否有任何错误,全部通过
nfsstat
也报告没有重传数据。- 移动了有问题的媒体所在的目录,并且彻底删除了有问题的内容并重新上传
当这种奇怪的消失行为发生时,卸载并重新安装将解决此问题,有时在客户端和服务器上触摸同一目录中的几个文件可能会导致文件再次显示。我最初认为此问题与 Sonarr 有关(在 Sonarr 中,它尝试读取单个指定目录),但由于单独 VM 中的 Plex 遇到问题,因此我相信这更多的是 Linux 中的问题,而不是应用程序本身的问题。
有谁知道是什么导致了这种奇怪的行为,或者可以提供任何帮助来调试这个问题。如果有帮助的话,这个麻烦的文件夹的内容是 50.6 GB,分布在 283 个文件中。我确实尝试删除了大部分文件,看看是否有帮助,但没有,问题仍然存在。
谢谢
答案1
初步评论:不确定你的系统是否适合,但我的系统上目前有/媒体几个目录。为了避免干扰,我目前使用不同的挂载点。
我建议你对服务器安装点进行此操作。当然,还要在客户端机器上进行相应的调整
可能造成混淆的原因:我曾经遇到过问题,因为挂载指令中定义的挂载点对挂载点名称的处理不同:一些带有尾随斜杠(例如, /media/ ),其他没有(例如, /media ),所以他们实际上并不是在看同一个地方,所以遇到了与您表达的类似的问题。
我想你没有犯同样的错误,但还是检查一下吧!
答案2
所以感觉自己有点笨,但是弄清楚了问题所在,结果发现与 NFS 无关,至少据我所知。
问题是我尝试在 Sonarr 中读取的文件设置了执行位。运行chmod 644 *
解决了我的问题。执行是从我之前进行的一些大规模重命名中设置的。
我不确定为什么文件 755 会导致该问题,但修复文件权限解决了该问题。