다음 명령을 실행하는 시작 스크립트가 있습니다.
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
루트 쉘이 스크립트의 하위 프로세스이기 때문입니까?
이것은 나에게 아무런 의미가 없습니다.
제한cryptsetup close
:하위 루트 쉘에서 호출하겠습니다.
답변1
/mnt
sudo
스크립트를 실행하는 셸과 자체 라는 두 가지 프로세스에 의해 계속 사용됩니다 . 루트 쉘에서는 작업 디렉토리를 변경할 수 없습니다.
cd
마운트 지점에 들어가지 않도록 스크립트를 변경하거나 umount -l
루트 쉘을 종료하기 전에 사용할 수 있습니다. 후자는 마운트 해제를 지연시키며, 쉘을 종료하면 sudo
상위 쉘도 종료되어 마운트 지점이 해제됩니다.
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