无法“并行访问”Raspberry 上托管的 NFS 共享

无法“并行访问”Raspberry 上托管的 NFS 共享

看来我无法“并行访问”托管在我的 Raspberry PI 上的文件系统。

这是我的设置:

NFS 服务器:

  • 带有 Debian GNU/Linux 11 的 Raspberry Pi 4(靶心)。
  • /etc/exports:/mnt/DataBackupNAS *(rw,async,no_root_squash,no_subtree_check)

NFS 客户端:

  • 带有 Ubuntu Jammy Jellyfish 的桌面。
  • /etc/fstab:raspberrypi:/mnt/DataBackupNAS /media/laurent/DataBackupNAS nfs noatime,_netdev,nofail,nolock,async

重现步骤

  1. 将大文件从 NFS 客户端复制到 Raspberry。
  2. 在复制完成之前,尝试使用 Nautilus 浏览到另一个目录或从命令行“ls”一个目录。

预期的:列出目录。

观察到的:“ls”命令卡住了。Nautilus 一直处于等待状态,直到复制完成。

笔记:

  • Windows 客户机似乎没问题:我可以浏览 Raspberry NAS,甚至可以同时“交叉复制”大文件。一切都响应迅速。因此问题似乎更多与 Ubuntu/挂载选项有关。
  • 在复制过程中,在 Raspberry 上通过 SSH 执行“ls”是可行的。
  • 我已经尝试过这些事情,但目前还没有成功:
    • 在服务器和客户端上设置异步模式。“异步”应该是最好的选择,因为 NFS 文档指出操作在“同步”模式下按顺序执行?
    • 增加客户端的 rsize 和 wsize。
    • 将服务器上的 RPCNFSDCOUNT 增加到 16,而不是 8。

除此之外,一切都很好。与我的互联网提供商 NAS 相比,复制操作相当快且可靠,只是在复制完成之前我无法在服务器上执行任何其他操作。

编辑: 当我通过 SSH 进入 Raspberry 并在“大文件”复制运行时执行一些 ls 甚至内部复制操作时,Raspberry 仍然反应灵敏。

如果我理解正确的话,rpcnfsdcount 是一个服务器端参数,它定义专用于 NFS 的线程数,所以它应该使服务器响应更快?

将 rsize wsize 降低到 1 不会改变任何东西。所有内容都完全停留在 Ubuntu 客户端上,直到复制结束。

由于 Windows 上的一切都响应迅速,我猜测这更可能是挂载参数问题......

我还注意到,如果在命令行上发出复制操作,则 Ctrl+C 无法中断该操作。如果我将同一个大文件复制到另一个本地磁盘,Ctrl+C 可以正常工作。这有关系吗?

答案1

好的,通过使用这些挂载选项挂载解决了问题(Raspberry 方面没有变化):

raspberrypi:/mnt/DataBackupNAS /media/laurent/DataBackupNAS nfs vers=4,sync 0 0

因此必须明确启用同步(这有点令人惊讶,我期望异步能够提供更多的反应性!)。

Nautilus 和 ls 命令现在几乎可以立即刷新,并且可以使用 Ctrl+C 中断 cp 命令。

@Terrance:谢谢你的建议,这也是我的第一个想法,但在使用命令行(cp 和 ls 列出)时也发生了这个问题。

相关内容