저는 리눅스를 사용하고 있습니다.
설치 네임스페이스에 프로세스가 있습니다. 그 과정에서 하나 만들었어요 mount -t tmpfs tmpfs /mountpoint
.
프로세스가 종료되고 해당 설치 네임스페이스에 더 이상 프로세스가 없으면 어떻게 됩니까? 파일 시스템이 자동으로 마운트 해제됩니까? 네임스페이스 마운트가 손상됩니까? 네임스페이스와 마운트가 여전히 활성 상태인 경우 어떻게 액세스합니까?
네트워크 네임스페이스에 더 이상 프로세스가 없으면 tun/tap/macvtap 인터페이스는 어떻게 되나요?
답변1
저도 같은 것이 궁금해서 작은 테스트를 실행했습니다(커널 4.20.0에서 util-linux 2.33의 unshare를 사용하여 해당 버전의 unshare에 대한 맨페이지에는 읽어 볼 가치가 있는 공유/개인 마운트에 대한 몇 가지 참고 사항이 있으며, YMMV는 다음과 같습니다). 이전 버전을 사용하고 있습니다.
간단히 말해서:예, 네임스페이스의 마지막 프로세스가 종료되면 파일 시스템이 마운트 해제됩니다.
제 경우에는 테스트 중인 기기는 입니다 dm-6
.아니요"외부" 네임스페이스에 설치됩니다.
창 1:
cd /sys/fs/ext4
ls -d dm-6
# No such file or directory
창 2:
unshare -m
mount /dev/dm-6 /mnt/tmp
# don't exit yet, keep the namespace active
창 3: 창 1과 동일한 작업을 수행합니다.
창 1:
ls -d dm-6
# exists now
창 2: unshare
환경 종료
창 1: 다시 확인하세요. dm-6
여전히 남아 있습니다.
창 3: unshare
환경 종료
창 1: 다시 확인하면 dm-6
다시 사라졌습니다.
또 다른 유용한 데모/테스트: 비슷한 아이디어이지만 3개의 창을 사용하는 대신 창 2에 두 번 들어가고 종료합니다. dmesg
이 경우 파일 시스템 마운트에 대한 커널 메시지가 두 번 나타나는지 확인 하거나 기록하고 검증하십시오.
답변2
마운트가 여전히 존재하는 것으로 보이지만 접근할 수 없게 됩니다.
다음 테스트를 수행했습니다.
- 새 네임스페이스를 입력하고 tmpfs를 마운트합니다.
root@localhost:~# mkdir tmp root@localhost:~# 공유 취소 -m bash root@localhost:~# 마운트 -t tmpfs tmpfs tmp
- tmpfs에서 200MB 파일 생성 전후의 메모리 사용량을 확인하십시오. "공유" 사용량이 404MB에서 604MB로 변경된 것을 확인할 수 있습니다.
root@localhost:~# free -m 사용 가능한 총 무료 공유 버퍼/캐시 수 모바일: 9885 2966 681 404 6237 6148 교환: 8191 293 7898 root@localhost:~# dd if=/dev/urandom of=tmp/dummy bs=1M count=200 200+0개 레코드 200+0 레코드 출력 209715200바이트(210MB, 200MiB), 12.0075초, 17.5MB/초 복사 root@localhost:~# free -m 사용 가능한 총 무료 공유 버퍼/캐시 수 모바일: 9885 2966 481 604 6437 5948 교환: 8191 293 7898
- 공유 해제 셸을 종료하면 메모리가 회수되지 않습니다.
root@localhost:~# 종료 root@localhost:~# free -m 사용 가능한 총 무료 공유 버퍼/캐시 수 모바일: 9885 2963 484 604 6437 5951 교환: 8191 293 7898
그리고 tmpfs를 마운트 해제하면 shared
개수가 초기 값으로 돌아갑니다.
답변3
담당자가 충분하지 않아 설명을 추가할 수 없습니다. 수정되지 않은 Debian Stretch에서 jpa로 똑같은 테스트를 수행했는데 제거하지 않았음에도 메모리가 초기 값으로 돌아왔습니다. 그래서 이 동작이 변경된 것 같습니다.
http://man7.org/linux/man-pages/man7/namespaces.7.html
이는 적어도 다음을 통해 암시됩니다.
이 디렉터리의 파일 중 하나를 파일 시스템의 다른 위치에 바인딩하여 마운트합니다(mount(2) 참조). 현재 네임스페이스의 모든 프로세스가 활성 상태를 종료하더라도 pid로 지정된 프로세스에 해당하는 네임스페이스는 그대로 둡니다.
따라서 이렇게 하지 않으면 네임스페이스(?)가 손상됩니다.