如何应对固态硬盘的突然死机?

lucywang 技术 2019年3月15日发布
Favorite收藏

导语:在这篇文章中,我们将向你说明为什么一个允许良好和各方面都正常的固态硬盘驱动器会在存储空间剩余98%-99%的情况下突然死机。

在前一篇文章《开启Trim功能后,如何使用工厂访问模式对固态硬盘驱动器进行映像》一文中,我们提到了固态硬盘驱动器的可靠性一面。不过凡事都有两面性,你可能知道,固态硬盘用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也完全与普通硬盘一致。被广泛应用于军事、车载、工控、视频监控、网络监控、网络终端、电力、医疗、航空、导航设备等诸多领域。NAND闪存可以支持有限数量的写入操作。当今的消费类固态硬盘驱动器的制造商通常会在保修期结束前保证大约150到1200个写入周期。根据这些事实,我们可以得出这样的结论:NAND闪存单元可以支持多达1200个写入周期,而固态硬盘驱动器实际上可以在不考虑其他条件的情况下支持超过1000次完整的重写。然而,这么说也并不完全正确。因为特定的使用条件和载荷类型会使固态硬盘驱动器的磨损速度明显快于厂家声明的耐久性。在这篇文章中,我们将向你说明为什么一个允许良好和各方面都正常的固态硬盘驱动器会在存储空间剩余98%-99%的情况下突然死机。不过即使固态硬盘驱动器已损坏或未出现在系统中,我们也会提供一些可以恢复数据的工具和方法的建议。

NAND Flash Endurance (闪存耐久性)的期望与现实的差距

一些主要的固态硬盘制造商,如critical和三星,为他们的最新型号提供了5年的有限保修,且这些制造商指定了在保修期内可以写入固态硬盘驱动器的最大数据量。

NAND Flash写入前必须擦除, Block擦除1次后再写入1次称为1次PE Cycle,Endurance (耐久性)用于衡量NAND Flash的擦写寿命的可靠性指标;Endurance指的是在一定的测试条件下NAND Flash能够反复擦写数据的能力,即对应NAND Flash的PE Cycle。

例如,以下就是Crucial和三星对他们最新型号的固态硬盘系列的保修承诺。

微信截图_20190126045525.png

目前已经有独立研究人员证实了制造商所声称的耐久性评级,如果你感兴趣,可以阅读这份TechReport的技术测试报告,虽然此测试的时间已经很久远了,但其中的发现与最近3DNews.ru正在进行的测试是一致的。TechReport的Geoff Gasior总结说:

这意味着你买的产品,如果实现制造商保证的写入操作规格,并不值得炫耀。

3DNews对多个固态硬盘型号进行的长期测试也表明,即使是中等水平的固态硬盘驱动器,在闪存开始出现降级迹象之前,也可以重写数千次。但是,这并不能解释为什么有些用户的固态硬盘驱动器在保修期内,仅在固态硬盘重写了20到30次(这意味着还剩余98%-99%的额定寿命)后,就无法正常运行。

之所以会出现这样的疑问,是因为如今的TLC闪存不可能在明显降级的情况下,还会支持数千个写入周期。实际上,典型的存储单元可以在开始电荷泄漏(charge leakage)之前,始终支持20到50个写入或擦除周期。低质量的NAND闪存可能不太稳健,而SLC缓存可以改善写入周期数,但它们的最终结果是相同的:NAND存储单元会在保留电子方面变得不太可靠。

那么,这些数字与制造商宣称的1000多个写入周期的耐久性有什么关系呢?这些固态硬盘驱动器到底有多可靠呢?让我们试着找出答案。

说到磨损,每次写入操作都会对NAND单元造成轻微的损坏。与在MLC或TLC模式下写入多位数据相比,在SLC模式下写入一位数据需要的电压更低。因此,与没有SLC缓存的低成本固态硬盘驱动器相比,配备SLC缓存的基于MLC或TLC的固态硬盘驱动器可以承受更高的负载(尤其是随机写入)。在一些涉及频繁写入小块数据的情况下,使用SLC缓存与不使用SLC缓存的固态硬盘驱动器相比,提高固态硬盘的耐久性可以多达100倍。

1.jpg

经过一定数量的重写或擦拭周期之后,NAND存储单元不再能够进行大规模存储并开始泄漏电子。不过此时,人们仍然可以在磨损的存储单元中写入数据,一旦数据被写入后,就可以立即被成功读取。然而,由于存储单元此时已开始泄漏电子,所以那些成功被读取的数据仅仅能保留很短一段时间。

