답변1
에서 언급했듯이커널 커밋 로그위의 jiliagre에 링크된 이 nsfs
파일 시스템은 Linux 커널을 만드는 가상 파일 시스템입니다.네임스페이스쓸 수 있는. /proc
이는 일부 프로세스 디렉터리 항목이 nsfs
파일 시스템의 inode를 참조하여 특정 프로세스(또는 스레드)에서 현재 사용 중인 네임스페이스를 표시하는 "proc" 파일 시스템과 별개입니다 .
nsfs
목록 /proc/filesystems
에 없으므로 proc
명시적으로 설치할 수 없습니다. mount -t nsfs ./namespaces
"알 수 없는 파일 시스템 유형"으로 인해 실패했습니다. 파일시스템과 밀접하게 얽혀 있기 nsfs
때문 이다 .proc
파일 시스템 유형은 nsfs
다음 경우에만 표시됩니다./proc/$PID/mountinfo
번들 설치기존(!) 네임스페이스 파일 시스템이 다른 대상에 연결되어 있습니다. Stephen Kitt가 위에서 올바르게 제안한 것처럼 이는 프로세스에서 더 이상 네임스페이스를 사용하지 않더라도 네임스페이스를 활성 상태로 유지하는 것입니다.
예를 들어, 새 네트워크 네임스페이스로 새 사용자 네임스페이스를 생성한 다음 이를 바인드 마운트한 다음 종료합니다. 네임스페이스는 여전히 존재하지만 더 이상 나열되지 않지만 존재 뷰를 바인드(확실히) 마운트하기 lsns
때문에 찾을 수 없습니다 ./proc/$PID/ns
# bind mount only needs an inode, not necessarily a directory ;)
touch mynetns
# create new network namespace, show its id and then bind-mount it, so it
# is kept existing after the unshare'd bash has terminated.
# output: net:[##########]
NS=$(sudo unshare -n bash -c "readlink /proc/self/ns/net && mount --bind /proc/self/ns/net mynetns") && echo $NS
# notice how lsns cannot see this namespace anymore: no match!
lsns -t net | grep ${NS:5:-1} || echo "lsns: no match for net:[${NS:5:-1}]"
# however, findmnt does locate it on the nsfs...
findmnt -t nsfs | grep ${NS:5:-1} || echo "no match for net:[${NS:5:-1}]"
# output: /home/.../mynetns nsfs[net:[##########]] nsfs rw
# let the namespace go...
echo "unbinding + releasing network namespace"
sudo umount mynetns
findmnt -t nsfs | grep ${NS:5:-1} || echo "findmnt: no match for net:[${NS:5:-1}]"
# clean up
rm mynetns
출력은 다음과 유사해야 합니다.
net:[4026532992]
lsns: no match for net:[4026532992]
/home/.../mynetns nsfs[net:[4026532992]] nsfs rw
unbinding + releasing network namespace
findmnt: no match for net:[4026532992]
네임스페이스는 nsfs 파일 시스템을 통해서는 생성될 수 없으며 시스템 호출을 통해서만 생성될 수 있습니다.클론()( CLONE_NEW...
) 그리고공유 취소. nsfs
네임스페이스의 현재 커널 상태만 반영할 뿐, 생성하거나 삭제할 수는 없습니다 .
네임스페이스는 참조나 프로세스가 없는 한 자동으로 삭제됩니다(따라서 no /proc/$PID/ns/...
).그리고위의 예에서 살펴본 것처럼 바인드 마운트도 없습니다.
답변2
이것은 다음에 의해 생성된 "네임스페이스 파일 시스템"입니다.setns
소스 코드에 표시된 대로 시스템 호출은ioctl과 관련된 네임스페이스(예를 들어 NS_GET_USERNS
, NS_GET_OWNER_UID
...)
NSFS
/proc
Linux 3.19 이전에는 파일 시스템에서 의사 파일 항목이 제공되었습니다. 여기있어이 변경 사항을 커밋합니다..
이 파일의 존재에 대한 가능한 설명은 Stephen Kitt의 의견을 참조하세요.