내 바인드 마운트가 마운트 네임스페이스 외부에 표시되는 이유는 무엇입니까?

내 바인드 마운트가 마운트 네임스페이스 외부에 표시되는 이유는 무엇입니까?

그래서 Linux의 마운트 네임스페이스가 어떻게 작동하는지 이해하려고 합니다. 그래서 저는 약간의 실험을 하고 두 개의 터미널을 열고 다음 명령을 실행했습니다.

터미널 1

root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt

터미널 2

root@goliath:~# ls b
foo.txt

이 마운트가 제2터미널에서 보이는 이유는 무엇인가요? 마운트 네임스페이스의 일부가 아니기 때문에 여기서는 디렉토리가 비어 있는 것으로 표시하고 싶습니다. 또한 옵션을 전달 -o shared=no하고 사용해 보았지만 동일한 결과를 얻었습니다.--make-privatemount

내가 놓치고 있는 부분은 무엇이며 실제로 비공개로 설정하려면 어떻게 해야 하나요?

답변1

util-linux2.27보다 오래된 시스템 기반 배포판을 사용하는 경우 이러한 직관적이지 않은 동작을 보게 됩니다. CLONE_NEWNS예를 들어 전파 플래그는 shared커널 설정에 따라 달라지기 때문입니다 . 이 설정은 정상이지만 privatesystemd가 이를 변경합니다 shared. 2.27 부터 util-linux,패치가 만들어졌습니다unshare기본 전파 동작 으로 사용되는 명령의 기본 동작을 private보다 직관적으로 변경했습니다.

해결책

버전 2.27 이전의 systemd 시스템을 사용하는 경우 util-linux루트 파일 시스템을 다시 마운트해야 합니다.뒤쪽에실행 unshare명령:

# unshare --mount -- /bin/bash
# mount --make-private -o remount /

버전 2.27 이상의 systemd 시스템을 사용하는 경우 util-linux다시 설치하지 않고도 질문에 제공한 예에서 그대로 작동해야 합니다. 그렇지 않은 경우 명령 --propagation private을 전달 unshare하여 마운트 네임스페이스 전파를 비공개로 강제 설정합니다.

답변2

우분투(15.04 및 14.04)에서는 작동하지 않습니다. 페도라와 잘 어울립니다. 그리고 페도라. --make-private가 필요한지 여부를 확인할 수도 있습니다.

고양이 /proc/self/mountinfo grep 공유 |

공유되는 경우 다른 네임스페이스에서 계속 마운트를 볼 수 있다는 의미입니다. 그런 다음 시스템 관련 문제가 있습니다. --make-private를 사용하여 작동하게 할 수 있습니다.

답변3

util-linux2.27 이전의 Debian 9 버전에서는 ,데이브의 솔루션나에게는 효과가 없습니다. 그러나 이것은 작동합니다:

mount --make-rprivate -o remount /

접두어가 있다는 점에 유의하세요 r.재귀적으로.

관련 정보