让我们做一个假想的测试,将“1 0 0”写入TLC单元。写入完成后,假如我们可以立即读取该存储单元,那电荷数量仍然是“1 0 0”。接着,我们关闭固态硬盘驱动器,让它静置两天,然后再打开电源并读取该单元,此时电荷仍为“1 0 0”。现在让我们再次关闭电源,这次静置时间是两周。在两周后读取电荷后,电荷则在处于“0 1 0”水平。再过两周,电荷是“0 0 1”,接着再过两周,电荷数量则彻底变为 “0 0 0”。

NAND存储单元所使用的电池在一定的重写周期后所保持电荷的时间,是计算耐久性等级的主要标准。目前大多数NAND闪存制造商规定,电池必须在高温下(例如在数据中心环境中) 至少保持两周的满电荷状态。如果是非高温状态,比如家里的常温下,则要求的时间更长。在规定的满电荷状态内,是允许某些存储单元泄漏电荷的,但这种位错误必须通过ECC纠正。

在现实使用场景中,两周是个可怕的挑战,有信誉的制造商使用的NAND芯片一般大大超过了这个最低标准。

Data Retention(数据保存力)是用于衡量写入NAND Flash的数据能够不失真保时间的可靠性指标,一般定义为在一定的温度条件下,数据在使用ECC纠错之后不失真保存在NAND Flash中的时间;影响数据保存力最大的两个因素是擦写次数和存储温度。通常情况下企业级SSD盘的Data Retention都是遵循JEDEC的JESD218标准,即40℃室温下,100%的PE Cycle之后,在断电的情况数据保存力时间要求达到3个月。

2.png

以上的图片来自全球顶级评测网站AnandTech关于固态硬盘数据保存状态的测试,如果NAND闪存芯片没有通过固态硬盘 oem的严格要求,会发生什么情况?对低成本的低标准NAND芯片的需求从未缺少过。 诸如Kingspec,Smartbuy或Silicon Power等三线制造商会批量购买这种廉价芯片,生产可靠性各不相同的低成本固态硬盘驱动器。或者,制造商仍然可以通过增加存储块的数量,以在他们的固态硬盘中使用非标准的NAND芯片,此时,他们所宣称的固态硬盘的单元容量就较低,例如会主动说明是480 GB而不是500 GB。另一种选择(主要由critical /Micron采用)是在MLC模式下使用低于标准的TLC芯片,这大大提高了可靠性。将最后两种方法结合的一个很好的例子是Crucial BX300,这是一个3D MLC驱动器,号称具有480 GB的存储容量。

高温会对NAND闪存保留电荷的能力产生很大的负影响,随着温度升高,电子会加速地逃离浮栅(Floating Gate)。该存储单元失去电荷后,数据就变得不可读。 闪存(Flash)技术利用的场效应管就是浮栅场效应管,FLASH技术是采用特殊的浮栅场效应管作为存储单元。这种场效应管的结构与普通场管有很大区别。它具有两个栅极,一个如普通场管栅极一样,用导线引出,称为“选择栅”;另一个则处于二氧化硅的包围之中不与任何部分相连,这个不与任何部分相连的栅极称为“浮栅”。通常情况下,浮栅不带电荷,则场效应管处于不导通状态,场效应管的漏极电平为高,则表示数据1。编程时,场效应管的漏极和选择栅都加上较高的编程电压,源极则接地。这样大量电子从源极流向漏极,形成相当大的电流,产生大量热电子,并从衬底的二氧化硅层俘获电子,由于电子的密度大,有的电子就到达了衬底与浮栅之间的二氧化硅层,这时由于选择栅加有高电压,在电场作用下,这些电子又通过二氧化硅层到达浮栅,并在浮栅上形成电子团。浮栅上的电子团即使在掉电的情况下,仍然会存留在浮栅上,所以信息能够长期保存(通常来说,这个时间可达10年)。由于浮栅为负,所以选择栅为正,在存储器电路中,源极接地,所以相当于场效应管导通,漏极电平为低,即数据0被写入。擦除时,源极加上较高的编程电压,选择栅接地,漏极开路。根据隧道效应和量子力学的原理,浮栅上的电子将穿过势垒到达源极,浮栅上没有电子后,就意味着信息被擦除了。为此,ACELab进行了一项对照测试,试图测试高温对NAND电池维持电荷能力的影响。该测试在旧的SLC芯片上进行,且该芯片能够支持480℃以上的温度。如果温度超过这个极限,则芯片就会受到物理损坏(直接烧毁)。值得注意的是,如今的MLC和TLC芯片在明显低于480℃的温度下就开始出现错误位。出于这个原因,一些专家更喜欢使用加热的电线切割PCB上的芯片而不是直接拆焊。

