我要求question澄清一下Linux中的挂载意味着什么。
我对克隆手册页中使用这个术语表示怀疑:
The namespace of a process is the data (the set of mounts) describing the file
hierarchy as seen by that process.
这些坐标 - 描述文件层次结构对我来说似乎有误导性。
根据我所理解的基于已接受的answer,文件层次结构可能不仅仅是一组安装,因为安装集将只是文件系统添加到现有的安装点文件系统。
任何人都可以澄清吗?
答案 0 :(得分:1)
如果您认为“安装集”是(至少)一组(设备,挂载点)对,而不仅仅是一组挂载点,然后它开始看起来很像fstab
或mount
命令的输出(没有参数),虽然没有关于标志和选项的附加信息(例如rw
,nosuid
等。)。
这样的“一组安装”提供了有关哪些文件系统安装在哪里的完整信息。根据定义,这是进程的“mount命名空间”。一旦您从具有一个全局安装命名空间的传统情况转变为具有每个进程安装命名空间,当进程fork()
时会出现其他问题。
传统上,安装或卸载文件系统会改变所有进程看到的文件系统。
使用每进程挂载命名空间,子进程可能与其父进程具有不同的挂载命名空间。现在出现一个问题:
子项所做的mount命名空间的更改是否会传播回父级?
显然,此功能必须至少必须支持,实际上,必须是默认值。否则,启动mount
命令本身不会产生任何变化(因为父shell看到的文件系统不会受到影响)。
同样清楚的是,必须还可以抑制抑制,否则我们永远不能创建一个子进程,其mount命名空间与其父进程不同,我们再次有一个全局mount命名空间(init
所见的文件系统)。
因此,我们必须决定fork()
子进程是否从父进程获取有关已挂载文件系统的数据的副本,它可以在不影响父进程的情况下进行更改,或者获取指向相同数据结构的指针as,它可以改变(改变传播回来所必需的,就像从shell中启动mount
一样)。
如果将CLONE_NEWNS
标记传递给clone()
或fork()
,则该子项会获取其父级已挂载文件系统数据的副本,它可以在不影响父级的mount命名空间的情况下进行更改。否则,它会获得父项数据结构的指针,父项将看到子项所做的更改(因此mount
命令本身可以正常工作)。