写在前面

UBI (Unsorted Block Images)文件系统是一种用于裸 flash 的文件系统管理层。它是专为管理原始闪存设备而设计,特别适用于嵌入式系统。与 YAFFS2 和 JFFS2 不同的是,它可以提供整个 flash 空间的磨损平衡,并且有良好的扩展性,适用于大容量的 nand flash 。UBIFS文件系统:是基于UBI系统的文件系统,实现文件系统的所有基本功能。

从MTD到UBI和UBIFS

从图中可以看出JFFS2 和 YAFFS2 都是运行在 MTD 之上,UBIFS是运行在UBI之上的,而UBI要运行在MTD之上。所以到这里就涉及了三个子系统UBIFS,UBI,MTB,接下来让我们分别来介绍这三个子系统。

  • 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 上使用效率都不高。

优缺点

(1)优点

(a)耐用性和可靠性

磨损均衡:UBI能够有效地管理闪存的擦除次数,确保所有的擦除块均匀地使用,从而延长闪存的寿命。

坏块管理:UBI能够检测并处理坏块,确保数据不被写入这些损坏的区域,提高文件系统的可靠性。

崩溃恢复:UBI在系统崩溃或掉电后具有良好的恢复能力,能够尽量减少数据损失。

(b)动态大小管理

动态分区调整:UBI允许动态调整分区的大小,这对于存储需求变化较大的应用非常有用。

灵活的空间管理:UBI可以灵活地管理闪存空间,支持动态的文件系统分配和调整。

(c)支持大容量闪存:UBI支持大容量的闪存设备,适合用于需要大量存储空间的嵌入式系统中。

(2)缺点

(a)复杂性增加

设计复杂:UBI的实现较为复杂,需要在内核中增加额外的层次来管理闪存,这增加了系统设计和维护的复杂性。

调试困难:由于其复杂的机制,UBI的问题排查和调试比传统文件系统更加困难。

(b)资源消耗

内存占用:UBI需要额外的内存来维护其数据结构,对于内存资源有限的嵌入式系统可能会带来一定的压力。

CPU消耗:UBI的运行需要额外的CPU资源来执行磨损均衡和垃圾回收等任务,可能会影响系统的整体性能。

(c)不适合所有应用

专用性强:UBI主要针对原始闪存设备进行优化,对于使用其他存储介质(如eMMC、SD卡等)的系统,其优势可能不明显。

特定领域应用:UBI的设计主要面向嵌入式系统,对于桌面或服务器系统,其他文件系统(如EXT4、XFS等)可能更为适合。

结尾

总的来说,UBI文件系统在需要高可靠性、高耐用性和灵活空间管理的嵌入式系统中表现出色,但其复杂性和资源消耗也需要在具体应用中进行权衡。

一个懒人