虽然我们只需要3.3V来读取数据,但我们必须提供12V来擦除或重写编程单元。另外要将电子置于NAND单元中,则需要使用更高的电压。随着更高电压的使用,存储单元之间的绝缘层开始降解,随着时间的推移,更多的电子就会穿破被讲解的绝缘隔离层逸出。隔离层越薄,降解的速度就越快,每个存储单元可以支持的重写或擦除周期就越少。

三星840EVO SSD 是三星2013年7月推出了新一代固态硬盘产品。与在之前的840系列固态硬盘相比,840 EVO除了在主控、闪存、缓存、固件方面进行了更新换代外,性能有了很大提升,另外容量方面最大容量翻倍至1TB,最小120GB容量。三星Evo 840是最早一批基于平面TLC闪存的固态硬盘驱动器之一。当时的制造商在估计TLC闪存存储单元的寿命时过于乐观。可实际结果我们刚刚也讲到,隔离层降解速度明显快于他们的设想。有时,电池甚至无法承受20到30次正常的重写或擦除周期,更糟的是,在断电状态下泄漏电荷的速度非常快。许多用户在使用Evo 840驱动器存储完数据后会关闭电源,但仅仅30天后,他们就发现其中的数据丢失了。虽然三星通过固件升级解决了这一问题,但这无助于根除其中存在的硬件问题。三星的第二次修复则是添加了一个后台进程,通过定期擦除或重写受影响的NAND存储单元的内容,来“刷新”存储的稳定性。毋庸置疑,该修复方法势必会对驱动器的实际耐久性产生负面影响,且电池的磨损速度比计划的要快得多。结果,三星Evo 840获得了史上最差固态硬盘驱动器的名声。

后来制造商吸取了三星的教训并在新型号中停止使用了平面TLC存储器,转而使用更加强大的3D NAND。以下就是3D TLC NAND与平面MLC和平面TLC类型的对比图:

3.png

目前还有其他一些技术被用来延长NAND存储单元的寿命,例如,许多制造商将驱动器的部分容量用作SLC缓存。在SLC中将数据写入TLC单元中需要的电压越低,对单元的隔离层的负面影响就越小。如果固态硬盘驱动器用于频繁写入小数据块(例如数据库)的环境,那么SLC缓存非常有效。不断改进的固件可以大大减少写入放大,从而减少存储相同数量数据所需的擦除或重写周期。

注:写入放大(Write amplification,简称WA)是闪存和固态硬盘(SSD)中一种不良的现象,即实际写入的物理数据量是写入数据量的多倍。

为什么固态硬盘驱动器在没有S.M.A.R.T.错误的情况下会运行失败?

S.M.A.R.T.,全称为“Self-Monitoring Analysis and Reporting Technology”,即“自我监测、分析及报告技术”。是一种自动的硬盘状态检测与预警系统和规范。通过在硬盘硬件内的检测指令对硬盘的硬件如磁头、盘片、马达、电路的运行情况进行监控、记录并与厂商所设定的预设安全值进行比较,若监控情况将或已超出预设安全值的安全范围,就可以通过主机的监控硬件或软件自动向用户发出警告并进行轻微的自动修复,以提前保障硬盘数据的安全。除一些出厂时间极早的硬盘外,现在大部分硬盘均配备该项技术。S.M.A.R.T.错误,其实是硬盘的硬件错误。有这个错误的,有些是可以修复的,有些不可以,最好的办法是备份数据换硬盘。比如坏道,少量的是可以修复的。通过MHDD、diskgenius等软件可以修复。C7,一般也可以修复,这是数据线或接口磨损导致的。一般换线可以解决。其它方面的,比如底层的错误,大量的坏道,就无法修复了,得换硬盘。  

