PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

浴室谈SSD系列特别篇:固态硬盘为何会“变砖”

  [复制链接]
跳转到指定楼层
1#
neeyuese 发表于 2012-5-1 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:72821|回复数:123
这里指的“变砖”指的是固态硬盘用户数据完全丢失甚至无法识别硬盘的意思,本帖我们就稍微深入的去看看为何会变砖。(笔者非专业人士,知识有限,如有错误,欢迎指正)


我们接下来就先从热门的几大主控谈起,第一个出场的是Marvell的88SS9174系列,采用这个主控的比较常见固态硬盘有美光的C300,m4和浦科特的M2S,M2P,M3,M3P等。


Crucial m4 结构:



画得不好,不要笑。



ST的NOR模块  8Mbit



电压调节模块



LTC3412A 稳压器

由于世界著名元器件生产厂商Marvell并不提供SSD控制器的固件,只提供基本的启动代码,所以采用这款主控的SSD启动方式也各式各样。

拿美光m4来说,开机后主控内部Rom执行基本的指令集,调用外部NOR(这里存放的是美光开发的特殊Boot Loader代码),通过这段小程序代码,初始化完整的硬件设备、建立一段内存空间的映射图,接下来再跳转到NAND里特定位置存放的固件程序(程序会在NAND里有n个备份,保证不会因为颗粒坏块导致挂掉),再通过固件程序调用SSD的FTL表并加载进外置缓存来快速访问用户数据。(一般FTL也会在NAND里有n个备份)


通过上面的流程简介,我们思考几个问题:

1.主控稳定性如何?

SSD主控稳定性非常可靠,一般情况下都不会出现问题,嵌入式的ROM更不会莫名损坏。(如果损坏,你可以去买彩票了)

2.NOR稳定性如何?

这颗NOR的稳定性比SLC还要可靠,所以一般情况下也不会是这个组件挂掉。(除非你刷固件时候掉电,那么恭喜你)

3.NAND稳定性如何?

SLC,MLC甚至TLC,稳定性可以千差万别,出厂坏块更是理所当然,数据都在上面操作,压力那么大,出错的风险自然比上面2个大的多了。

因此:主控物理损坏,买彩票。NOR物理损坏,理论是换一颗重新量产(用户当然没此类工具,返厂吧)。NAND物理损坏,数据完蛋。

说穿了,所谓NAND数据出错,指的是当前读取的数据非当初写入时候的数据(靠各种算法,调整处理都无法还原原本的数据),因此绝大多数情况下,掉盘和变砖都是由下面2个情况造成的:



1. FTL损坏造成用户数据地址找不到了。(各种情况都可能造成,纯看RP了,当然最常见的为在高压力写入时出现掉电等。)




2. 固件的bug导致在某些特定情况下出现逻辑错误,锁盘等。


总结:SSD的非正常掉电,会造成正在写入的数据损坏,而这些数据主要分2类,一类是主机传输来的数据,另一类是SSD内部操作的FTL数据。一般来说,SSD的固件需要在任何情况下保证SSD在下一次通电的时候把原本的数据给读取出来(不管是靠纠错还是调节也好)。但是万事没有绝对,总是会有意想不到的情况发生,例如FTL的数据访问出了岔子后,直接导致的就是SSD掉盘,还有种就是一些FTL关键数据丢失或者出错甚至矛盾,那么就无法判断正确的数据在哪里了。

对于美光m4独创的30分钟恢复大法解析: http://www.pceva.com.cn/topic/crucialssd/index-5_2.html



假设SSD固件里,针对每一个Page都标明“我是谁",而FTL记录着“谁在哪”。当FTL由于上面提到的各种不可预知的原因,导致了部分损坏或者完全损坏,那么我们就丢了“谁在哪”这一部分记录,自然也就无法找到我们想要的数据了。现在我们做一个反推操作,针对全盘的Page做一个完整扫描,扫描速度取决于SSD的容量,也就是“30分钟”的由来,让每一个Page都报告次“我是谁”,然后按照这个报告重新生成一个FTL记录,则可以恢复出用户的全部或者大部分数据,也就是从原本的“砖头”变成了重新识别SSD的状态。至于这个操作方法的可行性,例如2个数据都指向同一个LBA,如何能判断这2个数据的新旧?则是美光固件设计的精华部分。那么这个恢复操作能不能有图形界面呢?这样用户至少也知道自己的盘在做修复啊,答案是否定的,ATA协议不支持。


说完美光,我再来说说同是这个Marvell主控的浦科特把,喝口水先。


浦科特M2P/M3/M3P结构:





Texas Instruments PS54426  DC-DC



