当前位置: 首页 > news >正文

OpenWrt 的 Overlay 文件系统到底是怎么回事?

虽然你折腾过openwrt,但是不一定搞清楚了'/overlay'是什么东西。


 一、从“只读系统”说起

很多人第一次刷完 OpenWrt,登录终端一看:

df -h

发现系统根目录 / 才几十兆空间,然后 /overlay 却显示 100 多兆。
安装个包、改个配置、重启后还能保存。
于是问题来了:
“这些数据到底存哪儿去了?”

答案就是:Overlay 文件系统(OverlayFS)

它是一种“分层文件系统”,专门为这种嵌入式设备设计的。


二、为什么 OpenWrt 要搞一个 Overlay?

要理解 Overlay,得先知道早期路由器的“尴尬处境”:

  • 存储空间很小,只有几兆 flash;

  • 固件是打包好的镜像(比如 SquashFS),是只读的;

  • 系统启动后不能改里面的文件。

那怎么办?
总不能每次改配置都得重新编译固件吧?

于是,聪明的 OpenWrt 开发者搞了个“分层文件系统”的主意:

  • 固件那一层保持只读(/rom);

  • 用户写入的内容(配置、软件包)放到另一层(/overlay);

  • 启动时两层叠加在一起,看起来像一个完整的可写系统。

一句话总结:
Overlay 就是给只读系统“贴了一层可写的皮”。


🔧 三、Overlay 的基本原理

