JFFS2、SquashFS 都是嵌入式 Linux 里专门给 Flash 用的压缩文件系统,最核心差别是 SquashFS 只读、压缩率高、启动挂载快,一般用来放系统固件;JFFS2 支持读写、自带日志、磨损均衡,用来存配置、用户数据,路由器、工控板经常把两者搭配 OverlayFS 一起用,SquashFS 放只读根文件系统,JFFS2 做可读写层,这也是 OpenWrt 这类设备最经典的组合方案。SquashFS 在 PC 上先打包生成镜像,烧录到 Flash 之后运行时不能直接修改里面文件,好处是占用空间小、稳定不容易被断电损坏;JFFS2 是日志型 Flash 文件系统,直接跑在 MTD 分区上,支持随时增删改文件,断电也不容易丢数据,但它挂载的时候要全盘扫描 Flash,Flash 容量越大,开机挂载越慢、占用内存越高,大 NAND Flash 现在基本被 UBIFS 替代。
JFFS2 基础介绍
- 全称:Journaling Flash File System version 2,日志型 Flash 文件系统
- 读写属性:可读写、支持压缩
- 适配闪存:优先 NOR Flash,也支持小容量 NAND Flash
- 内置能力:自带日志、垃圾回收、磨损均衡,断电保护
- 优势:适合小容量分区、频繁改配置,掉电不容易损坏文件系统
- 短板:挂载需要扫描整个分区,容量大时挂载慢、RAM 开销高;垃圾回收会带来性能波动
SquashFS 基础介绍
- 全称:SquashFS,只读压缩文件系统
- 读写属性:纯只读,运行时无法修改内部文件
- 适配闪存:NOR、NAND、eMMC 都能用
- 内置能力:支持 zstd、xz、lz4、lzo 多种压缩算法,压缩率优秀
- 优势:挂载速度快、占用内存低、镜像体积小、天然防篡改,固件很稳定
- 短板:不能在线修改,要改内容必须在主机上重新打包整个镜像再烧录
JFFS2 与 SquashFS 对比表
| 对比项 | JFFS2 | SquashFS |
|---|---|---|
| 读写权限 | 可读可写 | 只读 |
| 压缩 | 支持压缩 | 支持压缩,压缩率更高 |
| 挂载速度 | 慢,全盘扫描 | 很快,不需要扫描 |
| 内存占用 | 高 | 低 |
| 掉电安全 | 日志机制,有保护 | 只读,不存在写入损坏 |
| 典型用途 | 用户配置、参数、日志、Overlay 可写层 | 根文件系统、固件、程序、静态资源 |
| 大容量 Flash 表现 | 差,不推荐大于 32MB 分区 | 不受这个限制,大容量也稳定 |
| 修改方式 | 系统运行时直接读写 | 电脑端重新打包镜像烧录 |
经典组合使用流程(OpenWrt 这类路由器)
- 在开发电脑上,先把系统程序、库文件打包成 SquashFS 镜像,烧录到 Flash 的只读分区。
- 设备启动,挂载 SquashFS 作为基础根文件系统。
- 另外划分一块 MTD 分区格式化为 JFFS2,作为 Overlay 可写层。
- 内核通过 OverlayFS 把两个文件系统合并,用户看到的是一个完整根目录。
- 用户修改配置、安装软件,改动不会写入 SquashFS,全部写到 JFFS2 分区里。
- 恢复出厂时,直接清空 JFFS2 分区,SquashFS 原始系统完好无损。
选型建议
- 放固件、程序、静态文件,不想运行时被修改:优先 SquashFS。
- 需要保存配置、日志、用户参数,运行时要读写:选 JFFS2(小 Flash)或者 UBIFS(大 NAND)。
- 完整嵌入式产品:SquashFS + JFFS2/UBIFS + OverlayFS 是最成熟方案。
- 大容量 NAND Flash,尽量不要用 JFFS2,挂载慢、内存开销大,换成 UBIFS。
小结
SquashFS 主打 “省空间、只读、稳定”,是放系统固件的;JFFS2 主打 “可读写、掉电安全”,用来存动态数据。两者不是竞争关系,嵌入式项目里经常搭配在一起,各司其职。
【常见问题】
问题 1:JFFS2 和 SquashFS 能不能单独替换使用?
回答 1:不能直接替换,JFFS2 支持读写,SquashFS 只读;如果把系统根文件系统只用 JFFS2,固件体积变大、开机变慢;只用 SquashFS 则没有地方保存配置,一般是组合使用。
问题 2:JFFS2 和 SquashFS 在 OpenWrt 里分别负责什么?
回答 2:OpenWrt 的系统程序、固件放在 SquashFS 只读分区,用户修改的配置、安装的软件包全部保存在 JFFS2 的 Overlay 可写分区。
问题 3:JFFS2 挂载慢是什么原因?
回答 3:JFFS2 开机挂载时需要扫描整个 Flash 分区里所有日志节点,重建文件系统结构,Flash 容量越大,扫描耗时越长,占用内存越高。
问题 4:SquashFS 运行中能不能修改里面的文件?
回答 4:SquashFS 是只读文件系统,设备正常运行时不能修改内部文件,想要修改只能在 PC 上重新打包 sqfs 镜像,再烧录到 Flash。
问题 5:JFFS2 和 SquashFS 都支持压缩,哪个压缩效果更好?
回答 5:SquashFS 压缩率更高,支持 xz、zstd 等高压缩算法,打包后的镜像体积更小,JFFS2 的压缩能力偏弱。
【参考资料】
[2026-10-28](嵌入式 Linux 文件系统:SquashFS 与 JFFS2 详解)Bootlin
[2026-09-12](OpenWrt 文件系统 Overlay、SquashFS、JFFS2 原理)CSDN
[2026-07-14](Flash 文件系统对比:JFFS2、SquashFS、UBIFS)강코의 코딩 일기
[2025-04-06](JFFS2、SquashFS、UBIFS 选型指南)DiskMFR
[2024-03-10](Linux 内核官方 SquashFS 文档)Linux Kernel Archives
【免责声明】
本文仅为嵌入式文件系统科普整理,不构成项目选型唯一标准;JFFS2、SquashFS 的内核支持、工具链、分区方案和硬件 Flash 类型强相关,正式产品开发请结合 Flash 容量、NOR/NAND 类型、内核版本实测验证。
