我在 Synology NAS 上托管了一个 NFS 服务器。它是通过文件服务下的内置 NFS 服务器配置的。配置选项有些有限,我设置了 32kb 读/写数据包大小,最大 NFS 版本为 4.1。
/etc/exports 条目是:
/volume1/NAS_Andrew 192.168.0.0/24(rw,async,no_wdelay,crossmnt,insecure,all_squash,insecure_locks,sec=sys,anonuid=1024,anongid=100)
我的 ubuntu 客户端有以下 fstab 条目:
192.168.0.219:/volume1/NAS_Andrew /mnt/nas nfs nofail,nconnect=16,rsize=32000,wsize=32000,hard 0 0
挂载时,它将解析为 /proc/mounts 中的以下条目:
192.168.0.219:/volume1/NAS_Andrew /mnt/nas nfs4 rw,relatime,vers=4.1,rsize=32000,wsize=32000,namlen=255,hard,proto=tcp,nconnect=16,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.220,local_lock=none,addr=192.168.0.219 0 0
问题是,当我将一个大文件写入 NFS 挂载时,挂载内的所有其他文件系统操作都会挂起。
例如,如果我在终端 1 中运行以下命令:
time dd if=/dev/zero of=/mnt/nas/testfile bs=16k count=128k
然后ls -la
在终端 2 中运行;该ls
过程挂起,直到dd
写入完成。
我相信该问题仅限于本地 NFS 客户端,因为如果我ls -la
在另一台也安装了 NFS 共享的服务器上运行相同的程序 - 它运行时不会出现任何挂起或问题。
我希望有人能解释一下为什么写入操作被阻塞。我尝试设置nconnect=16
以增加 tcp 连接并允许多个操作 - 但这不起作用,我怀疑nconnect
可能仅限于有多个网络接口可用的情况。
我正在运行 Ubuntu 20.04.3 LTS。
非常感谢您的任何意见。