两个相同的 NFS 共享,但只有一个会给出 Stale 文件句柄错误

Posted

技术标签:

【中文标题】两个相同的 NFS 共享,但只有一个会给出 Stale 文件句柄错误【英文标题】:Two identical NFS shares, but only one of the two gives Stale file handle errors 【发布时间】:2020-03-04 13:09:11 【问题描述】:

我有一个 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

实在想不通

错误的根源是什么,最重要的是 我可以从中找出两者之间的区别。

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

【问题讨论】:

您是否刷新了导出exportfs -ra @KamilCuk 是的,我做到了。我还重新启动了两台服务器。 【参考方案1】:

我终于找到了解决办法,就是在exports中显式添加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,但这会导致导出相同的目录,所以我认为这意味着每个 export需要有一个单独的 fsid。

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

【讨论】:

以上是关于两个相同的 NFS 共享,但只有一个会给出 Stale 文件句柄错误的主要内容,如果未能解决你的问题,请参考以下文章

同时打开共享相同指令的2个下拉列表

Samba服务 NFS服务

PHP 无法从 NFS 共享读取会话

exportfs命令NFS客房端问题ftp

exportfs命令NFS客房端问题ftp

从 java 轮询 NFS 共享会破坏文件系统