Bash
無法解除安裝從腳本掛載的 /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
在根外殼中,我得到:
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
:我將從子根 shell 中呼叫。
/mnt
由兩個程序保持忙碌:執行腳本的 shell 和sudo
自身。您不能從根 shell 更改它們的工作目錄。您可以更改腳本使其不
cd
進入掛載點,也可以umount -l
在退出根 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