UBIFS学习笔记之二(UBIFS和UBI)

UBI和UBIFS的关系

在上一回分析中,已经知道UBI指的是UBI subsystem,其工作在MTD设备之上,是MTD设备的高层次表示,对上屏蔽了一些MTD需要处理的问题,如wearing和坏块处理;而UBIFS指的是UBIFS file system,工作在UBI卷层之上。

UBI简介

UBI运行的时候需要占用一部分flash空间,这部分flash空间包括:

2片PEB用于存储卷表(volume table)。卷表是一种数据结构,包含了UBI设备上每一卷的信息,它是一系列volume table record,其中每一个记录块上包含以下信息:卷大小(volume size)、卷名(volume name)、卷类型(volume type,dynamic or static)、volume alignment、更新标记(update marker,防止数据更新发生意外打断,可以恢复)、自重整大小旗标(auto-resize flags)、CRC-32 校验和等信息。之所以保留两份卷表,是为了提高稳定性和防止出现突然断电的状况。当访问MTD设备时,UBI需要确保两个卷表是一致的,如果由于掉电或意外重启导致任何一种不一致状况,需要用较旧的卷表覆盖较新的卷表,确保一致;一旦有一个卷表损坏,可以使用另一个卷表。这俩卷表对用户来说,是不可见和不可访问的。

1片PEB用于损耗平衡(wear-leaving)。UBI支持损耗平衡,这对有限次读写的flash来说可极大提高其使用寿命。在UBI模块中,会包含一个负责实现损耗平衡的独立损耗均衡单元,这个单元依据EC header和VID header来实现对每个物理擦除块所擦除的次数和所属逻辑单元的读取,利用红黑树法对每个擦除块进行保护和移动。

1片PEB用于atomic LEB change operation。

一部分PEB用于保存坏块的句柄。

UBIFS简介

UBIFS文件系统运行在UBI系统之上,它会把UBI volume划分为6个部分:

超级块(superblock area),使用LEB0区块。它在文件系统创建时建立,占用一片LEB存储uperblock node,一般来说,superblock node保存文件系统很少变化的参数。superblock node仅仅占用LEB0的前4096个字节。superblock几乎不改变,只有一种情况会导致superblock node被重写,就是自动resize时。之所以需要自动resize,是因为创建ubifs文件系统镜像时,并不知道将要mount的UBI bolume的大小,所以当我们将UBIFS镜像安装到UBI上时,UBI的尺寸可能实际上小于UBIFS镜像所需要的最大空间,此时就需要把UBIFS resize以适合UBI volume。

主节点区(master area),占用LEB1和LEB2两个分区。一般情况下,这两个LEBs保存着相同数据,master node尺寸为512 bytes,每次写入master node会顺序的使用LEB的空闲page,直到没有空闲page时,再从offset zero开始写master node,这时会重新unmapped LEBs为另一个erased LEB。注意,master node不会同时unmapped两个LEBs,因为这会导致文件系统没有有效master node,如果此时掉电,系统无法找到有效master node。

日志区间(log area),从LEB3开始,占用空间不确定。UBIFS使用日志的目的是为了减少对flash index的更新频率,因为更新文件系统时,一旦添加叶子节点,整个文件系统的索引节点都要定期更新,这样的话会非常影响效率。因此采用日志区间,当添加叶子节点时,会先将其添加到日志中,只更新内存中的节点,不再提交到flash中,然后再定期提交日志,这样的话,效率会有极大的提高。

LPT area,跟随在log area之后,其大小在创建文件系统后确定。LPT area 包含LEB Properties树,LPT area eraseblock表(ltab),以及saved LEB numbers表(lsave)。LPT area的大小在文件系统创建时就已经确定了,通过LEB 尺寸和文件系统最大LEB count自动计算出LPT area占用的LEB数目。LPT area类似一个小型的自包含文件系统,它有自己的LEB properties,也就是LEB properties area的LEB properties(ltab).LPT area要求不能耗光自己的空间,能够快速访问和update,以及算法上的可扩展性.LPT properties tree是用wandering tree实现的,LPT area有自己的垃圾收集器。

orpan area,在log area和main area之间,使用固定数目的LEBs,一般来说占用一个LEB就够了。orpan area记录已经删除的文件的inode number。orphan area的意义在于删除过程unclean unmount发生,已经删除的孤儿inodes必须被删除,这就要求扫描整个index来查找他们,或者在某处保存一个列表,ubifs就是在orphan area保存这样一个列表。

main area,最后一个area,保存文件系统index node和non-index node。UBIFS包含几种类型的non-index节点:file inode, directory entry,extend attribute entry和file data node。UBIFS维护着一棵wandering tree,叶子节点保存着文件信息,他们是文件系统的有效节点。树的内部节点是index node保存着到children的索引。所以wandering tree可以视为两个部分,顶部保存树结构的索引nodes,底部则是真正文件数据的leaf node。

 

 

参考资料:

http://www.360doc.com/content/08/1030/00/494_1847505.shtml
http://www.360doc.com/content/12/0305/19/1317564_192019619.shtml
http://hi.baidu.com/mournjsut/blog/item/dce95629686f34345343c198.html
http://blog.csdn.net/yicao821/article/details/6754195
http://patchwork.ozlabs.org/patch/81435/
http://blog.sina.com.cn/s/blog_55465b470100tiqk.html
http://blog.csdn.net/kickxxx/article/details/7109662
http://biancheng.dnbcw.info/linux/297417.html

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值