mnt namespace

140 阅读2分钟

mnt namespace 隔离的资源是什么?

mnt namesapce 隔离的资源是挂载点。不同的mnt namespace 之间是无法看见各自的挂载点信息的。

mnt 挂载点的作用

自己的理解:挂载点会影响进程所看见的文件视图列表

mnt namespace的实质

创建一个进程,使用独立的mnt namespace, 进程会复制父进程的 mount table (挂载点表),

进程在自己的mnt namespace 之中对挂载点进行修改,只会影响本身的 mount table。

mnt 功能实验

目的:使用mnt 来验证文件隔离的功能

步骤:

  1:创建一个测试目录

     mkdir -p /opt/test/test

   2:创建一个进程,并分配一个独立的mount namespace

       unshare -m /bin/bash

  3:将tmpfs文件系统挂载到 /opt/test/test之中

      mount  -t tmpfs tmpfs /opt/test/test

  4:进入 /opt/test/test目录,并创建一个文件

       cd /opt/test/test; touch a.txt

  5:重新建立一个终端连接,查看 /opt/test/test下的文件信息。

      ls /opt/test/test

     如果不存在 /opt/test/test/a.txt说明mount资源隔离 成功。

     反之,失败。

问题

   1:  docker 文件系统资源隔离背后是如何实现的?

        docker 不仅仅是用 mnt namespace 进行资源隔离,对于 mnt namespace 资源隔离所导致的

        会复制父进程的mount table 信息的问题,采用pivot_root 系统调用来解决。

         注意:启动一个容器后,可以使用lsns 命令,会发现,多了一些新的namespace 

     2: pivot_root 的作用

          pivot_root 是由 Linux 提供的一种系统调用,它能够将一个 mount namespace 中的所有进程的根目录 和当前工作目录切换到一个新的目录。pivot_root 的主要用途是在系统启动时,先挂载一个临时的 rootfs 完成特定功能,然后再切换到真正的 rootfs。