常见文件系统

文件系统实现

  • 硬件层: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等嵌入式常用文件系统

一个仍在爬山的人