기존 마운트 네임스페이스를 사용하여 새 프로세스 네임스페이스 생성

기존 마운트 네임스페이스를 사용하여 새 프로세스 네임스페이스 생성

공유 해제로 생성된 프로세스 네임스페이스를 종료한 후 새 프로세스 네임스페이스를 생성하는 방법을 알 수 없습니다. 예를 들어, 다음이 있습니다.

unshare -f --mount-proc --mount=/containers/1/ns/mnt --pid=/containers/1/ns/pid

다른 터미널에서 이 네임스페이스를 입력합니다.

nsenter --mount=/containers/1/ns/mnt --pid=/containers/1/ns/pid

공유 해제를 통해 시작된 셸을 종료하면 다시 들어갈 수 없습니다.

nsenter: 포크 실패: 메모리를 할당할 수 없습니다.

나는 그것으로부터 다음과 같은 아이디어를 얻었다.중간 위치. 하지만 이것은 매번 새로운 프로세스 네임스페이스를 생성하는데, 이는 내가 원하는 것이 아닙니다.

nsenter --mount=/containers/1/ns/mnt unshare -f --mount-proc --pid

pid 파일과 함께 작동하도록 할 수 없으며 문제가 무엇인지 이해하지 못합니다.

nsenter --mount=/containers/1/ns/mnt unshare -f --mount-proc --pid=/containers/1/ns/pid
unshare: cannot stat /proc/11379/ns/mnt: No such file or directory

공유 해제된 쉘에서 nsenter를 실행해 보았지만 다음과 같은 결과를 얻었습니다.

nsenter: 'ns/mnt' 네임스페이스에 대한 재연결 실패: 잘못된 인수

마지막으로, 내가 원하는 대로 작동한다고 생각하는 솔루션을 찾았지만 첫 번째 프로세스가 올바른 설치 네임스페이스에 있지 않기 때문에 어색하고 두 개의 프로세스를 만들어야 합니다.

# Terminal 1
unshare -f --mount-proc --pid=/containers/1/ns/pid
# Terminal 2
nsenter --mount=/containers/1/ns/mnt --pid=/containers/1/ns/pid unshare -f --mount-proc

원래 프로세스 네임스페이스를 종료하고 스크립트를 다시 실행하여 설치 네임스페이스의 모든 항목을 설정하면 다시 시작할 수 있지만 매번 완전히 다시 시작하지 않고도 이를 수행할 수 있는 방법이 있다고 생각합니다.

답변1

나는 마침내 다음을 알아 냈습니다. 요령은 입력 프로세스 네임스페이스와 마운트 프로세스 사이에 입력 마운트 네임스페이스를 끼워야 한다는 것입니다. 이 --mount-proc플래그는 새로운 마운트 네임스페이스를 의미합니다. 분명히 unshare를 사용하여 마운트 네임스페이스를 생성한 후에는 기존 마운트 네임스페이스로 이동할 수 없습니다. 재연결 오류 메시지입니다.

# Terminal 1
unshare --pid=/containers/1/ns/pid -f nsenter --mount=/containers/1/ns/mnt unshare --mount-proc
# Terminal 2
nsenter --pid=/containers/1/ns/pid --mount=/containers/1/ns/mnt unshare --mount-proc

이것의 한 가지 단점은 터미널 1과 2의 쉘이 이제 서로 다른 마운트 네임스페이스에 있으므로 기존 마운트를 공유하더라도 한 터미널의 향후 변경 사항이 다른 터미널에서 볼 수 없다는 것입니다. 그러나 어차피 그렇게 해도 소용이 없다는 것을 깨달았습니다. 마운트 네임스페이스는 재부팅 후에도 유지되지 않으므로 이 모든 문제에 빠지는 대신 스크립트를 다시 실행하는 것이 좋습니다.

관련 정보