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 | 1小时前 | 容器 · Linux · 命名空间 · mount namespace PID namespace namespaces linux namespace network namespace
- Linux namespace 隔离后为什么进程仍能看到部分宿主信息
- 363浏览 收藏
-
- 文章 · linux | 2小时前 | Linux · 资源限制 · cgroups · Linux memory.max cgroups v2 cpu.max cpu.weight
- Linux cgroups v2 CPU 配额和权重怎么区分
- 380浏览 收藏
-
- 文章 · linux | 4小时前 | Linux · systemd · Linux systemd EnvironmentFile daemon-reload
- Linux 修改 systemd unit 后为什么 daemon-reload 仍不够
- 171浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 19次使用
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 176次使用
-
- C-Eval
- 深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
- 111次使用
-
- AI Prompt Library
- 探索AI Prompt Library免费资源库,涵盖营销、写作及多场景AI提示词。兼容ChatGPT、Claude等工具,一键复制优化输出,提升工作效率。
- 38次使用
-
- Generrated
- Generrated汇集9300+张DALL·E生成图像及对应提示词,支持查看完整图集、对比DALL·E 2与3版本差异,是AI绘图新手学习Prompt设计与获取创作灵感的实用工具。
- 18次使用
-
- 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浏览
-
- Linux 文件名含空格时怎么配合使用 find 和 xargs
- 2026-09-05 422浏览

