NFS挂载报错mount.nfs: Stale file handle

发布于 / 系统运维 / 0 条评论

报障案例:

mount.nfs: Stale file handle for 192.168.1.1:/fs/1000/nfs/test on /mnt

mount.nfs: mounting 192.168.1.1:/fs/1000/nfs/test failed, reason given by server: No such file or directory

如果你是中文系统,应该就是报失效文件句柄

先直接说结果怎么处理:

先查看自己的NFS服务器配置文件,如果你没开NFS4的话这篇文章你可以直接关掉了,没对到症:

在你NFS服务器查看文件/etc/exports

[nfsd]

vers3=n
vers4=y
vers4.0=n
vers4.1=n
vers4.2=y

y代表开启,n代表关闭,如果要开v4.0-4.2的话,需要同时开v4,我这样就是只开v4.2的做法

然后再来看服务端的 exports 设置

nano /etc/exports
/fs/1000/nfs 192.168.1.0/24(rw,fsid=0,sync,no_subtree_check,no_root_squash)
/fs/1000/nfs/test1 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/fs/1000/nfs/test2 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/fs/1000/nfs/test3 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/fs/1000/nfs/test4 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)

这里test1-4都是我的nfs共享绝对路径, /fs/1000/nfs 定义了一个“虚拟根目录”,你在实际操作中就设置这个为你的绝对路径的上级目录就行了

然后保存查看是否配置生效:

exportfs -ra
exportfs -v
systemctl restart nfs-server
systemctl status nfs-server
● nfs-server.service - NFS server and services
     Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; preset: enabled)
    Drop-In: /run/systemd/generator/nfs-server.service.d
             └─order-with-mounts.conf
     Active: active (exited) since Wed 2025-06-18 22:21:16 CST; 3s ago
    Process: 13424 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
    Process: 13425 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
   Main PID: 13425 (code=exited, status=0/SUCCESS)
        CPU: 5ms

Jun 18 22:21:16 NAS systemd[1]: Starting nfs-server.service - NFS server and services...
Jun 18 22:21:16 NAS systemd[1]: Finished nfs-server.service - NFS server and services.

看上去已经成功拉起服务器了,这个问题基本上就解决了

客户端如何配置呢?因为我们已经在服务器定义了绝对路径,因此我们只需要在客户端这样挂载就行了

mount -t nfs -o vers=4.2 192.168.1.1:/test1 /mnt

问题解决

原理:

如有不对就当看个乐:

这个问题的核心原因是因为你的客户端没用NFS3而是使用了NFS4+协议

与我们用惯的nfs3 不同,nfs4 不支持直接挂绝对路径,我们需要设置一个带fsid=0标记的虚拟根目录

NFSv3 NFSv4
路径 配置绝对路径即可 必须设置虚拟根目录
fsid=0 不需要 必须设置
中间路径
客户端挂载 按绝对路径挂载 按服务端的虚拟路径挂载

回到我的服务端配置:

/fs/1000/nfs 192.168.1.0/24(rw,fsid=0,sync,no_subtree_check)
/fs/1000/nfs/test1 192.168.1.0/24(rw,sync,no_subtree_check)

/fs/1000/nfs 是虚拟根目录,是 nfs4协议定义的起点

/test1 是相对于这个虚拟根的路径

中间路径 /fs、/fs/1000 不需要管,但 /fs/1000/nfs 这个路径必须配置,必须 fsid=0

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
转载原创文章请注明,转载自: 沧水的博客 » NFS挂载报错mount.nfs: Stale file handle
Not Comment Found