首页 智能穿戴

OpenWrt Overlay 文件系统:深度解析与实战避坑

分类:智能穿戴
字数: (6444)
阅读: (1010)
内容摘要:OpenWrt Overlay 文件系统:深度解析与实战避坑,

相信不少折腾 OpenWrt 的朋友都遇到过这样的情况:修改了 /etc/config/network 文件,重启后配置生效了。但你有没有想过,OpenWrt 的根文件系统是只读的,那么这些修改又是如何保存下来的呢?答案就是 Overlay 文件系统,它是 OpenWrt 实现可写分区的关键技术。本文将深入剖析 Overlay 文件系统的原理,并通过实际操作和配置案例,带你全面了解它。

什么是 Overlay 文件系统?

Overlay 文件系统,顾名思义,是一种“覆盖”式的文件系统。它将两个(或多个)文件系统合并成一个单一的文件系统。其中,底层的称为 “lower filesystem”,通常是只读的,上层的称为 “upper filesystem”,是可读写的。当用户访问文件时,OverlayFS 会按照一定的规则,决定读取哪个文件系统中的文件。

在 OpenWrt 中,通常将 squashfs 镜像作为 lower filesystem,而 jffs2 分区作为 upper filesystem。squashfs 镜像包含 OpenWrt 的基本系统文件,而 jffs2 分区则用于存储用户的配置数据和安装的软件包。

Overlay 文件系统的工作原理

OverlayFS 的工作原理可以简单概括为:

OpenWrt Overlay 文件系统:深度解析与实战避坑
  1. 文件查找: 当用户访问一个文件时,OverlayFS 首先在 upper filesystem 中查找,如果找到,则直接返回该文件。如果没有找到,则在 lower filesystem 中查找,如果找到,则返回该文件。如果两个文件系统都没有找到,则返回 “文件不存在” 错误。

  2. 文件修改: 当用户修改一个文件时,OverlayFS 会将该文件从 lower filesystem 复制到 upper filesystem 中,并在 upper filesystem 中进行修改。这个过程称为 “copy-on-write”(COW)。此后,所有对该文件的访问都将从 upper filesystem 中进行。

  3. 文件删除: 当用户删除一个文件时,OverlayFS 会在 upper filesystem 中创建一个 “whiteout” 文件,用于标记该文件已被删除。当用户访问该文件时,OverlayFS 会检查 upper filesystem 中是否存在 whiteout 文件,如果存在,则返回 “文件不存在” 错误。

    OpenWrt Overlay 文件系统:深度解析与实战避坑

OpenWrt 中的 Overlay 文件系统配置

OpenWrt 中,Overlay 文件系统的配置主要通过 /etc/config/fstab 文件进行管理。以下是一个典型的 /etc/config/fstab 文件的示例:

config mount
	option target   '/'
	option device   '/dev/mtdblock6'
	option fstype   'squashfs'
	option options  'ro,noatime'
	option enabled  '1'

config mount
	option target   '/overlay'
	option device   '/dev/mtdblock7'
	option fstype   'jffs2'
	option options  'noatime,nodiratime'
	option enabled  '1'

config mount
	option target   '/'
	option device   '/overlay/upper'
	option fstype   'overlayfs'
	option options  'rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work'
	option enabled  '1'
	option enabled_fsck '0'

这个配置定义了三个挂载点:

  • /: 根文件系统,挂载 squashfs 镜像(/dev/mtdblock6),只读。
  • /overlay: overlay 分区,挂载 jffs2 分区(/dev/mtdblock7),用于存储可写数据。
  • /: 使用 overlayfs 将 squashfs 和 jffs2 合并成一个可写的根文件系统。

其中 lowerdir 指定了 lower filesystem 的路径,upperdir 指定了 upper filesystem 的路径,workdir 指定了 overlayfs 的工作目录。workdir 用于存储 overlayfs 在进行 copy-on-write 操作时产生的临时文件。

OpenWrt Overlay 文件系统:深度解析与实战避坑

实战避坑经验

  1. jffs2 空间不足: 如果 jffs2 分区空间不足,会导致 OpenWrt 无法正常启动。解决方法是扩大 jffs2 分区的大小。可以使用 ubiformatubimkvol 命令重新分区。

    ubiformat /dev/mtd6 -y -f /tmp/openwrt-ramips-mt7621-xiaomi_mi-router-4a-3g-v2-squashfs-sysupgrade.bin  # 擦除分区
    

ubimkvol /dev/mtd6 -n data -s 100MiB # 创建新的 data 分区 ```

  1. 配置错误导致无法启动: 修改 /etc/config/fstab 文件时,如果配置错误,可能会导致 OpenWrt 无法正常启动。解决方法是进入 failsafe 模式,然后修改配置文件。

    OpenWrt Overlay 文件系统:深度解析与实战避坑
  2. Overlay 文件系统损坏: 如果 overlay 文件系统损坏,可能会导致数据丢失。建议定期备份 overlay 分区的数据。

Overlay 文件系统在其他场景的应用

除了 OpenWrt,OverlayFS 也被广泛应用于其他场景,例如:

  • Docker: Docker 使用 OverlayFS 来实现镜像的分层存储,可以有效地节省存储空间。
  • Live CD: Live CD 可以使用 OverlayFS 将只读的 CD-ROM 文件系统和可写的内存文件系统合并成一个可用的操作系统。

总而言之,OpenWrt 的 Overlay 文件系统是其灵活性的关键,理解其原理对于优化 OpenWrt 性能和解决问题至关重要。希望本文能够帮助你更深入地了解 Overlay 文件系统。

OpenWrt Overlay 文件系统:深度解析与实战避坑

转载请注明出处: 加班到秃头

本文的链接地址: http://m.acea1.store/blog/215677.SHTML

本文最后 发布于2026-04-06 14:21:18,已经过了21天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 小明同学 4 天前
    受益匪浅,感谢分享!对于我这种小白来说,这篇教程简直是及时雨!
  • 老实人 1 天前
    这个copy-on-write机制确实很巧妙,避免了频繁读写只读分区。