MX25L8006E NOR 8Mbit

拿浦科特的这3款SSD来说,开机后主控内部Rom执行基本的指令集,调用外部NOR(这里存放的是浦科特开发的完整固件代码),通过这段代码,初始化完整的硬件设备,接下来再跳转到NAND里特定位置存放的FTL(一般FTL也会在NAND里有n个备份),加载进外置缓存来快速访问用户数据。


浦科特用下来不太容易出现丢盘(美光的SSD在000F固件以前高强度写入下掉电或者不太兼容的机器下容易丢盘,新固件明显改进了这部分),在我们论坛唯一一次见到的是那个“21MB“的M2P情况,下面我来解释下为何会产生这个”21MB“。









这个情况其实是NOR内部存放固件的区域损坏(或者NOR损坏),只需要重新量产(返厂)即可恢复。这个过程如下:开机上电后,主控内部Rom会去外部NOR里读取固件程序,但是读取不成功,造成逻辑还是停留在主控内部,等待SSD有新的ATA指令传输过来。此时如果收到ATA指令的Identify操作,则会反馈SSD Bootcode容量0xAABB(所以显示 0xAABB * 512字节 = 22377984字节 = 22MB)因此要制造"21MB"的话,只需要在刷固件的时候掉个电即可。


-----------------------------------------分割线---------------------------

谈完Marvell主控的SSD后,我们再来看看Intel消费级主控的SSD,著名的"8MB"门是怎么回事?



从左至右分别是Intel X25-M Gen1 , Intel X25-M Gen2 和 Intel 320系列。 Gen1主控内部128KB SRAM,而Gen2和320内部是256KB SRAM,多出来的部分用来提供对Trim指令支持后的资源消耗。

外置缓存方面,Gen1是16MB 166Mhz SDRAM (3.3V),Gen2是32MB 133Mhz SDRAM (3.3V),而320直接是64MB的166Mhz Mobile SDRAM了(1.8V节电)。



出错后序列号会变成” BAD_CTX xxx " ,编号不同,可能出错的定义也不同。



测速度一条直线。。。鬼知道测的哪里



有些情况下型号会变成Intelbootloader

这个8MB的问题从G1 ES开始就由来已久了,只不过当时出现的几率小的多,直到Intel 发布320系列SSD,才开始爆发出来。

Intel官方也说异常掉电容易出现这个故障,新固件也修复了"BAD_CTX 13x”的问题。很多朋友用笔记本,而且也没有出现掉电的情况,就直接变8MB了。出现8MB的问题后,盘依然可以测试,但是数据肯定是访问不到了。大部分的8MB情况可以用Secure Erase指令来修复,但是用户数据全丢了。其实反过来想,Intel当初大打320系列的掉电保护牌,结果却说由于异常掉电引起8MB bug,实在让人无法理解。

我是如何理解8MB这个问题的?(未验证,只是我自己的想法)

我们把前面浦科特的21MB问题再回忆一下,造成21MB的原因是NOR里的固件部分损坏。那么我们假设Intel和浦科特一样,把固件是写在NOR里的(上面3张图中显示intelbootloader的则是固件也挂了),但是坏的部分却是闪存上的FTL呢?这样当主控Rom调用NOR固件完后再去调用损坏的FTL,失败后再被弹回来。如果要再次访问闪存的话,则需要清空老的FTL,让主控通过固件重新生成新的FTL,由于FTL是用户数据层面之上的数据,因此唯一的办法只有通过ATA接口发送Secure Erase指令,瞬间清空整盘的数据(包括用户数据,OP区域,FTL等,只保留关键数据)。这样这块盘再次通电时即可由固件生成全新的没有数据的FTL,达到起死回生的目的,但是我们的数据自然就全部丢失了。


这段总结部分,关于对Intel消费级主控3代的8M看法,我这里归纳下:

Intel说只有主控里的SRAM才存放用户数据缓存,外置缓存只存放FTL的数据,X25-M Gen1 和 Gen2的时代, SSD的容量比较小,因此存放FTL的外置缓存容量也小,靠着PCB上的几颗非常小的电容就可以保证在异常掉电的时候保护FTL数据和SRAM里用户缓存数据的安全,发生8MB的概率非常低。到了320时代,盘的容量一度到了600GB(更不用谈320系列内部还做类似RAID-4的XOR处理更消耗电力),缓存大了很多,即使靠着1.8V的移动版外置缓存节能,6颗大黄豆,也难以保证在掉电的时候FTL安全。(6个黄豆可能只够保证SRAM里的用户数据安全)

