轻量级 NAND 坏块管理方法分析及改进

NAND 及其坏块

NAND Flash 是一种高密度低成本的存储体,它在各种各样的嵌入式系统中获得了广泛的应用, USB 存储设备、SD 卡、手机、相机和固态硬盘等各种设备中使用的都是 NAND 芯片。其内部结构是按照块/页进行组织的,一个 NAND 芯片包含若干个块,而块内部又是由若干个页构成的。NAND 芯片出厂时就可能包含若干个坏块,在使用过程中也可能会产生新的坏块,当一个块被标记为坏块后,不应再对其写入数据,以免出现数据丢失。由于 NAND 擦写次数是有限的,而且会在使用过程中产生新的坏块,一般都需要额外的软件或硬件来配合它进行使用。

NAND 坏块管理方法分类

目前,NAND 坏块管理方法可分为如下几类:

基于 FTL 芯片的坏块管理

它使用一个额外的 FTL (Flash Translation Layer)芯片对 NAND 进行管理,对外部屏蔽了坏块信息,U 盘、SD 卡、MMC 卡以及固态硬盘都使用这种管理方法。这种方式简化了 NAND 操作,但也使坏块信息对外部而言不可见,如果系统中出现了可能和坏块相关的问题,定位和调试变得困难,另外,FTL 芯片也需要额外的硬件成本。

基于NAND 文件系统的坏块管理

JFFS2、 YAFFS2、 FlashFx 这些专门针对 NAND 的文件系统可以对坏块进行管理。

NAND 管理中间件

有一些中间件(Middleware)专门用于 NAND 管理,比如 UBI。

轻量级 NAND 坏块管理

对 NAND 进行管理的硬件或软件模块,不仅提供坏块管理,同时也支持对 NAND 的擦写操作进行负载平均。而轻量级的坏块管理只专注于坏块,并不提供擦写负载平均的支持,而且,它也不依赖于任何第三方的库。因此,轻量级的坏块管理方式降低了系统的复杂度,而且免去了加载文件系统或初始化中间件的时间,在嵌入式系统中有着广泛的应用。

图 1 展示了几种典型的嵌入式系统中 NAND 内部的内容布局。如果需要频繁地对 NAND 写入各种数据,最好使用 NAND 文件系统或者 NAND 管理中间件对需要写入的区域进行管理。而那些很少需要更新的区域,比如 bootloader、VPD 和 Kernel,只需进行轻量级的坏块管理,不需要进行负载平均。很多的嵌入式系统中,需要写入 NAND 的数据量很少,频度也较低,比如路由器、打印机、PLC 等,这些系统完全可以仅使用轻量级的坏块管理方式。

图 1.典型嵌入式系统的 Nand Memory Map

Uboot 的轻量级坏块管理方法

NAND 坏块管理都是基于坏块表(BBT)的,通过这张表来标识系统中的所有坏块。所以,不同的管理方法之间的差异可以通过以下几个问题来找到答案。

如何初始化和读取坏块表?

产生新的坏块时,如何标记并更新坏块表?

如何保存坏块表?是否有保存时断电保护机制?

对 NAND 写入数据时,如果当前块是坏块,如何找到可替换的好块?

Uboot 是目前使用最为广泛的 bootloader,它提供了两种轻量级坏块管理方法,可称之为基本型和改进型。通过下表,我们可以看到两者的差异。

表 1. Uboot 的两种坏块管理方法对比

  基本型 改进型
初始化、读取 BBT 系统每次初始化时,扫描整个 NAND,读取所有块的出厂坏块标志,建立 BBT,占用较多启动时间。 系统第一次初始化时,扫描整清单 1. BBM 头信个 NAND 建立 BBT。之后每次初始化时,扫描 BBT 所在区域,如果发现当前块的签名和坏块表的签名(一个特定的字符串)相符,就读取当前块的数据作为 BBT。
更新 BBT 擦写操作产生新的坏块时,更新内存中的 BBT,同时将坏块的出厂坏块标记从 0xFF 改为 0x00。
擦写出错后仍然对坏块进行操作—更改出厂坏块标记,存在安全风险。而且,也无法区分哪些是出厂坏块,哪些是使用过程中产生的坏块。
擦写操作产生新的坏块时,更新内存中的 BBT,同时将更新后的 BBT 立刻写入 NAND 或其他 NVRAM 中。
保存 BBT 不保存 在 NAND 或其他 NVRAM 中保存一份,无掉电保护机制。
坏块替换方法 如果当前块是坏块,将数据写入下一个块。 如果当前块是坏块,将数据写入下一个块。

虽然 uboot 的改进型坏块管理方法的做了一些改进,但它仍然有三个主要的缺点。

出现坏块,则将数据顺序写入下一个好块。如果 NAND 中存放了多个软件模块,则每个模块都需要预留一个较大的空间作为备用的好块,这会浪费较多的 NAND 空间。通常,每个模块预留的备用好块数为 NAND 芯片所允许的最大坏块数,该值因不同的芯片而有所不同,典型值为 20 或 80。假设 NAND 是大页类型,总共有 N 个模块,则总共需要预留的空间大小为 N*80*128KB。

