挂载名称空间为每个名称空间实例中的进程所看到的挂载列表提供隔离。因此,每个挂载名称空间实例中的进程将看到不同的单目录层次结构。
/proc/pid/mounts、/proc/pid/mountinfo和/proc/pid/mountstats文件提供的视图,对应于PID为pid的进程所在的挂载命名空间。(位于同一挂载名称空间中的所有进程将在这些文件中看到相同的视图。)
使用带有CLONE_NEWNS标志的clone(2)或unshare(2)创建新的挂载名称空间。当创建一个新的挂载命名空间时,它的挂载列表被初始化如下:
(1)如果名称空间是使用clone(2)创建的,子名称空间的挂载列表是父进程的挂载名称空间的挂载列表的副本。
(2)如果使用unshare(2)创建命名空间,则新命名空间的挂载列表是调用方以前的挂载命名空间中的挂载列表的副本。
对任何一个挂载名称空间中的挂载列表(mount(2)和umount(2))的后续修改不会(默认情况下)影响另一个名称空间中的挂载列表(但请参阅下面关于共享子树的讨论)。
在完成挂载名称空间的实现之后,经验表明,在某些情况下,它们提供的隔离性太大了。例如,为了使新加载的光盘在所有挂载名称空间中可用,需要在每个名称空间中执行挂载操作。对于这个用例和其他用例,Linux 2.6.15中引入了共享子树特性。该特性允许在名称空间之间(或者更准确地说,在作为对等组成员的mount(2)和umount(2)事件相互传播的mount(2)之间自动、受控地传播事件)。
每个挂载(通过mount(2))被标记为具有以下传播类型之一:
MS_SHARED
此挂载与对等组的成员共享事件。Mount(2)和umount(2)事件将立即传播到作为对等组成员的其他挂载。这里的传播意味着相同的mount(2)或umount(2)将在对等组中的所有其他mount(2)下自动发生。相反,