无需重启即可重新初始化 NFS 客户端

Ant*_*hon 16 nfs

我一直在我的服务器上工作,我使用 NFS 从中导出一个目录。当然,在服务器重新启动的一周左右的时间里,我多次忘记umount了工作站中的导出文件系统(从/etc/fstab启动时安装)。在此期间,我能够umount事后重新安装(我没有使用autofs):

umount -fl /data0
mount /data0
Run Code Online (Sandbox Code Playgroud)

但这不再有效。

无法将服务器导出的目录挂载到其他目录(挂载挂起),但我可以在工作站上运行的虚拟机上 nfs 挂载导出的目录。

我尝试的是删除 ( rmmod)nfsnfsv3模块(这不起作用: Resource temporarily unavailable)。lsof挂起。mount不显示任何通过nfs. 这可能是多次使用 'umount -l' 的结果,但前两次没有问题。

在没有任何区别的情况下无法安装之后,我同时重新启动了服务器。我也用过service nfs-kernel-server restart。我怀疑如果我重新启动客户端工作站,一切都会恢复正常。

有没有办法从中恢复并在我的工作站上重新初始化 nfs 客户端而无需重新启动?
如果我不重启就无法解决这个问题,如果我开始使用它会不会再次发生autofs

lsof -b 与最后一行挂起:

lsof: avoiding readlink(/run/user/1001/gvfs): -b was specified.
lsof: avoiding stat(/run/user/1001/gvfs): -b was specified.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
      Output information may be incomplete.
Run Code Online (Sandbox Code Playgroud)

在前面的行中,没有/data0.

中的条目/etc/fstab

192.168.0.2:/data0 /data0  nfs  defaults,auto,nolock,user 0 2
Run Code Online (Sandbox Code Playgroud)

Pet*_*des 7

正如@PaperMonkey 在评论中建议的那样,您可能会因为使用默认挂载选项而被搞砸了,其中包括永远重试。

intr曾经是一种更容易中断 I/O 上的东西到损坏的 NFS 挂载的方法,但现在它没有操作。 SIGKILL仍然可以中断卡在 NFS 上的进程,至少nfs(5)声称如此。有关挂载选项,请参阅该手册页。

如果您不希望 NFS 永远重试,请使用soft而不是默认值hard

我还建议使用自动挂载程序。如果需要,可以在某处创建指向 /net/host/foo/bar 的符号链接。

通常重新启动更容易,但我认为理论上你应该能够kill -9(即kill -KILL)任何卡在 NFS 上的进程。那么 umount -f 可能会起作用。请注意不要让制表符完成使更多进程卡在 NFS 挂载上。

  • 请注意,当使用“软”而不是“硬”时,每次 NFS 服务器暂时不可用时都可能会丢失数据。 (2认同)

小智 5

以下是在基于 RPM 的发行版上运行以修复此问题的命令列表。

service rpcbind stop
service nfslock stop
rm -rf /var/lib/nfs/statd/sm/*
rm -rf /var/lib/nfs/statd/sm.bak/*
Run Code Online (Sandbox Code Playgroud)

在那之后:

umount -f /share
Run Code Online (Sandbox Code Playgroud)