在服务器节点上,可以访问导出的文件夹。但是,在重新启动(服务器和客户端)后,不再可以从客户端访问该文件夹。
在服务器上
# ls /data
Folder1
Forlder2
并且 /etc/exports 文件包含
/data 192.168.1.0/24(rw,no_subtree_check,async,no_root_squash)
在客户端
# ls /data
ls: cannot access /data: Stale NFS file handle
我不得不说客户端的共享文件夹没有问题,但是在重新启动(服务器和客户端)后,我看到了这条消息。
有什么办法可以解决吗?
重新启动的顺序很重要。在客户端之后重新启动服务器可能会导致这种情况。陈旧的 NFS 句柄表示客户端打开了文件,但服务器不再识别文件句柄。在某些情况下,NFS 会在超时后清理其数据结构。在其他情况下,您需要自己清理 NFS 数据结构,然后重新启动 NFS。这些结构所在的位置在某种程度上取决于 O/S。
尝试先在服务器上重新启动 NFS,然后在客户端上重新启动。这可能会清除文件句柄。
不建议使用从其他服务器打开的文件重新启动 NFS 服务器。如果在服务器上删除了打开的文件,这尤其成问题。服务器可能会保持文件打开,直到重新启动,但重新启动将删除服务器端的内存中文件句柄。然后客户端将无法再打开该文件。
从服务器确定使用了哪些挂载是困难且不可靠的。该
showmount -a
选项可能会显示一些活动的坐骑,但可能不会报告所有这些坐骑。锁定的文件更容易识别,但需要启用锁定并依赖客户端软件锁定文件。您可以
lsof
在客户端上使用来识别在挂载上打开文件的进程。我在我的 NFS 挂载上使用
hard
和intr
挂载选项。该hard
选项会导致 IO 无限期重试。该intr
选项允许进程在等待 NFS IO 完成时被终止。试试我写的这个脚本:
同时,上述脚本不适用于所有服务器。这是一个更新:
在 NFS 服务器上 UN-export 并重新导出文件系统:
exportfs -u nfs-server:/file_system exportfs nfs-server:/file_system
在客户端挂载文件系统
mount -t nfs nfs-server:/文件系统 /mount_point
检查特定路径的 lsof 并杀死相应的 pid 。然后卸载分区并重新安装。