打个比喻,所谓量产就是造一个空房子,在SSD里生成一个根目录(用户看不到),之后用户使用就是在里面堆东西。如果固件出错(房子塌掉),那么盘也就不认了,重新量产(重建房子),那么里面东西就没了。 Intel 8MB的问题是房子还好好的,而东西摆放变了,像是被人洗劫过了,而之前浦科特的NOR损坏造成21MB只能算是房门坏了,重修个门数据就能回来,错误并不严重,美光的丢盘后靠30分钟大法修回来的,则是因为美光在摆放东西的时候,在每个东西上都做了位置标记,这样即使东西乱套了,也能靠标记重新摆放到本来位置。


-----------------------------------------分割线---------------------------

说完Intel的主控,我们再来看SandForce消费级主控,SandForce的“变砖”早期固件上也蛮频繁的,现在好多了。

使用SandForce主控碰到的问题相对比上面几款主控多其实是可以理解的,毕竟需要支持那么多颗粒,还有那个复杂的“令人发指”的压缩算法。SandForce主控“变砖”很多情况下都是主控被“锁”,至于为何被“锁”?有颗粒出错的因素,也有主控逻辑碰到死循环造成。



上图是采用SandForce消费级主控的海盗船FORCE GT系列到目前为止的3种PCB图片,可以看到SandForce由于把除了固件开发外的所有权利下放,每个合作的厂商都可以自己画板,自己搭配料件,并不需要完全按照公版做产品,因此市面上采用SandForce主控的产品内部PCB样式形形色色,料件的质量就更不用说了,各不相同,正所谓一分钱一分货,连“名牌”都可能卖出比山寨更便宜的价格。

正因为权利下放,所以SandForce在固件里做了很多加密的手脚,不然结局就是类似市面上随处可见的JMF,Indilinx,SMI等的量产工具。 SandForce的主控在固件之上还加上了很多验证,合作厂商都有自己的证书文件,特定的配置文件(成千上万个颗粒不同搭配。。。),甚至固件里还做了手脚,类似微软卖windows一样,分成黄金版/白金版/限速版之类,如何发放则又取决于合作厂商的主控“消化能力”。

即使没有大容量外置缓存,消费级的SandForce的SSD依然有掉电损坏FTL的风险,因为SandForce的SRAM比较大。



我们知道,SRAM即使再大,也不可能大过外置缓存的,那么大容量的SSD,FTL是如何调用的呢?按照SandForce的性能来说,他的FTL应该是非常大的,没有个256MB ~ 512MB估计还真不够。由于SandForce没有外置缓存,所以SRAM则取代了这部分功能来存放FTL,不过由于SRAM容量限制,只能存放一小部分映射表,所以SandForce把映射表分成了2层,第一层表的单位比较大,而第二层的细表就是纯Page映射,这样的话随机性能还是能够保证在相当高的水准,加上主控支持压缩,可以掩盖掉大部分NAND相比DRAM的延迟。正是如此,SandForce对能够的压缩数据性能出众,对不能够压缩的数据则表现的比较郁闷,因为不但传输的数据量相等,还要加上读取2层映射表时候闪存的延迟。(所以说在优化得当的固件下,闪存的速度对SandForce主控表现也是有相当影响的)

闪存的稳定性有内存好么?答案是否定的,所以SandForce对闪存的质量也是有一定要求的。可是现实往往是残酷的,由于主控出色的保护机制,搭配质量稍低的闪存也成为了可能,大打价格牌的同时,闪存的品质决定了成本,结果你懂的。

总结:SandForce“变砖”什么造成?  1. 闪存差,FTL的地方坏块了,RAISE技术都修不回来。(RAISE理论上最多修1整个块的错误,闪存差的时候可能会出现整个plane都挂的问题,直接嗝屁了)2.主控碰到bug了,固件很复杂,支持的产品线拉得长,没有验证完全所有的应用场合。3.关键时候掉电引起FTL写入的时候出错,下次上机读取不出正确数值造成死循环,锁盘等。SandForce企业级的固件相比消费级的“牢固”很多,不但在周边硬件上下了猛料,固件里更是加上了很多保护逻辑,因此不太可能出现“变砖”。


----------------------------

附加:本文中多次提到FTL,那么FTL到底是什么? 这是SSD的性能表现最关键的一个层面,里面包含了无数开发技术人员的心血。

FTL层就是一个让闪存完全模拟传统硬盘操作的软件层,有了FTL层,闪存设备才能使用,FTL层的效率直接影响设备的性能表现。



FTL层起到的作用主要有下面几部分:

1. 性能的表现:

