我有一个执行以下命令的启动脚本:
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