重新启动NFS客户端而无需重新启动


10

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

umount -fl /data0
mount /data0

但是,这不再起作用。

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

我试过的是删除(rmmodnfsnfsv3模块(无法使用:)Resource temporarily unavailablelsof挂。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.

在此之前的行中,没有/data0

条目/etc/fstab

192.168.0.2:/data0 /data0  nfs  defaults,auto,nolock,user 0 2

“但是前两次都没有问题”……让我想起了俄罗斯轮盘。会lsof -b挂吗?
muru

@muru是的,它挂了,我用输出更新了Q。顺便说一句,我从来没有听说过有人抱怨输掉俄罗斯轮盘赌,所以这一定是双赢的游戏。我通常希望事情永远不会执行一次,也不会一直执行X次,但是情况可能有所不同。
Anthon

您正在使用哪个发行版?这个过程变化很大。
Graeme

@Graeme这是Linix薄荷17.1(丽贝卡)
Anthon

不确定在Ubuntu upstart和All上它如何工作。您可能想重新启动nfs-common程序包中的所有服务,看起来有些。顺序也可能很重要,因此请尝试先停止再按依赖性顺序开始。您可能还希望将其rpcbind作为最后一站/首次启动。我以前在Debian上做到过,但是它只有一项不错的nfs-common服务。
Graeme'1

Answers:


5

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

intr过去,这是一种使中断I / O卡上的东西以使其损坏的NFS挂载更容易的方法,但是现在这是空操作。 SIGKILL仍然可以中断卡在NFS上的进程,至少是这样nfs(5)。有关安装选项,请参见该手册页。

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

我也建议使用自动安装器。如果需要,可以在某处建立符号链接到/ net / host / foo / bar。

通常,重新启动通常更容易,但是我认为从理论上讲,您应该能够kill -9(即kill -KILL)卡在NFS上的任何进程。然后,umount -f可能有效。请注意不要让制表符完成将更多进程卡在NFS挂载上。


从理论上讲,但是当lsof挂起时,很难找到这些过程。
kmarsh

@kmarsh:Dps / top 中处于状态(磁盘睡眠)的任何进程都可能停留在NFS上。
彼得·科德斯

1
请注意,使用“软”而不是“硬”时,每次NFS服务器暂时不可用时,都有可能丢失数据。
Marki555

4

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

service rpcbind stop
service nfslock stop
rm -rf /var/lib/nfs/statd/sm/*
rm -rf /var/lib/nfs/statd/sm.bak/*

之后:

umount -f /share

1

使用autofs将有助于避免将来出现此问题。这样做的最大好处autofs是,在尝试使用目录之前,它不会尝试挂载该目录,这意味着可以避免损坏挂载点,并且它也不会无限期地尝试挂载,您可以设置卸载的超时时间(通常是短)。我不确定在此预安装期间是否会重试自动挂载,但是无论哪种方式,我通常都将自动挂载超时设置为仅几秒钟。

要解决该问题而无需重新启动,您可能可以使用umount -a(卸载/ etc / fstab中提到的所有内容)mount -a(将所有内容卸载在/ etc / fstab中的内容),但是除非您丢失的目录包含主目录,否则我必须这样做最好将工作保存在其他位置,然后重新启动。


0

使用lsof命令的结果可在客户机上找到持有对旧文件系统的引用的进程,并杀死这些进程。

umount -f /数据0

确保您可以ping服务器,然后重新安装驱动器。重新启动任何所需的进程。

集群

注意,如果您运行群集服务器安装程序,则每次服务器必须进行故障转移时,您都会得到一个过时的nfs文件句柄。为避免这种情况,应使用fsid选项导出文件系统。对于两个服务器上每个相应的文件系统,fsid的编号应相同。您可以确保进行文件复制。请参见下面的手册页中的片段:

fsid = num | root | uuid NFS必须能够识别其导出的每个文件系统。通常,它将对文件系统使用UUID(如果文件系统有这种东西)或持有文件系统的设备的设备号(如果文件系统存储在设备上)。由于并非所有文件系统都存储在设备上,并且并非所有文件系统都具有UUID,因此有时有必要明确告诉NFS如何识别文件系统。这是通过fsid =选项完成的。

对于NFSv4,有一个独特的文件系统,它是所有导出文件系统的根。这是用fsid = root或fsid = 0指定的,这两者的含义完全相同。

可以使用小整数或UUID标识其他文件系统,该文件系统应包含32个十六进制数字和任意标点。

Linux内核2.6.20及更早版本不了解UUID设置,因此,如果需要为此类内核设置fsid选项,则必须使用小整数。支持同时设置一个小数字和一个UUID,因此可以对旧内核和新内核进行相同的配置。


他已经说过lsof挂起。
kmarsh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.