如何在 Linux 中卸载文件系统而不调查其繁忙原因?
我想用一个命令来完成它。它应该处理使用该文件系统的应用程序、子挂载、容器(lxc-execute -n qqq <command>
)和所有其他东西。
只需“卸载。没有异议!”。允许使用特殊内核补丁或配置。
文件系统应该确实被卸载,所以umount -l
肯定不是一个选项。例如,cryptsetup remove
(顺便问一下如何强制cryptsetup remove
?更新: cryptsetup luksSuspend
cryptsetup luksResume
,但如果不是 LUKS,您将无法做到)。
如何使该文件系统上的所有文件句柄无效?
我知道的唯一可靠的方法是通过 FUSE 安装文件系统(卸载 FUSE 通常没有问题,因为我可以直接终止它的进程)。
PS 已经知道 mount fuser
、lsof | grep
和cat /proc/*/mounts | grep
过时的不起作用的“badfs patch”。
答案1
umount --force
或umount -f
同等学历)
如果失败,则使用:
umount --lazy
或umount --l
同等学历)
这 ”懒惰的“选项将立即将文件系统从文件系统层次结构中分离出来,并在文件系统不再繁忙时清除对文件系统的所有引用。(需要内核 2.4.11 或更高版本。)”它可能 导致不稳定,但会导致卸载该驱动器。使用该驱动器的任何程序都可能崩溃。
答案2
答案3
恐怕没有办法用一个命令来完成这个任务。umount -f
确实没有人们希望的那样顺利。如果其他挂载下有子挂载,您不能只是以某种随机顺序卸载这些挂载,然后希望它们会挂载下来。
但不用担心,有一种方法可以将所有这些变成一个命令:创建一个 shell/Perl 脚本,该脚本可以终止所需的进程、卸载容器、子挂载并最终卸载其他挂载。然后,您可以根据需要调用您的脚本。最初,这对您来说需要做更多的工作,但在您让脚本运行之后,一切都变得轻而易举。:)
答案4
umount -f
当文件系统繁忙时可用于强制卸载。