常见文件系统
文件系统实现
- 硬件层:NOR/NAND Flash、RAM等物理介质
- 驱动层:MTD设备驱动(字符设备/块设备)
- 内核层:具体文件系统实现(JFFS2/YAFFS等)和虚拟文件系统
- 用户层:统一的目录树接口
Flash文件系统
jffs/jffs2文件系统
核心特性:
- 日志结构: 采用日志闪存文件系统v2(Journalling Flash FileSystem v2)架构
- 硬件适配: 主要针对NOR型闪存,基于MTD驱动层
- 数据安全: 提供崩溃/掉电保护机制和写平衡支持
- 压缩功能: 支持实时数据压缩,基于哈希表管理
性能缺陷:
- 空间敏感: 当存储空间接近满载时,垃圾回收机制会导致性能显著下降
- 碎片问题: 文件系统碎片化会严重影响运行效率
yaffs/yaffs2文件系统
专为NAND型闪存设计的日志型文件系统
性能优化:
- 精简设计: 相比JFFS2舍弃数据压缩功能,换取更快速度
- 挂载优势: 启动挂载时间短,内存占用小
- 驱动集成: 自带NAND芯片驱动,无需依赖Linux MTD/VFS
版本差异:
- yaffs: 仅支持512Bytes小页NAND闪存
- yaffs2: 支持2KB大页NAND闪存,内存管理/垃圾回收/读写速度全面优化
接口特性:
- 提供直接访问API,支持与MTD驱动配合使用
cramfs文件系统
基于MTD驱动程序的只读压缩文件系统
压缩技术:
- 分页压缩: 每4KB页面独立压缩,支持随机访问
- 高压缩比: 达到2:1比例,显著节省Flash空间
运行机制:
- 执行限制: 不支持XIP(芯片内执行),需拷贝到RAM运行
- 实时解压: 运行时动态解压缩数据
可靠性特点:
- 只读保护: 防止文件系统被意外修改破坏
- 空间限制: 最大支持16MB文件系统
主要缺陷:
- 无法进行内容扩充和修改
squashfs文件系统
压缩技术:
- 支持整体文件系统或单个目录压缩存储
- 可挂载设备文件或作为loopback设备使用
技术特点:
- 全面压缩: 数据/节点/目录均被压缩
- 元数据完整: 保留32位UID/GID和文件创建时间
- 大容量支持: 最大支持4GB文件系统
压缩优化:
- 块大小灵活: 支持32KB(1.x)/64KB(2.x)块
- 碎片管理: 引入fragment blocks概念提升小文件压缩率
对比优势:
- 相比cramfs的8位UID和16MB限制有明显改进
ubifs文件系统
作为JFFS2的下一代替代方案
系统架构:
- UBI中间层: 处理与MTD设备的交互
- 专用设计: 针对大容量FLASH移动设备优化
核心优势:
- 快速挂载: 显著提升启动速度
- 高级特性: 支持write-back、on-the-fly压缩
- 健壮性: 增强异常unmount恢复能力
- 性能表现: 提供快速I/O和高完整性保障
兼容性说明:
- 必须通过MTD接口访问,与常规块设备不兼容
内存文件系统
ramdisk文件系统
本质:将固定大小的内存空间模拟为磁盘分区使用,是文件系统装入内存的机制而非独立文件系统
核心功能:可作为根文件系统,存放只读的启动文件(如内核映像和根文件系统)
性能优势:将频繁访问的静态文件(如只读根文件系统)放入内存可显著提升系统性能
实现机制:Linux启动阶段通过initrd实现内核映像和根文件系统的同步载入内存
ramfs/tmpfs文件系统
存储原理:所有文件直接存放在RAM中,读写操作均在内存完成
典型应用:
- 存储临时文件(如/tmp目录内容)
- 存放频繁修改的数据(如/var目录内容)
核心优势:
- 避免Flash存储器读写损耗
- 提供比传统存储更快的读写速度
与传统Ramdisk区别:
- 不支持格式化操作
- 空间动态变化(随文件内容自动调整大小)
主要缺陷:系统重启后所有数据丢失
设计特点:基于VFS层实现,可创建多个实例并指定最大内存用量
网络文件系统
NFS(Network File System)
- 用于解决跨平台文件共享需求
- 核心功能:实现不同机器、操作系统间的网络化文件共享
- 开发应用:在嵌入式Linux开发中,可通过NFS将主机根文件系统挂载到目标设备
- 调试优势:支持实时修改根文件系统内容,极大提高开发调试效率
虚拟文件系统
proc文件系统
嵌入式安全研究中常需手动挂载/proc目录,确保应用正常启动,特别是当系统缺失默认挂载时
挂载方式:
- 手动挂载命令:mount -t proc none /proc
- 自动挂载配置:在/etc/fstab中添加none /proc proc defaults 0 0
tmpfs文件系统
临时性文件系统,默认挂载点为/dev/shm
默认大小为物理内存的一半,可挂载到任意目录
同时使用物理内存和swap交换空间
与ramdisk区别:
- 传统ramdisk需要格式化为块设备才能使用
- tmpfs是独立文件系统,挂载后立即可用
文件系统识别
Binwalk
- 通过magic配置文件识别多种文件系统特征
- 支持Minix、Linux、QNX等系统的端序判断(大端/小端)
- 包含cramfs、squashfs、ext2/3/4、romfs等嵌入式常用文件系统