需要了解UBI文件系统的详细介绍

一、 ubi/ubifs产生背景
flash具有的“先擦除再写入”、坏块、“有限的读写次数”等特性,目前管理flash的方法主要有:
1、 采用mtd+ftl/nftl(flash 转换层/nand flash转换层)+ 传统文件系统,如:fat、ext2等。ftl/nftl的使用就是针对flash的特有属性,通过软件的方式来实现日志管理、坏块管理、损益均衡等技 术。但实践证明,由于知识产权、效率等各方面因素导致本方案有一定的局限性。
2、采用硬件翻译层+传统文件系统的方案。这种方法被很多存储卡产品采用,如:sd卡、u盘等。这种方案对于一些产品来说,成本较高。
3、采用mtd+ flash专用文件系统,如jffs1/2,yaffs1/2等。它们大大提高了flash的管理能力,并被广泛应用。
jffs2、yaffs2等专用文件系统也存在着一些技术瓶颈,如:内存消耗大,对flash容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益等。在此背景下内核加入了ubi文件系统的支持。
二、ubi/ubifs简单介绍
由于超大容量nandflash的普及,yaffs等皆无法再去控制nandflash的空间,于是在2006年由ibm与nokia的工程师thomasgleixner,artembityutskiy设计开发了ubi及其ubifs文件系统,专门为了解决mtd(memorytechnologydevice)设备所遇到的瓶颈。ubifs通过子系统ubi处理与mtddevice之间的动作。与jffs2一样,ubifs建构于mtddevice之上,因而与一般的blockdevice不兼容。
其中,ubi是一种类似于lvm的逻辑卷管理层。主要实现损益均衡,逻辑擦除块、卷管理,坏块管理等。而ubifs是一种基于ubi的flash日志文件系统。
一句话解读就是,ubifs及其使用的ubi子系统,是一种用在大容量flash上的文件系统。
三、ubi/ubifs的特点
1. 可扩展性
ubifs对flash尺寸有着很好的扩展性;也就是说mount时间、内存消耗以及i/o速度都不依赖于flash尺寸(对于内存消耗并不是完全准确的,但是依赖性非常的低);ubifs可以很好的适应gb以上大小的大容量flash; 当然ubi本身还有扩展性的问题,无论如何, ubi/ubifs都比jffs2的可扩展性好,此外如果ubi成为瓶颈,还可以通过升级ubi而不需改变ubifs。
2. 快速mount
不像jffs2,ubifs在mount阶段不需要扫描整个文件系统,ubifsmount介质的时间只是毫秒级,时间不依赖与flash的尺寸;然而ubi的初始化时间是依赖flash的尺寸的,因此必须把这个时间考虑在内。
3. write-back支持
ubifs的回写(延迟写)同jffs2的write-through(立即写入内存)相比可以显著地提高文件系统的吞吐量。
4. 异常unmount适应度
ubifs是一个日志文件系统,可以容忍突然掉电以及unclean重启;ubifs通过replay日志来恢复uncleanunmount,在这种情况下replay会消耗一些时间,因此mount时间会稍微增加,但是replay过程并不会扫描整个flash介质,所以ubifs的mount时间大概在几分之一秒。
5. 快速i/o
即使我们disablewrite-back(可以在unmount时使用-osyncmount选项),ubifs的性能仍然接近jffs2。记住,jffs2的同步i/o是非常惊人的,因为jffs2不需要在flash上维护indexingdata结构,所以就没有因此而带来的负担;而ubifs恰恰是有index数据的。ubifs之所以够快是因为ubifs提交日志的方式:不是把数据从一个地方移动到另外一个位置,而只是把数据的地址加到文件系统的index,然后选择不同的eraseblock作为新的日志块,此外还有multi-headed日志方式等技巧。
6. on-the_flightcompression
存储在flash介质上的数据是压缩的;同时也可以灵活的针对单个文件来打开关闭压缩;例如,可能需要针对某个特定的文件打开压缩,或者可能缺省方式下支持压缩,但是对多媒体文件则关闭压缩。
7. 可恢复性
ubifs可以从index破坏后恢复;ubifs中的每一片信息都有一个header来描述,因此可以通过扫描这个flash介质来重构文件系统,这点和jffs2非常类似;想像一下,如果你擦出了fat文件系统的fat表,那么对于fatfs是致命的错误,但是如果擦除ubifs的index,你人然可以重构文件系统,当然这需要一个特定的用户空间程序来做这个恢复。
8. 完整性
ubifs通过写checksum到flash介质上来保证数据的完整性,ubifs不会无视损坏文件数据或meta-data;缺省的情况,ubifs仅仅检查meta-data的crc,但是你可以通过mount选项,强制进行datacrc的检查。
三、ubi/ubifs的层次结构
ubi和ubifs在linux上的层次结构如下图所示。
从上图可以清楚看到:
ubifs是工作在ubi子系统之上的。
ubi没有flash转换成(ftl,flash translation layer)。
因为没有ftl,所以ubi只能工作在裸的flash,因此,它不能用于消费类flash,如mmc, rs-mmc, emmc, sd, mini-sd, micro-sd, compactflash, memorystick等,ubi在嵌入式设备如智能手机中被广泛使用。

中兴提前布局5G手机 将放弃“全面屏手机”
什么是主板电池/VP3芯片组/MVP3芯片组
移动电源哪个好,质量好的移动电源推荐
什么是各向异性刻蚀?
自动空调出风位置控制原理
需要了解UBI文件系统的详细介绍
嵌入式系统与PC机的USBUART通信设计
受疫情影响 面板设备产业营运势必受到冲击
韩国宣称已完成应用机器人自主探索隧道的技术研究
SKI计划投入17.5亿元扩大动力电池业务
玩转SQLite1:SQLite简介与安装
什么是EUV***?
汽车安全技术不嫌多 都有哪些安全技术
基于PCI Core的链式DMA控制器设计
美国智能音箱Q3报告:Echo第一、Google Home第二
小米6、一加5和iphone7这几部手机你觉得哪款最适合入手?
LED测速仪DIY图解
SF581场扫描电路的应用电路图
骨传导式耳机哪个牌子好,骨传导耳机音质排行榜
人工智能筑基培育城市生命体自适应能力