我有旧设备安装到/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
反汇编和分离挂载树,每个独立的文件系统一旦没有打开的文件就会被关闭。