由于固态硬盘驱动器的设计目的是就是为了支持其整个存储容量的多次重写,所以制造商必须保证他们的驱动器可以完成数百甚至数千次完整重写。写入总字节数(TBE)参数随着每一代产品的叠加而增长,但一味地追求容量,反而会出现更多问题,我们已经看到多个固态硬盘驱动器在宣称的稳定期,比以往更早得暴露出问题。比如,当固态硬盘驱动器出现故障是,其剩余的额定寿命竟然还长达99%,且SMART属性也完整无缺。这很难归因于制造缺陷或NAND闪存的问题,因为这些容量通常约占设备的2%。除了制造缺陷之外,为什么固态硬盘会在SMART属性完好无缺的情况下而过早失效呢?

每个固态硬盘驱动器都有一个专用的系统区域,系统区域包含固态硬盘固件(用于引导控制器的微代码)和系统结构。系统区域的范围大小在4到12 GB之间。在该区域中,固态硬盘控制器存储为一种“模块”系统结构。模块包含基本数据,例如转换表,处理媒介加密密钥的微代码部分,SMART属性等。

如果你读过前一篇文章《开启Trim功能后,如何使用工厂访问模式对固态硬盘驱动器进行映像》一文中

如果你已经阅读了我们之前的文章,就会知道固态硬盘驱动器会主动地重新映射逻辑块的地址,将相同的逻辑地址指向不同的物理NAND存储单元,以便降低磨损并提高写入速度。不幸的是,目前在大多数固态硬盘驱动器中,系统区域的物理位置必须保持不变。这意味着它不能被重新映射,系统区域内至少有部分模块不适用于降低磨损的需要。这说明,单个写入操作(每个操作都修改转换表的内容)的恒定流程将一次又一次地写入相同的物理NAND单元。这就是为什么我们不完全相信像3DNews这样的耐久性测试的原因。这样的测试依赖于以恒定的流程写入固态硬盘驱动器的数据流,从而以不切实际的方式加载固态硬盘驱动器。另一方面,用户的固态硬盘驱动器经常会遇到小型写入操作(有时每秒数百次),在这种模式下,实际写入固态硬盘驱动器的数据非常少,因此TBW寿命耐用性非常有限,但现实的情况是,系统区域经常被严重地重写。

这样的使用场景将导致系统区域过早被磨损,而在任何SMART参数中没有任何有意义的指示。因此,具有98%-99%剩余寿命的完全健康的固态硬盘很可能会突然从系统中消失。此时,固态硬盘控制器无法对存储在系统区域中的基本信息执行成功的ECC校正。 固态硬盘从计算机的BIOS中消失,或显示为空或未初始化或未格式化的媒介。

如果固态硬盘驱动器未出现在计算机的BIOS中,则可能意味着其控制器正处于Bootloop(无限重启)中。而在Bootloop中,会一直发生以下循环过程:控制器试图将NAND芯片中的微码加载到控制器的RAM中,然后发生错误,然后控制器重试,然后发生错误……

但是,最常见的故障原因是转换模块中的错误,该模块将物理块映射到逻辑地址。如果发生此错误,固态硬盘将被识别为计算机BIOS中的一个设备。但是,用户却无法访问该信息,此时固态硬盘将显示为未初始化(原始)媒介,或者显示出更小的存储容量(例如实际容量显示为2MB,而不是960GB)。此时,不可能使用任何可用的方法,例如许多未删除、数据恢复工具都无法恢复数据。

通过工厂访问模式恢复数据

如果发生死机的固态硬盘驱动器没有出现在系统中,或者被识别为原始媒体,你仍然可以尝试从该驱动器中恢复信息。不要尝试使用从互联网上下载的数据恢复工具,这些都不能中断引导循环或激活驱动器的工厂访问模式,具体的方法请阅读《开启Trim功能后,如何使用工厂访问模式对固态硬盘驱动器进行映像》一文中。除了将磁盘返回给制造商之外,惟一可以做的就是使用磁盘的工厂访问模式。工厂访问模式内置在所有固态硬盘驱动器中。目前各大厂商的大数据恢复服务和授权服务中心都有工具可以激活工厂访问模式,重建损坏的转换表,读取芯片上的信息。不幸的是,许多销售廉价固态硬盘驱动器的小型oem厂商根本没有任何维修方法,对于他们来说,维护一个设备远比新换一个设备的成本要高的多。所以一分钱一分货是有一定道理的,特别是对电子产品来说。

本文翻译自:https://blog.elcomsoft.com/2019/01/why-ssds-die-a-sudden-death-and-how-to-deal-with-it/如若转载,请注明原文地址: https://www.4hou.com/technology/15925.html
点赞 8
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论