namespace与mount namespace

原文:《Namespaces in operation, part 1: namespaces overview》
部分译文:php

namspaces(命名空间)

目前,Linux实现了六种不一样的namespaces。每一种namespace的目的是为了抽象地包装出某种特定的全局系统资源,来让在对应namespace下的进程中,看起来像是拥有本身的独立全局资源实例。namespaces的一个主要目的之一就是支持容器的实现,容器是一种轻量的虚拟化工具,这种工具提供了一种对外呈现为一个进程是系统上惟一一个进程的能力。
在接下来的讨论中,咱们将按照他们的实现顺序描述这些namespaces。CLONE_NEW*这些在括号中列出的标示符,会被用在下文中将被描述的namespace-related APIs(clone(), unshare()和setns())中,做为不一样namespace类型的常量名称。html

Mount namespaces(CLONE_NEWNS, Linux 2.4.19)

独立出来一组能够被一组进程看到的文件系统挂载点。所以,处在不一样mount namespace的进程族,会看到不一样层次结构的文件系统。添加了mount namespace以后,mount()和unmount()的系统调用就再也不操做能够被全局进程看到的挂载点了,而是去操做仅影响与调用进程相关联的挂载点。
一种是用mount namespaces的方式是创造一个相似于chroot jails的环境。同时,对于同一个task而言,和单纯是用chroot系统调用相比,mount namespaces是一种更加安全和灵活的工具。固然,mount namespace 其余更加复杂的用途的用途也是能够的。好比,mount namespace能够被用在主备关系上,mount时间就能够自动从一个namespace传播到另外一个namespace;举个例子,这就容许挂载在一个namespace下的光盘设备出如今其余的namespace中。
Mount namespace是Linux上在2002年,第一个被实现的namespace。这也解释了至关通用的“NEWS”的绰号(“new namespace的缩写”):当时并无人意识到,会有其余不一样类型的namesapce可能会在未来被用到。node

Refs:
DOCKER基础技术:LINUX NAMESPACElinux

基础补充

挂载

每一个文件系统都有独立的inode、block,super block等信息,这些文件系统要连接到目录树才可以被使用。将文件系统与目录树结合的操做被称为挂载。其中,挂载点是目录,该目录是进入文件系统的入口。web