배경을 설명해 보겠습니다.
메인 배쉬에서:
우리는 사용
mount --bind /tmp/source /tmp/target
mount --make-shared /tmp/target
이 공유 마운트 지점 생성target
그런 다음 우리는
unshare -m /bin/bash
아이들의 난교를 시작하세요. 지금까지는 모든 것이 정상적으로 보입니다.
그런 다음 기본 bash에서 target
성공적으로 제거했습니다.
umount /tmp/target
이 커널 문서에 따르면:공유 하위 트리. target
하위 스레드가 (unshare -m)을 통해 시작되었더라도 CLONE_NEWNS
하위 bash도 언로드된 것을 확인해야 합니다. 그러나 이제 문제가 발생합니다.
Child bash에서는 cat /proc/self/mountinfo
, 발견이 target
여전히 존재합니다!
78 48 8:3 /tmp/source /tmp/target rw,relatime shared:1 - ext4 /dev/disk/by-uuid/98708f21-a59d-4b80-a85c-27b78c22e316 rw,errors=remount-ro,data=ordered
이는 위 문서의 동작과 일치하지 않습니다. 메인 배쉬에서 cat을 실행하여 제거된 /proc/self/mountinfo
것을 확인합니다 . 이제 하위 bash가 이 공유 마운트 지점을 계속 유지하기 때문에 폴더를 taregt
rmdir할 수 없습니다 .target
rm -rf /tmp/target
rm: cannot remove ‘/tmp/target’: Device or resource busy
Ubuntu 14.04 및 CentOS 6.6에서 테스트했습니다. 이것은 커널 버그입니까? 아니면 Linux의 공유 마운트를 잘못 이해한 것 같습니다.
답변1
he 명령의 최신 버전은 기본적으로 unshare
마운트 전파를 비공개로 설정합니다 . 그냥 --propagation unchanged
내버려 두세요.