无法卸载从脚本安装的 /mnt

无法卸载从脚本安装的 /mnt

我有一个执行以下命令的启动脚本:

sudo cryptsetup open /dev/sda3 dm_crypt && sudo mount -t btrfs /dev/mapper/dm_crypt /mnt && cd /mnt && ls -la && sudo -s

这基本上会打开我的 LUKS 设备并安装 BTRFS 根分区并启动根 shell 以便进一步工作。

这一切都很棒,但是当我尝试这样做时:

umount -f /mnt

在 root shell 中我得到:

umount: /mnt: target is busy.

有人能告诉我为什么会发生这种情况吗?

我对吗,如果我的启动脚本中的所有命令都作为相互进程执行?那忙什么呢/mnt

这是以下的输出lsof | grep /mnt

bash      1890                       liveuser  cwd       DIR               0,45        42        256 /mnt
sudo      2168                           root  cwd       DIR               0,45        42        256 /mnt

是因为 root shell 是脚本的子进程还是什么?

这对我来说没有任何意义。

约束条件cryptsetup close:我将从子 root shell 中调用。

答案1

/mnt由两个进程保持忙碌:运行脚本的 shell 和sudo它本身。您无法从根 shell 更改它们的工作目录。

您可以更改脚本,使其不会cd进入您的安装点,或者您可以umount -l在退出 root shell 之前使用。后者将延迟卸载,当您退出 shell 时,sudo父 shell 也会退出,从而释放挂载点。

如果您也希望能够关闭 LUKS 卷,最好的方法是将其添加到脚本中:

sudo cryptsetup open /dev/sda3 dm_crypt && sudo mount -t btrfs /dev/mapper/dm_crypt /mnt && cd /mnt && ls -la && sudo -s
cd - && sudo umount /mnt && sudo cryptsetup close dm_crypt

相关内容