A. 逻辑和物理地址的映射 (Mapping)
B. 垃圾回收的处理。 (GC)
C. 增量空间的供给。 (OP)
D. 冷/热数据的交换处理。
E. Plane,芯片,通道间的并行处理。
F. 任务请求的排序。
G. 缓冲区的管理。
等等。。。。

2. 稳定性的表现:

A. 坏块的管理。
B. 磨损平衡的处理。
C. 掉电恢复的处理。
D. ECC的处理。
等等。。。。

3. 其他功能的表现:

A. 加密的处理。
B. 压缩的处理。
C. 重复数据删除的处理。
等等。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点评

好贴,学了很多东西  发表于 2012-5-21 08:18
2#
donnyng 发表于 2012-5-2 00:29 | 只看该作者
画得很好,没笑。
3#
donnyng 发表于 2012-5-2 01:01 | 只看该作者
非常期待下一回。对SF还是比较感兴趣。
4#
yanleiberg 发表于 2012-5-2 03:02 | 只看该作者
如果以后有了一个类似ATA的,但是是针对SSD的标准传输协议,那么是不是就是说我们不再需要FTL层了,因为到时候就是由操作系统来接管了。
5#
overthink 发表于 2012-5-2 07:23 | 只看该作者
很多朋友用笔记本,而且也没有出现掉电的情况,就直接变8MB了。

没有掉电,INTEL也丢FTL,这个有点诡异吧
6#
Tommy1992 发表于 2012-5-2 08:02 | 只看该作者
假如有双主控那么是不是就会好很多?
个人遐想
7#
neeyuese  楼主| 发表于 2012-5-2 08:24 | 只看该作者
Tommy1992 发表于 2012-5-2 10:02
假如有双主控那么是不是就会好很多?
个人遐想

成本不允许,再说你这个还不如加上掉电保护呢。
8#
quietist 发表于 2012-5-2 10:29 | 只看该作者
  
  FTL就是个很敏感的工作界面?

  还是结构越简单,可靠性相对越高、麻烦相对越少啊。

  另外有几个小白问题:
——SF的2层映射能节省多少缓存需求?
——intel的内控架构允许加入类似M4的重校验/重映射设计么?
——Plextor的Nor挂按理比例应该很低?

  
9#
quietist 发表于 2012-5-2 10:30 | 只看该作者
yanleiberg 发表于 2012-5-2 03:02
如果以后有了一个类似ATA的,但是是针对SSD的标准传输协议,那么是不是就是说我们不再需要FTL层了,因为到 ...

  
  专用传输协议标准的话,岂不是又很麻烦的了?

  要么除非是通用传输协议标准吸收这部分,而且还不仅是传输问题吧?
  
10#
老七 发表于 2012-5-2 12:10 | 只看该作者
厂商帖吧?个人还是十分欣赏SF的压缩功能,那叫一个快

评分

参与人数 2活跃度 -6 收起 理由
counterflow -1 - -
ggxuelei -5 贼喊捉贼?我看你才是厂商来的小马甲吧。浴.

查看全部评分

11#
武英仲 发表于 2012-5-2 14:10 | 只看该作者
OCZ 悲催的返厂经历过了
12#
badaa 发表于 2012-5-2 14:34 | 只看该作者
直接接块手机电池吧 便宜得很电路也简单
13#
大雄来啦 发表于 2012-5-2 15:50 | 只看该作者
badaa 发表于 2012-5-2 14:34
直接接块手机电池吧 便宜得很电路也简单

手机电池的性能特点和电脑用的备份电池要求没有交集吧
14#
gmx168 发表于 2012-5-2 15:54 | 只看该作者
我是来看画的,画得不错~~~没笑
15#
aibo 发表于 2012-5-2 16:01 | 只看该作者
画的很好啊

另外Micron的门牌号不错,关键时刻可以救回来很多。
16#
FreezeRush 发表于 2012-5-2 19:53 | 只看该作者
非常期待下一回。对SF还是比较感兴趣。
17#
einstein86 发表于 2012-5-2 20:12 | 只看该作者
笑喷了(笑)

浴室大的文章一直都是那么深入浅出,值得好好学习一下。
18#
我叫Jonn.yR 发表于 2012-5-2 20:27 | 只看该作者
这些问题,归根结底还是固态硬盘的结构问题吧,那未来会不会在结构方面有所改变或者出现另外一种跟固态硬盘结构不一样但是非常稳定的存储设备呢?
19#
Sumesis 发表于 2012-5-2 20:43 | 只看该作者
浴大的講解深入淺出, 圖示也把生硬的東西鮮活了! 讚!
20#
netwalker 发表于 2012-5-2 20:53 | 只看该作者
先收藏了,慢慢研究
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部