如何深入理解 UBI 文件系统的原理与应用?

摘要:liwen01 2024.07.21 前言 UBI (Unsorted Block Images)文件系统是一种用于裸 flash 的文件系统管理层。它是专为管理原始闪存设备而设计,特别适用于嵌入式系统。与 YAFFS2 和&amp
liwen01 2024.07.21 前言 UBI (Unsorted Block Images)文件系统是一种用于裸 flash 的文件系统管理层。它是专为管理原始闪存设备而设计,特别适用于嵌入式系统。与 YAFFS2 和JFFS2不同的是,它可以提供整个 flash 空间的磨损平衡,并且有良好的扩展性,适用于大容量的nand flash。 (一)MTD、UBI 与 UBIFS 前面介绍的 JFFS2 和 YAFFS2 都是运行在 MTD 之上,而 UBIFS 只能运行在 UBI 之上,UBI 又只能运行于 MTD 之上,所以这里就涉及到 3 个子系统:MTD、UBI、UBIFS。 MTD提供了对底层闪存硬件的抽象和基本管理。 UBI在 MTD 之上增加了一层管理,处理闪存的复杂性并提供逻辑卷管理。 UBIFS是在 UBI 卷上运行的文件系统,充分利用 UBI 的特性,提供高效可靠的文件存储。 这里需要特别注意,这里所说的闪存,是指裸 flash,而不是经过FTL转换后的 U 盘、SD、TF、SSD 等设备。 在 Linux 中,经过 FTL 转换后的 U 盘、SD、TF、SSD 等设备,它们属于块设备,是模拟传统磁盘设计的一种数据结构,以扇区 sector 为读写单位。 而 MTD,它既不是字符设备,也不是块设备,它只是 MTD 设备 (1) MTD (Memory Technology Device) MTD 是Linux 内核中的一个子系统,用于支持不同类型的闪存设备,如NOR Flash和 NAND Flash。MTD 提供了一个抽象层,使得文件系统和用户空间程序可以方便地访问底层的闪存硬件。 MTD 设备:在 Linux 系统中,MTD 设备通常以 /dev/mtdX 和 /dev/mtdblockX 的形式出现,其中 X 是设备编号。 MTD 子设备:一个 MTD 设备可以被划分为多个子设备,每个子设备可以独立使用。 (2)UBI (Unsorted Block Images) UBI 是一个在 MTD 设备之上的管理层,专门为 NAND Flash 设计。UBI 处理了 NAND Flash 固有的一些复杂性,如坏块管理和磨损均衡(wear leveling)。UBI将闪存划分为逻辑擦除块,并对它们进行管理。 坏块管理:UBI 能够检测和管理坏块,确保数据写入时不会使用坏块。 磨损均衡:UBI 通过均匀分布擦写操作,延长闪存的使用寿命。 逻辑卷:UBI 支持在 MTD 设备上创建多个逻辑卷,每个卷可以独立使用。 (3)UBIFS (UBI File System) UBIFS 是专门为 UBI 设计的文件系统,直接在 UBI 卷上运行。UBIFS 充分利用 UBI 的功能,提供了高效和可靠的文件存储解决方案。 动态特性:UBIFS 支持动态调整文件系统大小,根据需要分配和回收空间。 日志结构:UBIFS 使用日志结构文件系统,减少数据损坏的风险并提高写入性能。 压缩:UBIFS 支持多种压缩算法,节省存储空间。 UBIFS 并不是唯一可以在UBI上运行的文件系统,理论上绝大部分文件系统都可以在 UBI 上运行。除了 UBIFS,其它文件系统在 UBI 上使用效率都不高。
阅读全文