我有一个启动脚本,它执行以下命令:
sudo cryptsetup open /dev/sda3 dm_crypt && sudo mount -t btrfs /dev/mapper/dm_crypt /mnt && cd /mnt && ls -la && sudo -s这基本上打开了我的LUKS设备,并安装了BTRFS根分区,并启动了一个根外壳以供进一步工作。
这一切都很好,但当我尝试去做的时候:
umount -f /mnt在根壳中,我得到:
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是因为根shell是脚本的子进程吗?
这对我来说没有任何意义。
约束:我将从子根shell中调用cryptsetup close。
发布于 2021-01-02 11:26:48
/mnt由两个进程保持忙碌:运行脚本的shell和sudo本身。您不能从根shell中更改它们的工作目录。
您可以更改您的脚本,这样它就不会cd到您的挂载点,或者您可以在退出根shell之前使用umount -l。后者将懒洋洋地卸载,当您退出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_crypthttps://unix.stackexchange.com/questions/627179
复制相似问题