为什么 SSD 比 HDD 更容易突然出现故障?

为什么 SSD 比 HDD 更容易突然出现故障?

现代个人电脑往往使用以下两种类型的内部存储设备:1 2

  • 硬盘驱动器(HDD)将数据存储在涂有磁记录介质的旋转磁盘上,这项技术可以追溯到 20 世纪 60 年代。HDD 非常便宜,容量非常大,但速度相对较慢,机械性能也非常脆弱(它们有许多部件移动得非常快,必须保持彼此非常近的距离,不能发生碰撞)。
  • 固态硬盘(SSD) 将数据存储在半导体存储器中,可以是闪存 EEPROM 或(有时)电池供电的 DRAM 或 SRAM。SSD 比 HDD 速度更快,而且由于没有易碎的移动部件,机械强度更高,但每字节的价格也更贵,容量没有 HDD 那么大,而且长期存储的可靠性较低(因为它们的存储单元往往会随着时间的推移慢慢泄漏电子)。

这两种存储设备都会随着时间的推移而磨损,最终出现故障。然而,众所周知,SSD 总是或几乎总是会突然出现灾难性故障,而且几乎没有任何提前警告;相比之下,HDD 故障通常是渐进的,在很长一段时间内性能会缓慢下降,并且会越来越频繁地偶尔出现需要 fsck/chkdsk 才能解决的读/写错误,这为备份驱动器内容和更换新驱动器提供了充足的时间。

尽管 HDD 和 SSD 都具有明显的灾难性故障模式(例如驱动器控制器或接口故障),但对于这两种类型的驱动器,可以预料到大多数驱动器磨损故障至少会逐渐发生,其方式与 HDDS 的经典方式相同,驱动器逐渐变慢,越来越频繁地遇到读/写错误,并且随着时间的推移积累坏扇区(对于 HDD)或内存单元(对于 SSD),直到性能下降最终破坏对驱动器运行至关重要的某些部件。

这两种类型的驱动器都以相同的方式处理介质的磨损部分,即将数据从死扇区或单元悄悄地重新映射到工厂为此目的而留出的备用扇区/单元的内部存储中;3即使这个备用存储已经耗尽,坏扇区或内存单元开始对使用驱动器的操作系统可见,驱动器上使用的文件系统仍然可以通过将这些存储介质的坏部分重新映射到未使用的、仍然良好的存储空间来提供第二层保护。

