Linux 有挂载命名空间通过“共享子树”功能用于进程范围的安装树。
当您检查/proc/$pid/mountinfo
父/子安装命名空间中的进程时,您可以看到每个进程的对等组关系共享子树.txt。例如,外部名称空间的挂载/child
可能具有 tag shared:538
。在由创建的子挂载命名空间中unshare -M
,子进程可能会看到master:538
相同的挂载。
但有时这些 ID 不匹配。从父进程的角度来看,子进程对等组 ID 似乎不存在。例如,在我containerd
的角度中,nsenter -t 1 --all
我看到/proc/1/mountinfo
容器安装的条目具有shared:538
。但从nsenter -t $in_container_pid --all cat /proc/self/mountinfo
我的角度来看master:532
。
我认为这是由于设置容器环境然后exec
在容器内设置容器来宾进程的中间过程所致。
有没有办法列出这些挂载组对等 ID 并将它们映射到进程树和/或挂载命名空间 inode?据推测,这个对等组层次结构是在内核中的某个地方维护的,但我找不到它由任何实用程序(如lsns
sysfs 或 sysfs)公开的。