嵌入式系统中常用的文件系统
嵌入式系统中常用文件系统包括cramfs、jffs2、NFS、initrd、ext4、squashfs、ubifs等。它们的特点如下:
1、cramfs 和 jffs2 具有好的空间特性,很适合嵌入式产品应用。
2、cramfs 与 squashfs 为只读文件系统,目前只有 SPI Nor FLASH 支持这两种文件系统 。
3、squashfs 压缩率最高。
4、jffs2 为可读写文件系统。
5、NFS 文件系统适用于开发初期的调试阶段。
6、initrd 采用 cramfs 文件系统,为只读。
7、ext4 文件系统用于 eMMC 卡。
一、cramfs
cramfs 是针对 Linux 内核 2.4 之后的版本所设计的一种新型文件系统,使用简单,加载容易,速度快。
cramfs 的优点如下:
1、将文件数据以压缩形式存储,在需要运行时进行解压缩,能节省 Flash 存储空间。
cramfs 的缺点如下:
1、由于它存储的文件是压缩的格式,所以文件系统不能直接在 Flash 上运行。
2、文件系统运行时需要解压数据并拷贝到内存中,在一定程度上降低读取效率。
3、cramfs 文件系统是只读的。
二、jffs2
jffs2 是 RedHat 的 David Woodhouse 在 jffs 基础上改进的文件系统,是用于微型嵌入式设备的原始闪存芯片的实际文件系统。 jffs2 文件系统是日志结构化的可读写的文件系统。
jffs2 的优点如下:
1、使用了压缩的文件格式。最重要的特性是可读写操作。
jffs2 的缺点如下:
1、jffs2 文件系统挂载时需要扫描整个 jffs2 文件系统,因此当 jffs2 文件系统分区增大时,挂载时间也会相应的变长。
2、使用 jffs2 格式可能带来少量的 Flash 空间的浪费。 这主要是由于日志文件的过度开销和用于回收系统的无用存储单元,浪费的空间大小大致是若干个数据段。
3、jffs2 的另一缺点是当文件系统已满或接近满时,jffs2 运行速度会迅速降低。这是因为垃圾收集的问题。
加载 jffs2 文件系统时的步骤如下:
步骤1、扫描整个芯片,对日志节点进行校验,并且将日志节点全部装入内存缓存。
步骤2、对所有日志节点进行整理,抽取有效的节点并整理出文件目录信息。
步骤3、找出文件系统中无效节点并且将它们删除。
步骤4、最后整理内存中的信息,将加载到缓存中的无效节点释放。
总结:由此可以看出虽然这样能有效地提高系统的可靠性,但是在一定程度上降低了系统的速度。尤其对于较大的闪存芯片,加载过程会更慢。
三、ubifs
ubifs 是 unsorted block images file system 的简称,用于 raw flash 设备。 ubifs 通过ubi 子系统处理与 mtd 设备之间动作。 ubifs 只能工作于 ubi volume 之上。 ubifs 涉及到的系统层次由下到上依次是:
mtd 子系统: 提供对 flash 的访问接口;
ubi 子系统: 为 flash device 提供了 wear-leveling 和 volume management 功能,ubi 子系统工作在 mtd 设备之上,提供了 ubi volume; ubi 子系统是 mtd 设备的高层次表示,对上层屏蔽了一些直接使用 mtd 设备需要处理的问题,比如 wearing-leveling 以及坏块管理; ubifs 本身则工作在 ubi 子系统之上。
ubifs 具有如下优点:
1、ubifs 对 flash 尺寸有着很好的扩展性。
2、回写(write-back): 同 jffs2 的 write-through(立即写入)相比可以显著的提高文件系统的读写性能。
3、异常 unmount 适应度: ubifs 是一个日志文件系统可以容忍突然掉电以及unclean 重启。
4、on-the_flight compression 存储在 flash 介质上的数据是压缩的, 同时也可以灵活的针对单个文件来打开关闭压缩。
5、ubifs 可以从 index 破坏后恢复: ubifs 中的每一片信息都用一个 header 来描述,因此可以通过扫描整个 flash 介质来重构文件系统。
6、完整性: ubifs 通过把 checksum 写到 flash 介质上来保证数据的完整性,文件数据或 meta-data 不会损坏;缺省的情况, ubifs 仅仅检查 meta-data 的 CRC 校验。
ubifs 具有如下缺点:
1、ubifs 文件系统所有数据结构都是使用 tree, ubifs 对 flash 尺寸大小在算法上是可扩展的。 但是 ubi 子系统复杂度随着 flash size 线性增长,因此 ubi 子系统加 ubifs 整体上是线性增大的。
四、Initrd
initrd 相当于存储介质,它支持的文件系统格式有 ext2、 cramfs 等,因此内核除了支持 initrd 之外,还要支持 cramfs 文件系统。
五、squashfs
squashfs 文件系统是一套基于 Linux 内核使用的压缩只读文件系统,压缩率高。与 cramfs 相比,能提供更大的压缩比,支持更大的镜像和文件。
squashfs 具有如下特点:
1、数据(data)、 节点(inode)和目录(directories)都被压缩。
2、保存了全部的 32 位 UID/GIDS 和文件的创建时间。
3、最大支持 4G 文件系统。
4、检测并删除重复文件。
六、ext4
ext4 文件系统是一个高效的、优秀的、可靠的和极具特点的文件系统,相对于 ext3 的改进是更深层次的,是文件系统数据结构方面的优化。