jmtd → 日志 → Linux 挂载命名空间

主要观点:介绍 Linux 容器技术中的挂载命名空间(mount namespaces)相关内容,包括创建、持久化新的挂载命名空间,从另一个进程进入命名空间等操作,并给出相关参考。
关键信息:

  • 命名空间通常与进程相关,最后一个关联进程终止时删除,要使其持久化需从/proc中的关联进程条目进行绑定挂载。
  • 创建新的挂载命名空间可使用unshare --mount=/root/mntns/1,进入命名空间可使用nsenter --mount=/root/mntns/1
  • 可通过findmnt -o+PROPAGATION检查挂载的传播设置,创建新目录并设置其传播属性为私有mount --bind --make-private /root/mntns /root/mntns
  • 在命名空间内可进行文件系统更改,如挂载 tmpfs 等,但在命名空间外不可见。
  • 可通过进程的/proc条目找到命名空间的整数标识符,如readlink /proc/$$/ns/mnt
    参考:
  • Building a container by hand using namespaces: The mount namespace
  • the unshare(1) man page
    重要细节:
  • 起初感觉将命名空间绑定挂载到文件而非目录很奇怪,符合“一切皆文件”的理念。
  • lsns在 util-linux 2.38.1 中不列出没有关联进程的挂载命名空间,而 2.41 中会列出,相关修复于 2022-11-08 完成,还提到命名空间可通过与文件系统解除链接的文件描述符保持持久。
阅读 6
0 条评论