如何真正强制卸载文件系统(无需手动调查其繁忙原因)

如何真正强制卸载文件系统(无需手动调查其繁忙原因)

如何在 Linux 中卸载文件系统而不调查其繁忙原因?

我想用一个命令来完成它。它应该处理使用该文件系统的应用程序、子挂载、容器(lxc-execute -n qqq <command>)和所有其他东西。

只需“卸载。没有异议!”。允许使用特殊内核补丁或配置。

文件系统应该确实被卸载,所以umount -l肯定不是一个选项。例如,cryptsetup remove(顺便问一下如何强制cryptsetup remove更新: cryptsetup luksSuspendcryptsetup luksResume,但如果不是 LUKS,您将无法做到)。

如何使该文件系统上的所有文件句柄无效?

我知道的唯一可靠的方法是通过 FUSE 安装文件系统(卸载 FUSE 通常没有问题,因为我可以直接终止它的进程)。

PS 已经知道 mount fuserlsof | grepcat /proc/*/mounts | grep过时的不起作用的“badfs patch”。

答案1

umount --forceumount -f同等学历)

如果失败,则使用:

umount --lazyumount --l同等学历)

这 ”懒惰的“选项将立即将文件系统从文件系统层次结构中分离出来,并在文件系统不再繁忙时清除对文件系统的所有引用。(需要内核 2.4.11 或更高版本。)”它可能 导致不稳定,但会导致卸载该驱动器。使用该驱动器的任何程序都可能崩溃。

答案2

使用神奇的 SysRq 键连击:Alt++SysRqu

请注意,您可能应该先进行紧急同步:Alt++SysRqs

另请注意,在某些(尤其是较新的)键盘上,您必须使用PrtSc而不是SysRq

答案3

恐怕没有办法用一个命令来完成这个任务。umount -f确实没有人们希望的那样顺利。如果其他挂载下有子挂载,您不能只是以某种随机顺序卸载这些挂载,然后希望它们会挂载下来。

但不用担心,有一种方法可以将所有这些变成一个命令:创建一个 shell/Perl 脚本,该脚本可以终止所需的进程、卸载容器、子挂载并最终卸载其他挂载。然后,您可以根据需要调用您的脚本。最初,这对您来说需要做更多的工作,但在您让脚本运行之后,一切都变得轻而易举。:)

答案4

umount -f

当文件系统繁忙时可用于强制卸载。

相关内容