两个相同的NFS共享,但其中只有一个会导致Stale文件句柄错误



我有一个Linux(raspbian(服务器:

$ uname -a
Linux hester 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux

具有相同用户/组/权限的两个目录:

$ ls -ld /mnt/storage/gitea/ /mnt/storage/hester/
drwxr-xr-x 2 nobody nogroup 26 Mar  2 10:20 /mnt/storage/gitea/
drwxr-xr-x 3 nobody nogroup 21 Feb 21 11:26 /mnt/storage/hester/

这两个目录在导出文件中使用相同的参数导出:

$ cat /etc/exports
/mnt/storage/hester     192.168.1.15(rw,sync,no_subtree_check)
/mnt/storage/gitea      192.168.1.15(rw,sync,no_subtree_check)

在另一台机器上(导出文件中提到的192.168.1.15(,我成功地安装了这两台机器:

$ mount /mnt/storage/gitea/
$ echo $?
0
$ mount /mnt/storage/hester/
$ echo $?
0

但现在奇怪的事情发生了:

$ ls -l /mnt/storage/
ls: cannot access '/mnt/storage/gitea': Stale file handle
total 0
d????????? ? ?      ?        ?            ? gitea
drwxr-xr-x 3 nobody nogroup 21 Feb 21 11:26 hester

我真的无法计算

  • 错误的来源是什么,最重要的是
  • 在那里我可以找到两者之间的区别

我愿意接受进一步调查的建议或对我的疑虑的回答。提前感谢您的任何有用意见!

我终于找到了解决方案,即在导出中显式添加fsid选项:

$ cat /etc/exports
/mnt/storage/hester     192.168.1.15(rw,sync,fsid=20,no_subtree_check)
/mnt/storage/gitea      192.168.1.15(rw,sync,fsid=21,no_subtree_check)

我不完全确定为什么这样做有效。从手册页中,我了解到"NFS需要能够识别它导出的每个文件系统。通常,它会使用文件系统的UUID(如果文件系统有这样的东西(或持有文件系统的设备的设备号(如果文件存储在设备上(。">

这两个挂载点都在同一个文件系统上,因此根据手册页,它们应该具有相同的fsid,但这会导致导出相同的目录,因此我认为这意味着每个导出都需要有一个单独的fsid。

还有一点需要注意:/mnt/storage是RAID3上的XFS文件系统,因此这也可能使NFS对设备的UUID感到困惑。

相关内容

最新更新