::香农::青岛数据恢复中心::

Flash闪存的数据恢复和取证 - flash技术

文章首页
Flash闪存的数据恢复和取证
flash技术
Flash数据恢复
全部页面

 

二、Flash技术

Flash闪存是一种非易失性存储技术,可以被电擦除和重编程。Flash闪存根据其基本逻辑架构分为两种:NOR1 flash和NAND2 flash。与NAND flash相比,NOR flash可以按字节读取数据,因此常用于保存和执行固件3代码,而NOR flash中没有被固件代码使用的区域可以用于存储用户数据。大部分移动存储设备—如U盘,或者多媒体设备—如数码相机和可视电话,使用NAND flash闪存来存储数据。本章将首先介绍flash技术的物理层,然后再介绍逻辑层。NAND flash闪存的介绍可以参考[5],更多详细资料可以参考[9]。

  • A.物理层

flash闪存存储数据的物理机制是基于晶体管门电路的电容效应。这种电容可以在不需要外部电源的情况下维持一段时间,但是会逐渐减弱。当前flash闪存可以存储数据的时限为10到100年。

Flash闪存可以像EEPROM4一样逐字节(byte)的写入,但是在重写之前需要先按块(block)清除。被清空后的存储快的内容全为1.在NANDflash中,块(block)又被进一步划分为页(page)——例如每个块分为32或64个页。一个页(page)通常是512字节的倍数,以仿效磁介质中512字节每扇区的容量。另外,每个页(page)中有一些被称为“剩余空间(spare area)”的字节,用于存储元数据(meta data)。某些flash闪存驱动器还引入了“区(zone5)”的概念。一个zone是一组block——通常为256到1024。与block和page相对,zone仅是一个逻辑层的概念,在物理层是不存在的。图一是NAND flash闪存的解剖。

Image
图一:NAND flash 闪存的解剖

表1:Page大小不同时Spare area的大小(单位:字节)

Page大小

Spare area大小

Page总大小

Block大小

256

8

264

8448

512

16

528

16896

1024

24

2112

135168

每个page中都有一些字节被称为冗余区(redundant area)或剩余区(spare area)。表1展示了page容量不同时spare area的大小。Spare area可以存储block或page的状态信息。例如当一个block损坏时,就会在spare area做出标记。Spare area也可以用于存储ECC6数据。

ECC可以用于检测page中的错误。使用ECC可以检测出一个bit的错误,然后这个block就会被标记为坏块。Spare area还可以存储物理地址与逻辑地址的映射信息。

清空block会使得block的状态恶化。Block可被清空的次数为104到106次,最后block中的数据变成贝壳清空(保持为0的状态)。这个block就称为一个坏块。NAND flash闪存在出厂时就包含一些坏块。在NAND flash芯片的datasheet中,规定了出厂时好块的最小数量,典型值为98%。初始坏块被标记在spare area中。

为了尽可能均匀的清空所有物理block,flash闪存生产商发明了一种称为“磨损分级化(wear levelling)”算法[6][7]。这种算法的思想是将清空block带来的磨损平均的分布到flash闪存的整个物理空间中,从而延长其寿命。对于存储设备生产商来说,wear levelling算法是非常机密的技术,所以有关wear levelling算法的问题通常都得不到回到。

不过,要恢复flash闪存中的数据,仅仅知道wear levelling如何复制flash芯片创建物理镜像是不够的。还应该知道如何按正确顺序重建物理block的镜像,才能恢复正确的文件系统。换一句话说:wear levelling可以看成是动态的调整page和block逻辑顺序以延长flash闪存寿命的技术。要解释wear leveling算法的静态工作(在某一时间flash闪存的二进制数据拷贝)不需要wear leveling动态工作知识。

NAND flash的电气接口与RAM是不同的。NAND flash有多个地址/数据总线,通常被称为I/O线。NAND flash的总线是8位或16位。图二是NAND flash芯片的电气接口图,其中针脚名称在表2中。要读取NAND flash芯片中的数据首先要在I/O线上传送数据所在的地址。由于最大地址通常大于8或16位I/O总线所能达到的最大寻址位数,因此,要使用3到5个寻址周期来将地址锁存到芯片中。地址锁存到芯片中后,就可以使用相同的I/O总线来传送数据。表3给出了读取NAND flash芯片中的数据的典型序列。

