如何从另一个已安装设备隐藏的路径中卸载设备?

如何从另一个已安装设备隐藏的路径中卸载设备?

我有旧设备安装到/mnt和:

$ mount olddevice /mnt

我想更换设备/mnt挂载点。为此,我只需安装新设备在它的上面:

$ mount newdevice /mnt

这样,仍然具有文件描述符的进程旧设备可以在旧设备上继续工作,但新进程使用/mnt将使用新设备

我可以检测到什么时候旧设备不再使用并决定卸载它。我的问题是如何卸载它:

$ umount olddevice
umount: olddevice: umount failed: Invalid argument.

可以直接卸载吗?还是强制卸载新设备首先(我不想那样)?

答案1

如果您尚未按照 systemd 默认设置启用挂载传播来运行,请先运行以下命令:

mount --make-rshared /

然后:

mkdir /root.orig
mount --rbind / /root.orig
mount --make-rprivate /root.orig/mnt

mount newdevice /mnt
...
umount -R /root.orig/mnt    # instead of umount olddevice

然后安全地拆卸魔法 - 注意不要卸载整个系统:

mount --make-rprivate /root.orig
umount -l /root.orig
rmdir /root.orig

通常,我喜欢使用mount/umount命令的递归变体。您说您一开始只在下面安装了一个文件系统/mnt。在上面的序列中,我使用了umount -R /root.orig/mnt.如果还有一个文件系统安装在目录/mnt,此umount -R命令可能会中途失败。即因为子挂载上没有打开的文件,但主挂载上仍然有一些打开的文件。 IMO 这感觉与umount -l工作方式相似。 umount -l /path反汇编和分离挂载树,每个独立的文件系统一旦没有打开的文件就会被关闭。

相关内容