rbind 마운트 후 재귀 적 umount


13

chroot를 입력 할 때 -bind 대신 -rbind를 사용하여 / sys 및 / dev를 마운트해야하는 경우가 있습니다.

마운트를 해제 할 때 문제가 발생합니다.

간단한 umount는 항상 실패합니다. 아이들도 장착되어 있고 사용중인 것처럼 보입니다.

$ 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)

아마도 해결책은 게으른 umount를 수행하는 것이지만 이것은 나에게 꽤 위험한 것 같습니다.

내가 놓친 더 좋은 방법이 있습니까?


1
당신은 반드시이 있습니까 /mnt/chroot/sys/kernel/security그 시점에서 장착? 출력은 grep /sys/kernel/security /proc/mounts무엇입니까? umount에 나열된 인수가 필요하지 않습니다 /etc/mtab. 전달 -n하면 파일이 전혀 열리지 않습니다.
Gilles 'SO- 악의를 그만두십시오

umount에 대한 xargs를 만들기위한 grep 명령을 자세히 살펴보면 / proc / mounts
natecornell

답변:


11

이것은 나를 위해 올바르게 작동했습니다 -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원래 오래된 마운트 포인트에서 바쁜 (오픈) 파일에 의해 영향을받을 것입니다. (매우 예상치 못한 ...)

이것이 최신 버전의 마운트에서 수정되었는지 알지 못하지만 동일한 마운트 호출 을 결합 --rbind하고 --make-rslave동일한 방식으로 호출해도됩니다.mount --rbind --make-rslave /dev /mnt/test
Javi Merino

1
두 인수를 결합 할 수 있지만 대신 비 재귀 마운트를 수행합니다. 따라서 실제로 의도 한대로 작동하지 않습니다.
Miral

10

이 답변에 대한 크레딧은 Gilles 로갑니다 . 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

Merci, Gilles!


1
시도 mount --rbind / /mnt && umount -n /mnt/dev/shm(또는 pts), 나는 얻는다 umount: /mnt/dev/shm: target is busy. umount -l /mnt시스템을 죽입니다 (예 : sudo가 din이 tty가 아니라고 말하지 않습니다). 설치된 Fedora 시스템에 있습니다. 나는 그것이 나의 오래된 문제라고 생각한다 : unix.stackexchange.com/questions/269695/…
sourcejedi

3

이후 폴더의 유틸리티 - 리눅스 v2.23 (25 4 월 2013)는 umount명령이 지원하는 -R, --recursive옵션을 선택합니다.

매뉴얼 페이지는 다음과 같습니다.

지정된 각 디렉토리를 반복적으로 마운트 해제하십시오. 체인에서 마운트 해제 조작이 어떤 이유로 실패하면 각 디렉토리의 재귀가 중지됩니다. 마운트 지점 간의 관계는 /proc/self/mountinfo 항목에 따라 결정됩니다 . 파일 시스템은 마운트 지점 경로로 지정해야합니다. 장치 이름 (또는 UUID)으로 재귀 마운트 해제가 지원되지 않습니다.


0

고마워 스크립트에서 이것을 사용하여 전체 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.