安全擦除 SSD 的推荐方法是ATA 安全擦除。大多数 BIOS 通过冻结驱动器来禁用此功能。存在一些绕过 BIOS 冻结的技巧,这些技巧可能有效,也可能无效,具体取决于设置。这使得 ATA 安全擦除难以使用。
修剪功能是否会被滥用来替代安全擦除 SSD 的方案?
可以删除任何现有分区表并创建一个新的 GPT,其中一个 ext4 分区填充整个 SSD。修剪 ext4 分区将导致 SSD 擦除 SSD 上的所有逻辑块,但保留 GPT 和 ext4 超级块的块除外。未分配给逻辑块的保留块将根据定义被擦除。这样,所有物理块要么被擦除,要么包含无用的 GPT/ext4 元信息。
你认为这个计划有什么缺陷吗?
请不要回答应该使用 ATA 安全擦除来安全擦除 SSD,这不是问题。
答案1
让我们这样说吧:
事实是,在大多数(如果不是全部)SSD 中,ATA Secure Erase
这相当于完整的设备 TRIM。除了那些具有“硬件加密”的 SSD,ATA Enhanced Secure Erase
基本上是加密密钥的重新生成。所以毕竟ATA Secure Erase
SSD 并不是那么安全,除非您的 SSD 支持“硬件加密”。
另一方面,fstrim
并不是 TRIM 设备的唯一方法。您可以使用blkdiscard
它来擦除整个块设备(磁盘/分区),包括 GPT 和超级块等。
但是,请注意,某些磁盘中的 TRIM 实现在发出的 TRIM 命令中有一个“要求”,因此只有当该要求得到满足时,驱动器上的所有块才会在 TRIM 之后“读为零”。
例如,Intel 530 SSD 要求 TRIM 块范围“对齐”到 8 个块。因此,当我想使用blkdiscard
或将其擦除时hdparm
,我需要确保没有“最小单位”被两个 TRIM 范围“覆盖”。
使用blkdiscard
,我需要指定-p 33550336
(65528 个块 * 512 字节,其中 65528 = 65535(单个范围内的最大块数)- 65535 % 8),假设起始偏移量为 0(或 [8 * 512] 的倍数),否则将有剩余的块不会被擦除。这可以hexdump
在 TRIM 之后使用类似的东西进行检查。
sda
看看我的 Intel 530 ( ) 和 Silicon Power S70 ( )的区别sdb
:
以及范围不对齐和对齐时的区别:
(由于 65535 * 2 = 131070 不是 8 的倍数,因此最后仍然有剩余,但可以看到 131064 个块 [0x3FFF000 / 512] 被连续擦除。)
别作弊:
PS 我还看到过 SanDisk 的驱动器,其“头部”和“尾部”无法以任何形式使用 TRIM 命令擦除。其“最小单位”是 256 个块。
答案2
如果您担心数据安全,请注意 SECURE_ERASE 和 TRIM 都不会真正擦除闪存单元。SSD 固件会保留已分配单元和未分配单元的列表。TRIM 只是将单元标记为未分配,就像删除文件会导致文件系统将群集标记为未分配一样。不会尝试真正擦除数据。从未分配单元发出的读取请求只会导致设备返回 0x00(或其他位模式),而不会真正检查单元的内容。
目前没有有效的方法可以安全地擦除 SSD。可以直接与固件交互的取证工具可以看到单元的内容。此外,设备上的存储空间比用户空间可访问的存储空间要大。这些额外的单元用于垃圾收集。垃圾收集可以动态重新分配单元,即使在 100% 满的驱动器上仍可工作。SECURE_ERASE 可能(可能会)修剪这些单元,但肯定blkdiscard
不会fstrim
,因为它们使用扇区号来标识要修剪的区域。
安全擦除 SSD 的唯一方法是销毁它。这是大多数医疗、银行和政府部门在处理剩余设备时采取的政策。