Linux 内核早就支持这种“叠加式文件系统”,叫 OverlayFS
它的核心机制很简单:

  • lowerdir:底层,只读(比如 /rom

  • upperdir:上层,可写(比如 /overlay/upper

  • workdir:工作区,用来记录文件状态

然后系统会把两层合并起来挂载到 / 根目录,比如这样:

overlay / overlay rw,noatime,lowerdir=/rom,upperdir=/overlay/upper,workdir=/overlay/work

这样,系统看起来就像一个完整的可写根目录。

当你修改文件时,内核做的其实是:

  1. 从只读层复制出一个副本;

  2. 放进上层(upperdir);

  3. 之后所有修改都作用在上层;

  4. 删除文件时,会生成一个隐藏的“白名单”文件(whiteout),告诉系统:底层的文件被覆盖掉了。

所以,系统表现是“可写”的,但底层固件其实从没动过。


📦 四、Overlay 在 OpenWrt 里都干了啥

Overlay 在 OpenWrt 里主要负责三件事:

1. 保存配置

所有 /etc/config/* 的改动都写进 overlay 的可写层。
这就是为啥你重启后配置不会丢。

2. 安装软件

opkg install 安装的软件包都被写到 overlay 层。
你刷的固件其实不会被改动。

3. 恢复出厂设置

当你执行:

firstboot
# 或者
jffs2reset && reboot

系统会把 overlay 整个清空,再次变成原始固件。

也就是说,“出厂设置”其实就是把 overlay 删除。


五、Overlay 文件系统的演变

老版本的 OpenWrt(比如 10 年前的 Backfire)用的是 mini_foaufs 这类第三方模块。
后来 Linux 内核官方把 OverlayFS 合并进主线(从 3.18 开始),
OpenWrt 也顺势切到了现在这种轻量级的内核原生实现。

优点是:

  • 性能更好

  • 稳定性高

  • 不需要额外内核模块

  • 更容易维护

可以说,现在的 OverlayFS 是整个 OpenWrt 文件系统架构中最核心的一环。


 六、Overlay 的典型目录结构

看看这几个目录:

目录含义
/rom固件内容,只读
/overlay/upper你的修改、安装的软件
/overlay/work系统工作区
/overlay只是个挂载点
/合并后的整体视图

可视化一下更直观:

/ (用户看到的)
├── /etc/config/network     → 实际是 /overlay/upper/etc/config/network
├── /bin/busybox            → 实际是 /rom/bin/busybox
└── /usr/lib/opkg/info      → 实际是 /overlay/upper/usr/lib/opkg/info

 七、Overlay 的空间与扩容

默认情况下,OpenWrt 把 overlay 放在闪存的一个分区(比如 /dev/mtdblockXX/dev/mmcblk0p9),
空间通常很小,几十兆或者几百兆。

要是你刷的是 eMMC 或 SD 卡的固件,那就更容易扩容。

1️⃣ 查看当前挂载情况

mount | grep overlay

2️⃣ 看看空间

df -h

如果 overlay 只有 100M,但你还有几十 G 的空闲空间,那说明你可以扩容。

3️⃣ 常见扩容思路

  • 把 overlay 移到更大的分区(比如 /dev/mmcblk0p10);

  • 或者用 extroot 功能,把 USB、SD 卡直接当新的 rootfs 用。

配置方法(/etc/config/fstab):

config mountoption target '/overlay'option device '/dev/sda1'option fstype 'ext4'option enabled '1'

重启后系统就会用新的 overlay。


🧩 八、Overlay 出问题的常见情况

问题可能原因解决办法
/overlay 是空的overlay 挂载失败检查 /proc/mounts 是否存在 overlay 条目
配置重启后丢失系统没挂上 overlay,用了临时 RAM确认 /overlay/upper 是否在可写分区
安装软件提示空间不足overlay 分区太小扩容 overlay 或使用 extroot
恢复出厂设置没反应overlay 层损坏手动删除 /overlay/upper 后重启

九、原理稍微深入一点

OverlayFS 的核心是 VFS 层的“分层合并”机制。
对内核来说,这是一棵树套另一棵树:

读取文件:优先找 upperdirupperdir 没有,就去 lowerdirlowerdir 没有,就报错写文件:如果只在 lowerdir,复制一份到 upperdir修改 upperdir 的文件删除文件:在 upperdir 创建一个 .wh 文件(whiteout)

非常轻量,不需要守护进程,也不用缓存同步。
嵌入式环境里简直是神器。

http://www.dtcms.com/a/446316.html

相关文章:

  • 优选算法-双指针:2.复写零解析
  • Leetcode 3703. Remove K-Balanced Substrings
  • 创意网站设计团队常州金坛网站建设
  • 浅聊一下网页显示过程
  • h 函数的运用场景=== 函数式封装组件 (弹窗调用)
  • 数据结构——排序算法全解析(入门到精通)
  • 建设装饰网站创客贴做网站吗
  • 爆炸特效-Unity-04-shader粒子系统
  • 公司做网站一般用什么域名网店设计师是干什么的
  • 【Redis】RedLock算法讲解
  • 网站专题页功能河北省住宅和城乡建设厅网站
  • stp root secondary 概念及题目
  • 马尔可夫链蒙特卡洛(MCMC):高维迷宫里的 “智能导航仪”—— 从商场找店到 AI 参数模拟
  • 无穿戴动捕大空间交互:如何靠摄像头实现全感官沉浸体验?
  • 求个没封的w站2022高端网站建设的要求
  • 网站经常修改好不好拼多多网店注册
  • 题解:洛谷P14127 [SCCPC 2021] K-skip Permutation
  • FreeBSD14.1 安装中文输入法fcitx
  • C++STL反向迭代器设计
  • 一文学会《C++》进阶系列之C++11
  • 腊肉网站的建设前景网页版微信可以发朋友圈吗
  • 大连凯杰建设有限公司网站wordpress 文章链接失效
  • 百度网站优化升上去国外网站入口
  • BIT*算法
  • Python常用三方模块——psutil
  • 网站开发的优势建设京东物流网站的目标是什么
  • 制作网站详细步骤爱客crm系统登录
  • Linux事件循环——高效处理多任务(高并发)
  • 【Linux】POSIX信号量、环形队列、基于环形队列实现生产者消费者模型
  • SELinux系列专题(一):SELinux是什么?