루트를 변경할 때 누군가가 볼 때 모든 것이 올바른 위치에 있는지 확인하기 위해 -bind 대신 -rbind를 사용하여 /sys 및 /dev를 마운트해야 하는 경우가 있습니다.
문제는 제거할 때 발생합니다.
단순 제거는 항상 실패합니다. 어린이가 설치된 경우 사용 중인 것 같습니다.
$ umount /mnt/chroot/sys
umount: /mnt/chroot/sys: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
또 다른 가능한 해결책은 다음과 같이 proc에 마운트를 나열한 다음 각각을 마운트 해제하는 것입니다.
$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount
그러나 재귀 마운트가 실제로 mtab에 등록되지 않았기 때문에 이 역시 실패합니다.
/mnt/chroot/sys/kernel/security is not mounted (according to mtab)
어쩌면 해결 방법은 지연된 제거를 수행하는 것일 수도 있지만 이는 나에게 매우 위험해 보입니다.
내가 놓친 것보다 더 좋은 방법이 있습니까?
답변1
이 느낌이 딱 맞는 것 같아요 -https://unix.stackexchange.com/a/264488/4319:
mount --rbind /dev /mnt/test
mount --make-rslave /mnt/test
umount -R /mnt/test
처음 두 명령을 두 개의 개별 명령으로 처리하는 것이 중요합니다. 단일 마운트 호출로 --rbind
두 명령을 결합하지 마십시오.--make-rslave
그렇지 않은 경우 --make-rslave
해당 동작은 원하지 않는 것입니다(그리고 성공하지 못한 것입니다).
umount -l
원래의 이전 마운트 지점에도 영향을 미칩니다.umount -R
원래의 이전 마운트 지점에서 사용 중인(열린) 파일의 영향을 받습니다 . (그래서 예상치 못한...)
답변2
신용은 다음과 같습니다자일스이 답변에 대해 Gilles는 질문 주석에서 "-n" 스위치가 mtab을 무시하고 /proc/mounts에 나열된 모든 것을 마운트 해제한다고 지적했습니다.
맨페이지에서:
-n Unmount without writing in /etc/mtab.
따라서 --rbind를 제거하는 방법에 대한 내 질문에 답하기 위해 다음은 나에게 도움이 된 전체 명령입니다.
grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount -n
고마워요, 자일스!
답변3
~부터유틸리티Linux v2.23(2013년 4월 25일) 이 umount
명령은 이 -R, --recursive
옵션을 지원합니다.
매뉴얼 페이지는 다음과 같습니다.
지정된 각 디렉터리를 반복적으로 제거합니다. 어떤 이유로든 체인의 마운트 해제 작업이 실패하면 각 디렉터리에 대한 재귀가 중지됩니다. 마운트 지점 사이의 관계는 항목에 의해 결정됩니다
/proc/self/mountinfo
. 파일 시스템은 마운트 지점 경로로 지정되어야 하며 장치 이름(또는 UUID)을 통한 재귀적 마운트 해제는 지원되지 않습니다.
마운트된 파일 시스템의 경우 불만이 있으면 마운트 해제하기 전에 해당 파일 시스템을 실행 --rbind
해야 할 수도 있습니다 .mount --make-rslave
umount
device is busy
답변4
고마워요. 나는 전체 chroot-tree를 마운트 해제하기 위해 스크립트에서 이것을 사용합니다: ($MNT를 적절하게 설정했는지 확인하십시오)
for dir in $(grep "$MNT" /proc/mounts | cut -f2 -d" " | sort -r)
do
umount $dir 2> /dev/null
(( $? )) && umount -n $dir
done