最好停止这样做。除非万不得已,否则切勿完全覆盖 SSD/闪存设备以将其擦除。
NVRAM 的可用写入周期数量有限。在某个时候,在对 NVRAM 单元进行足够多的写入后,它将完全停止工作。对于现代版本,我们的估计寿命为 3,000 次写入周期。
此外,内部 SSD 看起来与传统硬盘完全不同。SSD 具有以下独特属性:
备用区域,通常为总闪光量的 8% - 20%,用于磨损均衡目的。最终用户无法使用常用工具写入此备用区域,它是为 SSD 的控制器保留的。但是备用区域可以保存(较少)数量的旧用户数据。
“Flash 转换层”,FTL。您的操作系统如何“看到”SSD(LBA地址)和实际的NVRAM 地址空间布局完全没有关联。
对消费级 SSD 的大量写入可能会使控制器的垃圾收集算法落后,并使控制器进入性能下降的状态。然后会发生什么取决于控制器。在极端最坏的情况下,它无法恢复性能。在更有可能的情况下,随着操作系统发送“修剪”命令,它会慢慢恢复性能。
最后,来自“可靠地从基于闪存的固态驱动器中擦除数据”一文的结论:“为了清理整个磁盘,[...] 软件技术在大多数情况下都有效,但并非全部。”
因此,当您完全覆盖闪存存储时,您可能正在执行有效的安全擦除——但是,您也可能会丢失一些位。而且您肯定会消耗相当多的驱动器预期寿命。这不是一个好的解决方案。
那么,我们应该怎么做呢?
- “最好的”现代驱动器支持特定于供应商的安全擦除功能。例如英特尔的新 320 系列和一些基于 SandForce 22xx 的驱动器,以及许多标榜为具有“全盘加密”或“自加密驱动器”的 SSD。该方法通常类似于以下内容:
- SSD 控制器包含完整的硬件加密引擎,例如使用 AES 128。
- 在第一次初始化时,控制器会生成一个随机 AES 密钥,并将其存储在 NVRAM 中的私有位置。
- 曾经写入驱动器的所有数据都使用上述 AES 密钥加密。
- 如果/当最终用户执行安全擦除时,驱动器会丢弃 AES 密钥,生成一个新密钥,并覆盖 NVRAM 中的旧 AES 密钥位置。假设旧的 AES 密钥无法恢复,这实际上会使旧数据无法恢复。
- 某些驱动器没有上述功能,但支持ATA 安全擦除命令。这是它变得更加棘手 - 基本上我们依靠驱动器制造商来实施“强”安全擦除。但这是一个黑匣子,我们不知道他们实际上在做什么。如果你需要高安全性,那么你不应该依赖这个,或者至少你应该阅读技术文档和/或联系驱动器制造商来验证他们的方法有多安全。关于他们正在做什么/应该做什么的合理猜测是:
- 虽然该驱动器未使用完整的加密密码(如 AES),但它仍在使用广泛的数据压缩算法和校验和以及类似 RAID 的跨多个 NVRAM 组的数据条带化。(所有现代高性能 SSD 都使用这些技术的变体。)这会混淆驱动器上的用户数据。
- 收到 ATA 安全擦除命令后,驱动器会擦除其“闪存转换层”表和其他内部数据结构,并将所有 NVRAM 标记为已释放。
我的个人建议:
如果您只需要对 SSD 进行不安全擦除,请使用制造商的最终用户工具,或使用 ATA Secure Erase 命令,例如hdparm
在 Linux 上。
如果您需要安全擦拭,那么:
- 仅使用通过强 (AES) 加密明确宣传安全擦除的驱动器,并运行制造商的安全擦除。和/或:
- 确保您写入驱动器的所有数据在命中驱动器之前都已加密。通常通过软件全盘加密,例如 PGP Whole Disk Encryption、TrueCrypt、Microsoft BitLocker、BitLocker To Go、OSX 10.7 FileVault 或 LUKS。或者:
- 物理销毁驱动器。