我测试了四家厂商的四块 NVMe SSD——其中有一半在断电时会丢失已 FLUSH 的数据(2022)

对消费级 NVMe SSD 的测试显示,有些硬盘即使操作系统已经发出 FLUSH 命令并收到数据已安全存储的回复,仍会在断电后丢失最近写入的数据。该线程点名了在这些持久性检查中失败或通过的具体型号,探讨了固件和控制器设计如何导致厂商在数据是否已提交这件事上“撒谎”,并将消费级硬件与使用电容进行断电保护的企业级硬盘作对比。评论者还提出了关于标准合规、市场中假货和缩水 SSD,以及当存储设备不可靠时文件系统和应用程序能现实做到什么程度来保护数据的法律与实践问题。

测试的硬盘与结果

  • 最初的推文测试了四块 NVMe SSD;其中两块在报告 FLUSH 完成后仍丢失了数据。
  • 在线程后面的部分,出现了更大的测试列表(当时总共测试了 12 块):
    • 通过 flush 测试的硬盘:
      Samsung 970 Evo Plus 2TB、WD Red SN700 1TB、Crucial P2 250GB、Samsung 980 250GB、WD Black SN750 1TB、WD Green SN350 240GB。
    • 失败的硬盘(flush + 断电后丢失数据):
      SK Hynix Gold P31 2TB(特定固件版本)、Sabrent Rocket 512GB(基于 Phison)。
  • 评论者指出,随着更多硬盘被测试,“一半”的标题已经过时了(当时是 2/12,而不是 2/4),而且测试来自 2022 年初。

Flush 语义、PLP 与固件行为

  • NVMe FLUSH 按照设计应当保证,所有先前的写入在完成前已经落到非易失性介质上。
  • 讨论区分了两种情况:
    • 诚实地延迟完成,直到数据真正安全。
    • 在数据仍在易失性缓存中时就提前声称完成,也就是“撒谎”。
  • 讨论强调,这不是电源失效电容(power-loss capacitors)本身失效的问题,而是违反了 flush 合约。
  • 企业级 SSD 通常使用断电保护(PLP)电容;消费级硬盘大多没有。
  • 有人认为,如果硬盘无法安全地遵守 FLUSH(或因极小的 flush 被过度折腾),它应该降速或返回错误,而不是撒谎。

文件系统、损坏症状与现实影响

  • 多人报告在崩溃或断电后文件变成全零(日志、配置、缓存文件、项目元数据)。
  • 争论这些被清零的文件究竟来自:
    • 行为异常的硬盘忽略了 flush/fua 语义,还是
    • 文件系统行为(ext4 延迟分配、日志模式、TRIM 对未分配空间返回零、fsync 使用不当)。
  • 结论大致是:带日志的文件系统(NTFS、ext4)可以保护元数据,但如果底层硬盘在撒谎,就无法保护数据。

消费级与企业级硬盘,以及性能取舍

  • 一些评论描述了廉价 NVMe SSD 的特点:
    • 短时突发性能测试很强,但持续性能和/或同步性能很差。
    • 高度依赖 SLC 缓存以及 QLC/TLC 行为。
  • 有人建议,关键数据或重同步负载只应使用企业级/带 PLP 的 SSD;另一些人强调,即使是消费级硬盘也不应违反标准。

信任、监管与生态问题

  • 关注点包括:
    • 厂商在评测后替换元件。
    • 对标准的虚假或不完整遵守。
  • 建议包括召回、小额索赔行动、更强的虚假宣传执法,以及由社区维护的“已知良好/已知不良”硬件清单。