读取 BBT 时仅检查签名,没有对 BBT 的数据做校验。

没有掉电保护机制。如果在保存 BBT 时断电,BBT 将丢失。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/storage/

时间: 2024-08-22 14:18:46

轻量级 NAND 坏块管理方法分析及改进的相关文章

检测oracle数据库坏块的方法_oracle

检测oracle数据库坏块的办法: 1.使用DBV(DB File Verify)工具; 2.使用RMAN(Recovery Manager)工具; DBV(DB File Verify)工具: 外部命令,物理介质数据结构完整性检查: 只能用于数据文件(offline或online),不支持控制文件和重做日志文件的块检查: 也可以验证备份文件(rman的copy命令备份或操作系统CP命令备份): 进入盘符,然后执行以下脚本: D:\app\Administrator\oradata\orcl>d

oracle中系统回滚段坏块恢复记录

数据库启动报错  代码如下 复制代码 SQL> startup mount pfile='c:\pfile.txt' ORACLE 例程已经启动.    代码如下 复制代码 Total System Global Area  452984832 bytes Fixed Size                  1291120 bytes Variable Size             201329808 bytes Database Buffers          243269632 b

Oracle corrupt block(坏块) 详解

转自:http://blog.csdn.net/tianlesoftware/article/details/5024966 一. 坏块说明 1.1 相关链接        在看坏块之前,先看几个相关的链接,在后面的说明中,会用到链接中的一些内容.   ORA-600 各个参数含义说明 http://blog.csdn.net/tianlesoftware/article/details/6645809   Oracle 不同故障的恢复方案 http://blog.csdn.net/tianle

U盘扩容盘和坏块的解释说明

小白用户对U盘有很多地方不了解,尤其是关于U盘故障的一些问题.最近小编收到一个网友的询问:什么是U盘坏块?出现U盘坏块U盘就不能用了吗?扩容盘和U盘坏块有什么关系?下面小编就解答一下. U盘等出现的坏块,磁盘或硬盘的坏道其实都是一种物理存储介质的物理结构的损坏导致的现象,因为传统的机械磁盘的记录方式是一旋转地磁轨工作的,而U盘是使用一种叫P/N结构的单元存储数据的.因此才叫做"坏道""坏块"其实是一个道理,就是无法保存数据了. 好比一张白纸上扣掉了中间一块,这样被扣

用ORACLE8i修复数据库坏块的三种方法

oracle|数据|数据库 在进行SUN CLUSTER双机切换.意外断电或其它情况下,有时会发生共享盘MOUNT不上的情况,需要使用FSCK对共享盘进行修复.修复完成后,在数据库启动过程中,却又出现"数据块损坏,无法启动数据库"的现象,此时,可以根据不同的数据块损坏类型,检测并修复错误.在此介绍三种使用Oracle8i修复损坏数据块的方法. 一.数据块损坏,错误代码为ORA-01578 ORA-1115 I/O ERROR READING BLOCK 通常后跟ORA-737X错误与操

ORACLE坏块(ORA-01578)处理方法

oracle ORACLE的坏块即ORA-01578错,同时还可能伴随ORA-01110错,这种错误对于初学者或是那些没有实践经验的dba来说无疑是很棘手的.我当初就深受其害,写下这篇文章则是希望对大家有所帮助. 一.出问题时的情景 1.  我的一个计费的入库的进程停掉,报的便是ORA-01578错,对应用相关的表tg_bill03做SQL>select from tg_cdr03 where rownum<10;这样是可以的,但做SQL>select count(*) from tg_

oracle8i回滚段表空间出现坏块的解决方法

oracle|解决 今天早上刚到公司便接到网通客户的投诉电话,说网管数据库出问题了,数据库有坏块,回滚段里的部分数据不能读取,需要帮忙解决. 我查看了一下swappALRT.log文件,发现有以下错误: Tue Sep 21 10:34:08 2004Errors in file E:\oracle\admin wapp\bdump wappSMON.TRC:ORA-01578: ORACLE data block corrupted (file # 2, block # 24497)ORA-0

ORA-01578 坏块原因模拟及解决方法

  原创转载起注明出处   我们可能有时候会遇到如下错误 一.错误展示   SQL> select * from test123;   select * from test123   ORA-01578: ORACLE data block corrupted (file # 1, block # 61658) ORA-01110: data file 1: '/oracle_ocfs/oradata/pprac/system01.dbf' 二.原因     这样的情况下可能是因为底层的硬件问题

小脑袋竞价管理软件分析微博营销的方法和效果

其时最为盛行的网络推广办法非微博不行,要害微博具有便利简练的特征,并且还具有许多粉丝这样的特征, 那么怎样将微博推广回身变成同步微博的话,那么将会大大增加微博的推广作用!那么怎样才可以进行同步微博呢?下面 小脑袋竞价 管理软件分析微博营销的方法和效果! &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 一:啥是同步微博    同步微博指的是推广工作人员一起有多个微博帐号, 然后在其间的一个微博上发一条信息,然后同步