namespace与mount namespace

本文介绍了Linux中的命名空间,特别是Mount Namespace,它允许进程看到独立的文件系统挂载点,增强了容器的安全性和灵活性,例如在Docker技术中。文章还提到了Mount Namespace相对于chroot的优势,并提及它是2002年首次实现的命名空间类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:《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等信息,这些文件系统要链接到目录树才能够被使用。将文件系统与目录树结合的操作被称为挂载。其中,挂载点是目录,该目录是进入文件系统的入口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值