Linux 하위 프로세스와 상위 프로세스 공유 마운트 지점이 일치하지 않습니다.

Linux 하위 프로세스와 상위 프로세스 공유 마운트 지점이 일치하지 않습니다.

배경을 설명해 보겠습니다.

메인 배쉬에서:

우리는 사용

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가 이 공유 마운트 지점을 계속 유지하기 때문에 폴더를 taregtrmdir할 수 없습니다 .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내버려 두세요.

관련 정보