记录nand相关知识,主要是mtd和ubi
什么是UBI
它是一种flash管理方式
flash是一系列连续的物理擦除块组成的。
UBI卷是一系列连续的逻辑擦除块(eraseblock),每一块都可以被映射到物理分区,这种映射是由UBI管理的。
UBI是靠什么来管理这些物理擦除块的呢??
首先要区分一些层次:
- MTD subsystem :
provide ubiform interface to access flash (e.g. /dev/mtd0) - UBI subsystem
UBI works on top of MTD devices ,provide a notion of UBI volumes - UBIFS file system
work on top of UBI volume
UBI介绍
综述
UBI全称Unsorted Block Images,是一种原始flash设备的卷管理系统。这个系统能在一个物理的flash设备上管理操纵多个卷并且能在整个flash芯片上实现损耗均衡。
从某种意义上说,UBI和LVM有点相似,LVM将逻辑扇区映射到物理扇区上面,UBI映射逻辑擦除块到物理擦除块。但是除了映射,UBI还实现了全局的损耗均衡和透明的I/O错误处理。
- 一个UBI卷就是一串连续的逻辑擦除块。每一个逻辑擦除块可以被映射到任何一个物理擦除块上面。这个映射是由UBI管理,这种映射对用户是透明的,同时这种映射也是UBI实现全局的损耗均衡的基础。通过每一个物理擦除块记录的擦除计数,可以将数据从损耗严重的物理块转移到损耗较少的擦除块。
- UBI卷的大小在卷被创建的时候被指定,这个大小也可以动态的被改变。有用户空间工具可以用来操作UBI卷。
- 总共有两种类型的UBI卷,一种是动态卷,一种是静态卷。静态卷是只读的,内容被CRC-32校验保护。动态卷可读可写,上层软件负责数据完整性。
- UBI能管理flash的坏块,这样上层软件可以不需要考虑坏块。UBI有一个预留的物理块池,当一个物理擦除块坏掉了,UBI会利用预留的块来替代这个坏块。UBI将数据从新出现的坏块上转移到预留的好块上面。这个功能的好处就是应用层软件不会感知到底层的I/O错误。
NAND Flash在读写的时候可能会出现bit翻转,bit翻转可以被ECC校验来纠正,但是这种现象长期积累会导致数据丢失。UBI将出现bit翻转块上的数据转移到其它块上面。这种机制叫做冲刷,冲刷过程在后台完成,对上层软件是透明的。
下面是UBI特性的列表
-
UBI提供一种卷的机制,可以动态创建、删除、重设置卷大小等操作
-
UBI在整个Flash设备上提供了损耗平衡的机制,你可以不断的对某一个逻辑擦除块进行擦除,UBI会将你的操作均匀分散到其它各个物理块上面。
-
UBI透明的处理Flash上面的坏块
-
UBI通过冲刷机制最大限度的减小数据丢失的几率
-
UBI和MTD分析对比,有如下的特点。
-
两者都由擦除块组成,在UBI中是逻辑擦除块,在MTD分区中是物理擦除块。
-
两者都支持三种基本的擦做,read、write和erase
-
UBI卷没有擦除块损耗均衡的限制,用户层软件不需要关注损耗均衡,简化了用户层软件的设计