Linux mount namespace 修改挂载时怎么避免影响宿主
在 Linux 上用 mount namespace 做临时挂载,最容易踩的坑是以为“有了 --mount 就天然不会影响宿主”。真正决定 mount、umount 是否外溢的是挂载传播属性。稳妥做法是:创建独立的 mount namespace,进入后把根挂载树递归设为 private,再只操作专用目录;PID namespace 和 network namespace 可以一起创建,但它们不会替代挂载隔离。
可复用的判断是:先用unshare --mount --propagation private建立边界,再用/proc/self/mountinfo看有没有shared:或master:标记。没有传播关系的挂载操作才不会回到宿主的挂载视图。
- mount namespace 隔离的是进程看到的挂载列表,不是磁盘本身。
shared会传播事件,private不进不出,slave只接收上游事件。- PID 和网络 namespace 是独立维度,是否影响宿主挂载要回到 mount propagation 检查。
先分清三种 namespace 的边界
mount namespace 给进程一份独立的挂载视图;使用 clone 或 unshare 创建时,初始挂载列表通常是原视图的副本。之后的挂载修改默认只在自己的命名空间可见,但 shared subtree 会改变这个默认行为。
PID namespace 解决进程编号和进程树隔离,network namespace 解决网卡、路由和端口空间隔离。把它们同时打开,只能说明进程运行环境更完整,不能说明挂载已经变成 private。

创建隔离挂载并关闭事件传播
在测试机或具备必要能力的受控进程中,可以从一个干净 shell 开始:
# 创建新的挂载、PID、网络命名空间,并在新环境中启动 shell
sudo unshare --mount --pid --net --fork --mount-proc sh
# 递归切断当前挂载树的传播关系,避免 mount/umount 回到宿主
mount --make-rprivate /
# 只在命名空间内准备实验目录和临时文件系统
mkdir -p /run/ns-lab
mount -t tmpfs -o size=64M ns-lab /run/ns-lab
findmnt /run/ns-lab
--mount-proc 只是为新 PID namespace 准备匹配的 proc 视图;它不是 mount 隔离的替代品。--make-rprivate / 的 r 表示递归处理,适合避免某个父挂载仍是 shared、导致子挂载事件外溢。

用 mountinfo 判断边界是否真的生效
不要只看 mount 的简略输出,检查当前进程的 mountinfo 更直接:
# 查看挂载点及传播标签;shared/master 出现在可选字段中
awk '{print $5, $6, $7, $8}' /proc/self/mountinfo | sed -n '1,12p'
# 只检查是否仍存在共享或主从传播标记
grep -E ' shared:[0-9]+| master:[0-9]+' /proc/self/mountinfo || true
没有匹配结果通常说明当前视图里没有 shared 或 master 标记;若仍看到它们,先找出对应的父挂载点,再对明确范围执行 mount --make-rprivate。不要把“命令成功”当成“宿主安全”,挂载点层级和传播属性才是证据。
常见问题
mount namespace 会复制数据吗?
不会。它主要复制挂载视图和关系,底层文件系统、块设备和目录数据仍可能是同一份,写入风险仍需单独控制。
为什么只用 --mount 仍可能看到宿主变化?
因为新视图可能保留 shared subtree 的传播关系。创建后显式执行递归 private,并检查 mountinfo。
slave 和 private 该怎么选?
完全不希望挂载事件进出时选 private;需要接收上游挂载、但不把自己的事件传回去时才考虑 slave。
小结:隔离挂载的落点是传播属性,不是 namespace 参数数量。把操作限定在专用目录,配合 mount --make-rprivate 和 mountinfo 复查,才能把“看起来隔离”变成可检查的边界。
Python sqlite3 多线程共享连接时报错怎么改
- 上一篇
- Python sqlite3 多线程共享连接时报错怎么改
- 下一篇
- Go WalkDir 遇到权限错误时怎么记录并继续扫描
-
- 文章 · linux | 57分钟前 |
- Linux systemd 怎样查看服务真实失败原因
- 117浏览 收藏
-
- 文章 · linux | 3小时前 |
- Linux ulimit 怎样判断文件句柄上限
- 125浏览 收藏
-
- 文章 · linux | 3小时前 |
- Linux ss 怎样查看连接的 TCP 状态变化
- 335浏览 收藏
-
- 文章 · linux | 3小时前 | 内存 · linux运维 · 性能排查 · Linux 内存诊断 /proc/meminfo MemAvailable Cached
- Linux /proc/meminfo 怎样区分缓存和可用内存
- 157浏览 收藏
-
- 文章 · linux | 3小时前 |
- Linux namespace 怎样查看进程所在网络空间
- 240浏览 收藏
-
- 文章 · linux | 4小时前 |
- Linux io_uring 怎样理解提交队列和完成队列
- 387浏览 收藏
-
- 文章 · linux | 4小时前 |
- Linux journalctl 怎样按时间和服务过滤日志
- 179浏览 收藏
-
- 文章 · linux | 4小时前 |
- Linux systemd ExecStartPre 怎样在启动前检查配置文件
- 284浏览 收藏
-
- 文章 · linux | 5小时前 |
- Linux cgroup v2 怎样读取进程 CPU 使用量
- 250浏览 收藏
-
- 文章 · linux | 5小时前 |
- Linux cgroup v2 memory.swap.max 怎样限制交换空间
- 336浏览 收藏
-
- 文章 · linux | 1天前 |
- systemd-analyze calendar 校验 OnCalendar 表达式的实用方法
- 384浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 621次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 660次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 691次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 654次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 486次使用
-
- Go xmlattr 如何限定命名空间
- 2026-09-13 231浏览
-
- Linux mount namespace 挂载事件为什么串到宿主机:shared、slave、private 的验证与隔离
- 2026-08-16 252浏览
-
- Linux 服务为什么会被 OOM 杀掉:MemoryMax、日志证据与恢复边界
- 2026-08-26 462浏览
-
- Linux pidstat 怎么区分 CPU 忙和 I/O 等待:进程时间、上下文切换与复测方法
- 2026-08-26 252浏览
-
- Linux nsenter 如何进入目标进程命名空间:PID、mount 与最小核对流程
- 2026-08-28 151浏览

