SSD坏块管理
坏块来源
出厂坏块 (Factory bad block):Flash从工厂出来,就或多或少的有一些坏块。一般来说,出厂坏块率为2%-10%,再坏的话,出厂的时候就被淘汰了。增长坏块 (Grown bad block):随着Flash的使用,一些初期好块也会变成坏块。变坏的原因,主要是擦写磨损导致的。
坏块识别
Flash厂商在Flash出厂时,会对出厂坏块做特殊标记。一般来说,刚出厂的Flash都被擦除,里面的数据是全0xFF。但是对坏块来说,Flash厂商会打上不同的标记。拿Toshiba某型号Flash来说,它是这样标记出厂坏块的:
它会在出厂坏块的第一个Page和最后一个Page的数据区第一个Byte和Spare区第一个Byte写上一个非0xFF的值。
用户在使用Flash的时候,首先应该按照Flash文档,扫描所有的Block,把坏块剔除出来,建立一张坏块表。还是拿上面Flash来说,Toshiba建议按照下面的流程来建立坏块表:
还有些Flash厂商,它会把坏块信息存储在Flash内部某个地方(掉电不丢失),用户在建立坏块表的时候,没有必要扫描所有的Block来识别坏块,只需读取Flash的那个特定区域。
对增长坏块而言,它的出现会通过读写擦等操作反映出来。比如读到UECC (Uncorrectable Error Correction Code, 数据没有办法通过ECC纠错恢复),比如擦除失败,比如写失败,这都是一个坏块出现的反映。用户应该把这些坏块加入坏块表,不再使用。
坏块管理策略
一般有两种策略对付坏块,一是略过(Skip)策略,而是替换(Replace)策略。
略过策略 :用户根据建立的坏块表,在写Flash的时候,一旦遇到坏块,跨过它,写下一个Block。SSD的存储空间是Flash阵列,一般有几个并行通道,每个通道上连接了若干个Flash。以上图为例,该SSD有四个通道,每个通道上挂了一个Flash(只有一个Die)。SSD的固件 (Firmware) 向四个Die依次写入。假设Die1上有个Block B是坏块,若FW采取坏块略过策略,则写完Block A时,接下来便会跨过Block B写到Die 2 的Block C上面去。替换策略 :与略过策略不同,当某个Die上发现坏块,它会被该Die上的某个好块替换。用户在写数据的时候,不是跨过这个Die,而是写到替换块上面去。采用此策略,除正常用户使用的Block,还需额外保留一部分好的Block,用于替换用户空间的坏块。整个Die上Block就划分为两个区域:用户区域和预留区域:还是以上面的情况为例:用户写入数据时,当碰到坏块B,它不会略过Die 1不写,而是写入到Block B 的替换者 Block B’上面去。采用替换策略,SSD固件内部需维护一张映射表:坏块到替换块的映射,比如上图的B->B’。
两种坏块管理策略,没有谁优谁劣,取决于SSD的软硬件架构。在此提这两种策略,只是给设计者一个 参考。但需要提到的是,替换机制策略有一个致命点,那就是如果某个Die坏了(所有Block不可用,或者可用的很少),那么,整个SSD就废了!因为在那个Die上,找不到好块来替换坏块,用户数据无处可写!
替换策略有木桶效应,你也许会说,既然这样,那就采用略过策略吧。但是,对某些SSD控制器来说,它只支持替换策略。还是那句话,哪种策略适合你SSD的软件硬件架构,就用哪种吧。
固态硬盘ECC纠错能力,一眼看出SSD的好坏
我们常常看到SSD上显示支持ECC。那么ECC是个什么东西呢?
ECC是SSD的数据校验、纠错。
为什么SSD需要ECC呢?
原因:
1.SSD容易产生数据读写错误。ECC需要去校验更改数据错误,以及判断是否坏块。
2.SSD读写的介质是NANDFLASH。而NANDFLASH在生产过程和使用过程中都会产生坏块。
为什么NANDFLASH会产生数据读写错误呢?
原因:
1.写入集中、写入放大、异常断电等等,数据读写错误是普遍的。
2.NANDFLASH坏块引起数据读写错误。
为什么NANDFLASH会有坏块?
原因:
1.生产时的造成的坏块。
2.使用中造成的坏块。NANDFLASH是通过电荷来实现数据储存的,而当电荷击穿底层的绝缘层,坏块或就出现了。
坏块太多的NANDFLAH,无法通过测试,就成了黑片,部分测试未通过NANDFLASH基本能用就成了白片,而NANDFLAH的坏块少并且通过全部测试是为正片。
NANDFLASH中坏块是普遍存在的,只是多少的问题。这些坏块影响NANDFLASH/SSD的读写性能和寿命。
如上图,SSD的写入主要分为顺序读写和随机读写,而SSD使用中不断增加的坏块,随机的出现在SSD的NANDFLASH中,这使得SSD读写时容易出现错误,和增加读写的等待时间。
为了减小坏块、错误数据对NANDFLASH/SSD的影响。主控需要对NANDFLASH里的坏块进行判定、校正错误数据、对坏块进行管理。于是主控加入了BBM坏块管理和ECC校验纠错。
ECC找到坏块或者“伪坏块”,对它们进行判断、识别、纠正、标注,如果确定它们是真的坏块,则将其交给BBM去管理。
这样在主控的干预下,SSD读写时就可以减少数据错误、避开坏块,从而保证了SSD的读写性能和安全、寿命。
随着主控技术的不断进步。主控的ECC和BBM能力不断增强,主控ECC能力越来越强,BBM也能管理和屏蔽更多的坏块了。
这使得SSD对NANDFLASH的品质要求越来越低。这使得黑片都可以拿来做SSD,且性能勉强达到使用要求。
主控进步是SSD技术的一种进步,但是降低对NANDFLASH品质的要求对于我们消费者来说,却是一件坏事。因为黑片从此可以暗度陈仓,鱼目混珠了。
简单的讲了讲ECC和SSD的坏块管理,就叭叭叭说了一大通。如果有错误和遗漏,欢迎交流。
下面我们来一点实际的。我们来看看如何通过查看“ECC的运行历史/状况”来大概看懂一个SSD的好坏。
(声明:此方法是我无意中发现的,是结合了ECC和BBM知识的一种猜想,有待验证。)
我用SSD-Z测到硬盘S.M.A.R.T自我检测分析报告,在里面,我看到“ECC错误率”格式化为682。而我的SSD才使用214小时。我的电脑几乎是24小时开机,也就是说我的SSD才使用15天以内。半个月时间,我的ECC检查到和格式化的错误数据/坏块达到了682次/个。
我用鲁大师测试SSD。硬件ECC校正数据达到了699。
这两个图说明,我的SSD“牛仔很忙”。
为什么SSD使用不久,但是ECC却很忙,检查到/纠正过的数据错误或者发现的坏块非常多?
因为:
1.可能是NANDFLASH品质很渣。
2.可能是SSD主控不给力。
只有这两个可能,且任何一个都代表SSD可能很差劲。
确实如此,我的SSD速度测试,顺序读为300多MB/S,顺序写入不到20MB/S,4K也是不堪入目,是一个性能比HDD还糟糕的SSD。
另外我也用其他SSD用上面的方法检测过。也证明,我们通过看“ECC的运行历史/状况”可以大概了解到SSD主控和NANDFLASH的好坏,进而了解到这款SSD的好坏。
(但是由于ECC的版本不同,可能有的SSD在测试时无法看到“ECC的运行历史/状况”。大家不妨自己试试。)
相关问答
NandFlash 烧录时 坏块 是如何处理的?WinCE或Linux系统通常存储于NandFlash中,而NandFlash频繁擦写易出现坏块,坏块影响系统正常工作,严重时会导致系统无法启动。M3352核心板、M283核心板、M287核...
u盘只能 识别 到主控不能 识别 到 flash ?些主机为了自己的运行更顺畅,所以生产了符合中控的专用型优盘。这种u盘只能识别到中控系统,没有办法识别其他的系统,包括flash。U盘在使用中可以分为专用型和...
U盘 Flash 芯片损坏有救吗?U盘Flash芯片损坏还是有救的。如果U盘FLASH芯片出现了坏块,并不是就意味着这个U盘报废了呢,还是可以通过量产的方法来修复U盘FLASH芯片的坏块,将坏块屏蔽后...
norflash为什么不用 坏块 检查?NorFlash不需要做坏块管理,为保证数据的可靠性,存储数据的时候加校验并且同时存在2个不同的扇区,读取数据的时候,计算校验值,正确才取出来数据,这样就比较安全...
u盘量产失败怎么解决?U盘量产工具(英文USBDISKPRODUCTIONTOOL,简称是PDT)的功能是向U盘写入相应数据,使电脑能正确识别U盘,并使U盘具有某些特殊功能。U盘是由主控板+FLASH...
电脑可 识别 读卡器却读不到MINISD卡(卡未坏)?1.优秀的U盘、内存卡检测工具MyDiskTestMyDiskTest作为是一款U盘/SD卡/CF卡等移动存储产品扩容识别工具。可以非常方便的检测出各种存储产品是否经过扩...
U盘好坏有什么区别?众所周知,一个好的U盘最主要的部分是在Flash的质量上,其使用效果会有明显的体现,在这里教大家如何辨别优质(A级)Flash。Flash的形状成长方体,内有很多存储...
tcl电视数字板的常见故障该怎么维修?_住范儿家装官网据我所知,TCL此种电视。。里面的数码板经常发生虚焊的故障。。如果你有动手能力,拆开焊接一边即可。。如果不行别逞强如果开机有声音就是没有...
手机U盘打不开修复方法?第一类:就是插入U盘后系统提示无法识别的USB设备,这类呢有两个原因第一USB接口氧化导致识别不到,解决方法是将U盘插到电脑的后面板一般可以解决。二、是U盘本...
电脑硬盘坏了可以修理吗 - 懂得坏了,通常换一块同样型号硬盘的电路板...如果是属于物理损坏,而硬盘主体没有问题,那些电路板上的元器件坏了,通常换一块同样型号硬盘的电路板就没...