namespace与mount namespace

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

namspaces(命名空间)

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

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可能会在将来被用到。

Refs:
DOCKER基础技术:LINUX NAMESPACE

基础补充

挂载

每个文件系统都有独立的inode、block,super block等信息,这些文件系统要链接到目录树才能够被使用。将文件系统与目录树结合的操作被称为挂载。其中,挂载点是目录,该目录是进入文件系统的入口。(《鸟哥的Linux私房菜》
挂载是指由操作系统使一个存储设备上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。 一般来说,当计算机关机时,每个已挂载存储都将经历一次卸载,以确保所有排队的数据被写入,并保证介质上文件系统结构的完整性(wikipedia

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章