Image
图二:NAND flash芯片的典型电气接口

表2:NAND flash芯片的针脚定义

Pin

定义

CLE 指令锁存使能
ALE 地址锁存使能
CE 芯片使能
RE 读使能
WE 写使能
WP 写保护
R/B 读/忙 输出
PRE 加电 读使能
Vcc 电源
Vss
N.C 无连接

 

表3:NAND Flash芯片寻址周期

周期

I/O0

I/O1

I/O2

I/O3

I/O4

I/O5

I/O6

I/O7

 

1

A0

A1

A2

A3

A4

A5

A6

A7

列地址

2

A8

A9

A10

A11

L

L

L

L

列地址

3

A12

A13

A14

A15

A16

A17

A18

A19

行地址

4

A20

A21

A22

A23

A24

A25

A26

A27

行地址

 

关于flash闪存的内部工作原理的更多介绍以及NAND和NOR flash之间的区别超出了本文的范围,就不再介绍了。

  • B.逻辑层

在嵌入系统中实现flash闪存文件系统的方法有多种。下面介绍其中的三种。图3展示了主机操作系统(OS)访问flash文件系统的组成框图。

Image
图三:硬盘和flash存储接口框图

作为参考,左边是硬盘上的文件系统框图。对于硬盘,主机操作系统通过文件系统驱动(FSD)来访问硬盘。FSD向硬盘发出指令——例如ATA7的“Read Sector”指令来读取逻辑块地址(LBA)8中的数据。关于ATA指令的更多信息请参考[8]。

USB闪存盘告诉主机自己是一个存储设备。在加载后,主机OS就可以存取它。以“Wintel”平台为例,当将USB闪存盘插入USB端口时,就会创建一个新的存储器,然后就可以存取文件了。FSD发出的磁盘存取指令通过USB端口传送到USB闪存盘。USB闪存盘控制器解释这些指令并存取flash闪存中的数据。为了管理flash闪存的特殊属性,控制器通常会和数据一起存储一些额外的信息9。例如,ATA指令中的LBA与flash芯片中的实际物理地址是不同的。LBA与物理地址的映射信息也存储在flash芯片中。

嵌入系统——如手机或数码相机,使用的是相似的机制,见图3“嵌入设备1”。当嵌入系统插入到主机上时,主机OS可以通过标准的磁盘访问指令来存取设备上的flash文件系统。设备上的OS(Windows CE,Symbian,等)接收来自主机OS文件系统驱动发出的指令,并返回请求的数据。这样,主机OS不会认为硬盘和附加设备有任何不同。

另一种访问嵌入设备中的flash闪存的方法示于图3“嵌入设备2”中。主机OS通过一个实例应用来访问flash文件系统。这个应用与嵌入系统进行通讯,将flash文件系统中的数据显示在主机上。例如通过ActiveSync来访问windows CE设备上的磁盘。ActiveSync使用远端应用程序接口(RAPI)10来将数据传送到主机。使用这种方法可以与其他主机上的文件系统一样浏览嵌入设备上的文件系统(如同windows explorer),

尽管嵌入设备上的flash文件系统可能与磁介质上的文件系统结构完全不同。

1NOR flash闪存由Intel于1988年发明。
2NAND flash闪存由Toshiba于1989年发明。
3固件就是嵌入硬件设备(如手机或PDA)中的软件。
4电擦写可编程只读存储器。
5这个术语有时也用于表示flash闪存中的段。
6错误检验和校正
7AT外设(ATA)是一种连接存储设备(如硬盘和CD-ROM驱动器)和个人计算机的标准接口。
8逻辑块地址,存储单元线性映射的数据地址。
9也被称为元数据。
10msdn/microsoft.com/library/en-us/wceactsy/html/cerefRAPIReference.asp。