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

作者: admin 分类: 科技 发布时间: 2019-03-16 16:07

在前一篇文章《开启 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 和三星对他们最新型号的固态硬盘系列的保修承诺。

目前已经有独立研究人员证实了制造商所声称的耐久性评级,如果你感兴趣,可以阅读这份 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 倍。

经过一定数量的重写或擦拭周期之后,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 个月。

以上的图片来自全球顶级评测网站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 类型的对比图:

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

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

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

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

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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!