【问题标题】:Linux - use of term mount in clone man pageLinux - 在克隆手册页中使用术语 mount
【发布时间】:2014-05-18 05:25:29
【问题描述】:

我询问了question 以澄清安装在 Linux 中的含义。

我对克隆手册页中这个术语的使用有疑问:

The namespace of a process is the data (the set of mounts) describing the file 
hierarchy as seen by that process. 

安装集 - 描述文件层次结构对我来说似乎是一种误导。

根据我基于接受的answer 的理解,文件层次结构可能不仅仅是挂载集,因为挂载集只是将文件系统添加到现有文件系统的挂载点.

谁能澄清一下?

【问题讨论】:

    标签: linux clone mount


    【解决方案1】:

    如果您将“安装集”视为(至少)一组(设备,安装点)对,而不仅仅是一组安装点 em>,然后它开始看起来很像fstabmount 命令的输出(不带参数),尽管没有关于标志和选项的附加信息(例如rwnosuid 等.).

    这样的“一组挂载”提供了关于哪些文件系统挂载在哪里的完整信息。根据定义,这是进程的“挂载命名空间”。一旦您从拥有一个全局挂载命名空间的传统情况转变为拥有每个进程的挂载命名空间,当进程 fork()s 时会出现其他问题。

    传统上,挂载或卸载文件系统会改变所有进程所看到的文件系统。

    使用每个进程的挂载命名空间,子进程可以拥有与其父进程不同的挂载命名空间。现在出现一个问题:

    子节点对挂载命名空间所做的更改是否应该传播回父节点?

    很明显,这个功能必须至少是被支持的,而且,事实上,可能必须是默认的。否则,启动 mount 命令本身不会产生任何变化(因为父 shell 看到的文件系统不会受到影响)。

    同样清楚的是,这种必要的传播也必须有可能被抑制,否则我们永远无法创建挂载命名空间与其父进程不同的子进程,而我们又拥有一个全局挂载命名空间(init 看到的文件系统)。

    因此,我们必须决定 fork() 子进程是从父进程获取有关已挂载文件系统的数据的自己的副本,它可以在不影响父进程的情况下更改它,还是获取指向与父进程相同的数据结构的指针,它可以更改(更改传播回来所必需的,就像您从 shell 启动 mount 时一样)。

    如果将CLONE_NEWNS 标志传递给clone()fork(),则子进程将获得其父文件系统数据的副本,它可以在不影响父文件系统的挂载命名空间的情况下对其进行更改。否则,它会获得一个指向父数据结构的指针,父数据结构将看到子数据结构所做的更改(因此mount 命令本身可以工作)。

    【讨论】:

    • 那么文件系统除了挂载点之外没有目录了?
    • 这取决于您所说的“文件系统”。人们用它来表示所有文件和目录的完整结构,一方面是指所有文件和目录的完整结构,但也用于将这些文件和目录组织在一个分区中的格式(如“ext4 文件系统”)以及介于两者之间的很多东西.
    • 我将文件系统称为目录层次结构(所有文件和目录的完整结构)。
    • 在这种情况下,设备列表及其挂载点显然是不够的。我想我是在一个稍微不同的层次上思考的,对于“文件系统”的某种松散含义,例如,仅通过 mount 的输出就可以充分描述它。
    • 将文件系统视为完整的文件和目录集,将挂载点视为挂载其他文件系统的目录,您能否编辑您的答案并分享您对在克隆手册页中的给定句子 (man7.org/linux/man-pages/man2/clone.2.html),谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2014-10-13
    • 2018-05-18
    相关资源
    最近更新 更多