事实上,人们可能会天真地认为 HDD 在某种程度上更多的与 SSD 相比,它更容易发生突发性灾难性故障,原因如下:

  • HDD 具有 SSD 所没有的灾难性故障模式(例如主轴电机故障或卡住,或者磁头与磁盘碰撞)。
  • 对于 HDD 来说,最低粒度级别是扇区(驱动器上的一个块,大小为 512 字节,或在某些较新的驱动器上为 4 KiB),而 SSD 则使用单个存储单元(仅存储一到四个通过对每个磁盘进行检查,可以更细粒度地处理存储介质的好坏部分,并更有效地利用驱动器上剩余的好空间。

然而,尽管如此,HDD 通常会逐渐失效,而 SSD 通常会一次性失效。为什么?这可能与以下情​​况有关:大多数 SSD 在出现故障之前就开始重新分配频繁使用的内存单元的写入操作,从而延迟最初几个彻底的单元故障(但即便如此,人们仍会期望对即将发生的驱动器故障有相当多的提前预警,因为单个电池故障是统计性的而不是确定性的,因此不可能消除早期预警电池故障尾部)?


1:显然,计算机不是受限制的而不是只使用其中一种;只要有足够的连接器来连接两个或更多内置驱动器,就完全可以在同一台计算机中同时安装 HDD 和 SSD。这可以用于充分利用两种存储设备的优势,较小、较快的 SSD 可容纳操作系统和磁盘访问受限的应用程序,较大但较慢的 HDD 可容纳大量数据和非磁盘访问受限的应用程序。

2:一些较新的驱动器同时使用这两种数据存储方法,将大型、慢速的磁性驱动器与较小的内置固态缓存相结合;它们的工作原理与脚注 1 中描述的设置相同,但通常在操作系统中显示为单个驱动器,而不是两个驱动器,并且通常不为用户提供指定文件应写入磁性存储器还是固态存储器的选项。此类驱动器通常称为聚变驱动器,不要与同名的星际飞船推进方法混淆。

3:这就是为什么现代 HDD 和 SSD 在新品时通常报告没有坏扇区或单元,尽管驱动器制造本身存在缺陷,也是为什么坏扇区/单元只有在驱动器使用寿命后期,即驱动器内部的备件库存耗尽后,才会开始对操作系统可见。

答案1

SSD“猝死”的典型原因可以归因于其运作的功能要求。@LawrenceC 在他们的回答中简要提到了这一点,但我将在这里进行详细说明。

所有 SSD 都需要特定的元数据才能运行:

  • 控制器固件建立基线功能
  • 微代码更新以改变功能或加密密钥
  • Flash 转换层使用的耗损均衡数据
  • SMART 属性等

以上所有内容都存储在所谓的系统区域NAND 闪存。ACELab 的数据恢复专家 Roman Morozov 提供了有关Elcomsoft 上的一篇精彩博客文章(重点是我的):

系统区域包含 SSD 固件(用于启动控制器的微代码)和系统结构。系统区域的大小在 4 到 12 GB 之间。在此区域中,SSD 控制器存储称为“模块”的系统结构。模块包含基本数据,如转换表、处理媒体加密密钥的微码部分、SMART 属性等等。

具有讽刺意味的是,转换表正是实现磨损均衡的机制——不能磨损均衡:

如果您读过我们之前的文章,您就会知道 SSD 驱动器会主动重新映射逻辑块的地址,将相同的逻辑地址指向各种物理 NAND 单元,以平衡磨损并提高写入速度。不幸的是,在大多数(所有?)SSD 驱动器中,系统区域的物理位置必须保持不变。它无法重新映射;磨损均衡不适用于系统区域中的至少一些模块。这反过来意味着,持续不断的单独写入操作(每个操作都会修改转换表的内容)将一遍又一遍地写入相同的物理 NAND 单元……

由于 NAND 系统区域无法进行磨损均衡,因此其承受的压力比数据区域大得多。频繁的小写入会加剧这种情况:

此类使用场景将导致系统区域过早磨损SMART 参数中没有任何有意义的指示。因此,一个完好无损、剩余使用寿命为 98-99% 的 SSD 可能会突然从系统中消失。此时,SSD 控制器无法对存储在系统区域中的重要信息执行成功的 ECC 更正。SSD 从计算机的 BIOS 中消失或显示为空/未初始化/未格式化的介质。

如果控制器无法启动固件,则可能表现为驱动器完全损坏:

如果 SSD 驱动器未出现在计算机的 BIOS 中,则可能意味着其控制器处于引导循环中。在内部,会发生以下循环过程。控制器尝试将 NAND 芯片中的微代码加载到控制器的 RAM 中;发生错误;控制器重试;发生错误;等等。

但更多的时候,数据会因为超光速传输失败而消失:

然而,最常见的故障点是将物理块映射到逻辑地址的转换模块中的错误。如果出现此错误,SSD 将被识别为计算机 BIOS 中的设备。但是,用户将无法访问信息;SSD 将显示为未初始化(原始)介质,或者会显示明显较小的存储容量(例如 2MB,而不是实际容量 960GB)。

因此,SSD 的突然故障一直是由于写入耐久性有限造成的,但驱动器元数据,而不是用户数据

答案2

你的大部分观点都是正确的,但以下几点可能可以解释你的问题:

SSD 仅一般来说比 HDD 更快。容量最大的硬盘实际上在速度上可与中低端 SSD 相媲美。硬盘带宽往往与数据密度成正比。SSD 上的写入速度实际上可能比读取速度慢两倍。

SSD 和 HDD 的磨损问题和故障模式截然不同。一般来说,HDD 的磨损发生在启动和停止,以及连续数小时的旋转中,并且它们的磨损只能从统计上预测——一些驱动器可以轻松使用其保修期的 5-10 倍。旋转本身不会损坏 HDD,但一些受旋转影响的随机磨损事件可能会发生,也可能不会发生。大多数当前 SSD 每个块的写入周期数有限,当它们达到该数量时,它们很快就会失效。企业级 SSD 的评级是保修期内每天的最大总写入次数。

SSD 和 HDD 都包含一个内部故障预测系统。在 Linux 中,带有 smartctl 实用程序的 smartmontools 可以从这两种驱动器类型的大多数驱动器中读取 SMART 数据。有些 SSD 需要 nvme-cli 包来提取类似的数据。Windows 中应该有类似的工具,一些磁盘供应商也有自己的工具。使用这些工具,您通常可以在驱动器发生故障之前很久就检测到即将发生的故障。有些 SSD 实际上会告诉您它们的确切运行状况(以迄今为止使用的写入周期的百分比表示)。在这些情况下,新的 SSD 会告诉您它多久会失效。对于 HDD,它无法告诉您它何时会失效,它只能告诉您随机故障事件是否已经发生并且驱动器已经发生故障。

根据我的经验,硬盘有时会在灾难性故障发生前一两周发出警告,而这种警告的形式是不可纠正的 I/O 错误越来越多。通常情况下,磨损点的薄片会漂浮在内部并划伤驱动器的其余部分,它会在数据丢失开始之前几乎没有任何警告就突然发生故障。磁盘主轴故障很少见,很可能是制造缺陷。

大多数 SSD 都使用一种称为“磨损均衡”的技术,即通过将其数据复制到另一个块,然后将新数据写入其中,重新使用一段时间未写入的块,这样所有块的写入次数都相同。这延长了驱动器的使用寿命,但结果是,在驱动器发生故障之前,您不会收到任何错误,而且故障均匀且同时发生。它不会出现“磨损点”。但驱动器从一开始就知道它距离故障有多近,如果您询问它,它会告诉您。

正如已经指出的那样,如果您摔倒 HDD,这可能会立即损坏它。因此,说 SSD 立即发生故障而 HDD 会发出警告有点不合逻辑。当然,两者都可能因控制器故障而突然发生故障。

SSD 不是以单个位为单位工作的。它们以块为单位工作,通常为 2048 字节,当你写入一个块时,它必须找到一个未使用的块,或者必须重新定位一个使用不足的块,然后替换它。SSD 实际上是较少的细粒度的磁盘,所以你也搞反了。但实际上块大小是一个实现细节,而且多年来磁盘的块大小也变得越来越大。

答案3

自 IDE 驱动器问世以来,甚至可能更早,每个硬盘驱动器基本上都是一个嵌入式计算机平台 - 它具有 CPU、RAM、运行固件,固件通过总线/端口与 PC 通信,还通过内部 I/O 接口与设备电子设备通信。固件可能使用存储介质本身来存储内容或使用电路板上的额外闪存。

除非您以某种方式“进入”这台嵌入式计算机,否则实际上无法判断硬盘发生故障的确切原因,除非您有明显的外部迹象,例如噪音/盘片刮擦声。对于 SSD,您没有这些。SMART 会为您提供一些抽象的信息和线索,但不会像“崩溃转储”那样在发生故障时进行分析。

现在,在制造和维修过程中使用的设备上可能存在隐藏/未记录的服务接口,但如果没有大量的逆向工程工作,没有人会知道它们以及如何使用它们,并且这些技术可能因制造商、型号、系列等的不同而有很大差异。

然而,尽管如此,HDD 通常会逐渐出现故障,而 SSD 通常会一次性出现故障。

鉴于上述情况,老实说,我们真的只能推测。以下是一些推测信息:

  • NAND 的工作原理与盘片大不相同。NAND 在使用前需要擦除,擦除块比数据块大,写入会磨损闪存。这些都不适用于盘片。

  • 与 HDD 连接到相同接口的 SSD 无法诚实地说明其工作方式,它们需要看起来像盘片 HDD。

  • 因此,以上两点意味着 SSD 固件从一开始就必须更加复杂。更复杂 = 发生故障的可能性更大。

  • 如果设备固件在启动时遇到不良情况而无法启动,或者根本无法启动,则会导致设备死机。总体而言,这种情况发生的几率会增加,因为我们从 SSD 固件正在执行的额外任务中推断出额外的复杂性。

  • 造成这种情况的可能具体原因有很多,除非能够访问设备级诊断/服务接口,否则您无法进一步了解特定故障。

  • 理想情况下,没有进一步写入能力的 SSD 只会变成只读。不幸的是,这里没有标准,也没有任何东西阻止 SSD 制造商发布固件,如果没有足够的空闲闪存空间来支持额外的写入,固件就会放弃并拒绝启动。

  • 确实存在一些“合法”的情况,固件除了“死机”别无选择 - 例如,如果整个闪存芯片死机或停止响应(大多数 SSD 都有许多这样的情况),如果 SSD 的内部 RAM 损坏,如果 SSD 用于启动或执行基本任务的内部闪存上的各种固定位置死机,等等。这些情况是否比盘式驱动器的同类情况更频繁发生?谁知道呢。我甚至不知道去哪里获取这些数据。

我听说过有些 SSD 在传统 HDD 的跳线针脚上安装了 UART。当设备无法启动时,那里可能会输出一些信息。

但总的来说,主要的问题是,对于大多数设备,我们根本无法判断 SSD 突然停止启动的原因,并且考虑到 SSD 固件必须更加复杂,并且新技术的上市时间至关重要,我们不应该对彻底失效的频繁发生感到惊讶。

相关内容