我一直在我的服务器上工作,我使用 NFS 从中导出一个目录。当然,在服务器重新启动的一周左右的时间里,我多次忘记umount
了工作站中的导出文件系统(从/etc/fstab
启动时安装)。在此期间,我能够umount
事后重新安装(我没有使用autofs
):
umount -fl /data0
mount /data0
Run Code Online (Sandbox Code Playgroud)
但这不再有效。
我无法将服务器导出的目录挂载到其他目录(挂载挂起),但我可以在工作站上运行的虚拟机上 nfs 挂载导出的目录。
我尝试的是删除 ( rmmod
)nfs
和nfsv3
模块(这不起作用: 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)
正如@PaperMonkey 在评论中建议的那样,您可能会因为使用默认挂载选项而被搞砸了,其中包括永远重试。
intr
曾经是一种更容易中断 I/O 上的东西到损坏的 NFS 挂载的方法,但现在它没有操作。 SIGKILL
仍然可以中断卡在 NFS 上的进程,至少nfs(5)
声称如此。有关挂载选项,请参阅该手册页。
如果您不希望 NFS 永远重试,请使用soft
而不是默认值hard
。
我还建议使用自动挂载程序。如果需要,可以在某处创建指向 /net/host/foo/bar 的符号链接。
通常重新启动更容易,但我认为理论上你应该能够kill -9
(即kill -KILL
)任何卡在 NFS 上的进程。那么 umount -f 可能会起作用。请注意不要让制表符完成使更多进程卡在 NFS 挂载上。
小智 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)