每次我尝试挂载 NFS 共享时,我都会得到以下信息:
>> mount -t nfs gitlab-replica-storage.blah.com:/export/registry-gitlab-prod-data-vol /mnt/test
mount.nfs: Stale file handle
问题是我无法卸载,正如它所说:
>> umount -f -l /mnt/test
umount: /mnt/test: not mounted
我尝试检查是否有任何进程正在使用挂载点,但事实并非如此。
还有其他解决方法吗?
作为澄清:
- 我可以将它安装在另一台机器上。
- 我无法将它安装到受影响机器上的另一个安装点。
如果服务器对该客户端有一些陈旧的导出条目,则A
mount -t nfs
失败。Stale file handle
示例场景:当服务器重新启动而客户端未先卸载 nfs 卷时,可能会发生这种情况。当服务器返回并且客户端然后卸载并尝试安装 nfs 卷时,服务器可能会响应:
您可以通过查看
/proc/fs/nfs/exports
或来检查这一点/proc/fs/nfsd/exports
。如果有客户的条目,它可能是一个陈旧的条目。您可以通过显式取消导出和重新导出服务器上的相关导出来解决此问题。例如,要对所有导出执行此操作:
在此之后,客户端
mount -t nfs ...
应该成功。请注意,mount yielding
ESTALE
与其他一些系统调用(如 open/readdir/unlink/chdir ...)返回ESTALE
. 它的导出是陈旧的,而文件句柄是陈旧的。NFS 很容易发生陈旧的文件句柄(例如,客户端有文件句柄,但文件在服务器上被删除)。关于ESTALE的原始链接:ESTALE LWN。
我建议您检查 NFS 服务器上的文件和目录,或者告诉 NFS 服务器的管理员来执行此操作。
NFS 服务器上可能存在一些旧的 pagecache、inode、dentry 缓存条目。请清洁它:
在我的情况下,我在安装新卷时也收到错误“mount.nfs:过时的文件句柄”。发生这种情况是因为已安装的旧卷已被删除。卸载后,使用的卷,
当我再次安装时,它解决了问题。
在 NFS 服务器上查找过时的挂载条目:
如果您看到与 NFS 客户端的 IP 地址和您尝试挂载的共享相关的行,请从 rmtab 中删除过时的条目:
重新加载 rpc.mountd 以便它看到新的 rmtab:
检查导出是否实际挂载:
陈旧文件句柄错误意味着 NFS 服务器在其导出路径中保存旧版本的文件。NFS 服务器重新启动有时会有所帮助。但是对于较旧的操作系统(RHEL/CentOS 6.9),有时最好恢复到 NFS3 而不是 NFS4。根据我的经验,较旧的 NFS4 客户端有时会在使用较新的 NFS4.1 服务器时遇到困难。对于文件锁定尤其如此。