ubi层次
转:http://www.360doc.com/content/11/0518/13/496343_117643185.shtml
UBI是什么?
它是一种flash管理方式
flash是一系列连续的物理擦除块组成的。
UBI卷是一系列连续的逻辑擦除块(eraseblock),每一块都可以被映射到物理分区,这种映射是由UBI管理的。
UBI是靠什么来管理这些物理擦除块的呢??
首先要区分一些层次:
1.MTD subsystem :
provide ubiform interface to access flash (e.g. /dev/mtd0)
2.UBI subsystem
UBI works on top of MTD devices ,provide a notion of UBI volumes
3.UBIFS file system
work on top of UBI volume
UBI header
UBI在每一个物理擦除块的开始有2个64-byte的ubi-headers
1.erase counter header (or EC header);
记录着物理可擦除块上erase counter(擦除次数),以及其他一些不那么重要的信息
Erase counter是指物理可擦除块被擦除的次数
2.volume identifier header (or VID header)
记录着卷号(volume ID)和 这个物理可擦除块所属的逻辑可擦除块的ID
所有的UBI headers被CRC-32校验和所保护着
在我们sep4020的nandflash中,每一页为512字节,一个物理擦除块的大小为16K,也就是32页
其中EC header在每一个擦除块的第一页上(所以offset为0)
VID header在每一个擦除块的第二页上(偏移量offset为512)
所以一个完整的物理擦除块是什么结构呢?
第一页保存EC头,占了64字节(浪费了好多哦)
第二页保存VID头,同样也占64字节
其余的十页用来保存数据
Volume table
卷表(volume tabel)是一种flash上的数据结构,包含了UBI设备上的每一卷(volume)的信息(基本信息),卷表是一系列 volume table record,每一个记录块上包含了一下的信息:
1.volume size
2.volume name
3.volume type (dynamic or static )
4.volume alignment
5.update marker(防止数据更新发生意外打断,可以恢复)
6.auto-resize flags
7.CRC-32 校验和
UBI内部保持着两份卷表volume table,保持UBI的稳定性,防止突然断电的情况
这两份卷表保存在一个叫做layout volume的内部卷区中,这个卷区对于用户空间是不可见的
怎么才能从一个逻辑ID找到与它映射的物理ID?
其实在我们的volume是有三个表的
1.volume table (flash media)
2.eraseblock association (EBA) table (ram)
3.erase counters (EC) table (ram)
建立EBA和EC table就必须扫描整个ubi设备,来获得物理块与逻辑块之间映射关系的全部信息
在这个映射关系变更时,要及时的更新表
UN_MAP:
unmap就是清除物理块(peb)和逻辑块(leb)这种映射关系
那么这种映射关系不存在的话,那么物理块中保持的数据也就没有意思了,所以需要清除(erase),这种清除工作是后台进程来执行的
unmap机制通常被当做是一种快速擦除nand的手段
1.不需要等待返回,因为总是存在一些unmaped的物理块peb可供来进行映射(ubi策略上保留了一些物理块)
均衡损耗:
如果老是对着同一个nandflash的物理块进行擦除、读写操作,就坏导致这个物理块成为一个坏块。
UBI中擦除会连同保存了UBI的物理与逻辑映射关系的VID header一同擦除
但是EC header是保留的
这样每一次擦除都会断开物理块(P1)与逻辑块之间(L1)的映射关系,假如我现在向逻辑块L1中写数据,系统会根据EC头中擦除次数去找一个物理块,然后建立映射关系。
这样就避免了对同一个物理块操作次数过多
在建立逻辑块与物理块的映射时,ubi会从所以得未进行映射的物理块中找出一个擦除次数最少的建立映射关系
下面看一下挂载一个ubifs文件系统的步骤:
ubiattach /dev/ubi_ctrl -m 3
1.ubiattach是将一个mtd分区关联为ubi设备,在这个过程中,会再次扫描mtd分区(全部扫描)
2.建立EBA 和EC table
3.接下来系统会去读ubi中保存的两个卷表,显然第一次的时候这两个卷表是不存在的。
4.ubi会去创建两个卷表,然后初始化之。一般是我们mtd设备的前两个擦除块
(leb0 和 leb1)
5.接下来会创建一个后台进程,然后唤醒它,这个进程干什么的呢?它会进行物理块擦除的工作
创建卷:
ubimkvol /dev/ubi0 -N ubifs -s 15MiB
在ubi函数是调用了ubi_create_volume
前面我们讲一个mtd设备关联为ubi设备,在一个mtd设备中可以创建好多的volume
在创建一个volume的同时,要将volume table中对应位进行更新
挂载:
mount -t ubifs ubi0:ubifs /mnt
次数(yaffs) 读速度(block2到sdram) 写速度(sdram到block2)
1 11.59s 50.67s
2 10.79s 50.65s
3 11.10s 50.09s
平均 11.16s(1.245MB/S) 50.47s(282.02KB/S)
次数(ubifs) 读速度 写速度
1 9.26s 33.95s
2 7.44s 32.87s
3 7.80s 34.06s
平均 8.17s(1.7MB/S) 33.63s(423.24KB/S)
ubi层次的更多相关文章
- Linux ubi子系统原理分析
本文思维导图总纲: 综述 关于ubi子系统,早已有比较正式的介绍,也提供非常形象的介绍ubi子系统ppt 国内的前辈 alloysystem 不辞辛劳为我们提供了部分正式介绍的中文译文,以及找不到原文 ...
- 挑子学习笔记:BIRCH层次聚类
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/6129425.html 本文是“挑子”在学习BIRCH算法过程中的笔记摘录,文中不乏一些个人理解,不当之处望 ...
- 根据异常处理对 Java 方法的层次分类
我根据异常处理对 Java 的方法分为三个层次:1.执行层,2. 处理层,3. 调用层. 执行层方法只抛出异常 throws Exception,是作为代码的基层操作者,可能有多个层次. 处理层方法使 ...
- lintcode二叉树的锯齿形层次遍历 (双端队列)
题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...
- Oracle层次查询
Oracle层次查询的语法如下: 下面根据两道“烧脑”的题具体来体现: 1. 根据时间先后顺序,十二星座的英文名称用逗号串起来为'Aries,Taurus,Gemini,Cancer,Leo,Virg ...
- 【转】Windows 窗口层次关系
原文链接:undefined! 相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所 ...
- SQL Server 2008 R2——以特定符号出现的次数来判断当前内容所在的层次
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- Linux UBI子系统设计初探
问题领域 flash存储设备存在如下特点: 存在坏块 使用寿命较短 存储介质不稳定 读写速度慢 不支持随机访问(nand) 只能通过擦除将0改成1 最小读写单位为page or sub-page 便宜 ...
- WAF攻防研究之四个层次Bypass WAF
从架构.资源.协议和规则4个层次研究绕过WAF的技术,助于全方位提升WAF防御能力. 绕过WAF的相关技术研究是WAF攻防研究非常重要的一部分,也是最有趣的部分,所以我在写WAF攻防时先写攻击部分.还 ...
随机推荐
- 转: 构建基于Nginx的文件服务器思路与实现
在Web项目中使用独立的服务器来保存文件和图片的好处很多,如:便于统一管理,分流web服务器的压力,可进行访问加速等.另外当web服务器需要做集群进行负载均衡时,图片和文件上传在各个服务器之间同步将是 ...
- Nginx中的长连接
在nginx中,对于http1.0与http1.1是支持长连接的 我们知道,http请求是基于TCP协议之上的,那么,当客户端在发起请求前,需要先与服务端建立TCP连接,而每一次的TCP连接是需要三次 ...
- 使用MapReduce将HDFS数据导入到HBase(三)
使用MapReduce生成HFile文件,通过BulkLoader方式(跳过WAL验证)批量加载到HBase表中 package com.mengyao.bigdata.hbase; import j ...
- MySQL-based databases CVE-2016-6664 本地提权
@date: 2016/11/10 @author: dlive 0x00 前言 这个漏洞可以结合CVE-2016-6663使用提升权限到root 0x01 漏洞原文 # http://legalha ...
- shell浅谈之三for、while、until循环【转】
转自:http://blog.csdn.net/taiyang1987912/article/details/38929069 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[- ...
- jQuery插件--zTree中点击节点实现页面跳转时弹出两个页面的问题
这是第一次使用zTree,所以在使用之前我要先写一个demo来学习一下.我们要注意的是,zTree是一个jQuery插件,所以我们在导入zTree的js文件之前要先导入jQuery的js文件. 我们先 ...
- 360开源的pika
http://www.360doc.com/content/16/0531/14/13247663_563808424.shtml https://github.com/Qihoo360/pika/b ...
- [BZOJ2553][BeiJing2011]禁忌 dp+AC自动机+矩阵快速幂
2553: [BeiJing2011]禁忌 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1206 Solved ...
- C# base64获取图片后缀
由于业务需要,使用的微服务,然后做的上传文件操作. 但是有个问题就是,如果上传的是图片,之前为了图省事儿,直接写后缀jpg,但是人总是要进步的嘛,然后抽空就找了个. 首先微服务相关就不介绍了,直接从引 ...
- python 全局解释锁GIL
Python的全局解释器锁GIL用于保护python解释器,使得任意时刻,只有一个线程在解释器中运行.从而保证线程安全 在多线程环境中,Python 虚拟机按以下方式执行: 1. 设置GIL2. 切换 ...