Bash

無法解除安裝從腳本掛載的 /mnt

  • January 2, 2021

我有一個執行以下命令的啟動腳本:

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

引用自:https://unix.stackexchange.com/questions/627179