强制卸载NFS挂载的目录

Lor*_*ein 163 linux mount nfsclient nfs umount

我在挂起的Linux机器上有一个NFS挂载的目录.我试图强制卸载,但它似乎不起作用:

$ umount -f /mnt/data
$ umount2: Device or resource busy
$ umount: /mnt/data: device is busy
Run Code Online (Sandbox Code Playgroud)

如果我输入" mount",似乎该目录不再挂载,但如果我执行" ls /mnt/data" 它会挂起,如果我尝试删除挂载点,我会得到:

$ rmdir /mnt/data
rmdir: /mnt/data: Device or resource busy
Run Code Online (Sandbox Code Playgroud)

除了重启机器之外,还有什么可以做的吗?

小智 254

你可以尝试一个懒惰的卸载:

umount -l
Run Code Online (Sandbox Code Playgroud)

  • @Daniel:当然,但它*是一个Linux问题(标记为甚至),Linux确实拥有它. (28认同)
  • @KieranAndrews和Ubuntu上的其他任何人,尝试`fusermount -uz/path/to/file`.为我工作的魅力!:) (10认同)
  • 我在Ubuntu上尝试过这个命令,但它没有用. (5认同)
  • 这并没有在任何地方实施.例如,我在FreeBSD上没有它. (3认同)

Dan*_*ian 78

如果NFS服务器消失并且您无法将其重新联机,我使用的一个技巧是使用NFS服务器的IP(在此示例中为192.0.2.55)向接口添加别名.

Linux的

对此的命令大致如下:

ifconfig eth0:fakenfs 192.0.2.55 netmask 255.255.255.255
Run Code Online (Sandbox Code Playgroud)

其中192.0.2.55是已离开的NFS服务器的IP.然后,您应该能够ping通地址,并且还应该能够卸载文件系统(使用unmount -f).然后,您应该销毁别名接口,以便不再使用以下方法将流量路由到旧NFS服务器:

ifconfig eth0:fakenfs down
Run Code Online (Sandbox Code Playgroud)

FreeBSD和类似的操作系统

该命令将类似于:

ifconfig em0 alias 192.0.2.55 netmask 255.255.255.255
Run Code Online (Sandbox Code Playgroud)

然后删除它:

ifconfig em0 delete 192.0.2.55
Run Code Online (Sandbox Code Playgroud)

man ifconfig(8)了解更多!

  • 'ifconfig eth0:fakenfs ...'和`umount -f -l/my/mount/dir'的组合为我解决了这个问题. (5认同)
  • @Shurane在Linux下,使用`ifconfig eth0:fakenfs down`删除别名应该可以解决问题. (2认同)

Rya*_*arn 20

试试跑步

lsof | grep /mnt/data
Run Code Online (Sandbox Code Playgroud)

这应列出正在访问/ mnt/data的任何进程,以防止它被卸载.

  • 当lsof永远挂起时,请尝试"lsof -b"(有一个与NFS相关的lsof错误,请参阅https://bugzilla.redhat.com/show_bug.cgi?id=962755). (2认同)

Dan*_* N. 11

我有同样的问题,也不 umount /path -f,既不是 umount.nfs /path -f,无论是 fuser -km /path,作品

最后我找到了一个简单的解决方案>.<

sudo /etc/init.d/nfs-common restart,然后让我们做简单umount;-)

  • 用'umount -f -l ...`为我工作 (5认同)