「SSD」- 安全擦除(SE,Secure Earse)

ATA S.E.cure Earse,该命令旨删除从 SSD 中的所有用户数据;

针对没有集成加密的 SSD,该命令将使驱动器恢复到其原始状态。这最初会将其性能恢复到可能的最高水平和最佳(最低数量)可能的 WA,但是一旦 SSD 再次开始 GC,那么性能和 WA 将开始恢复到以前的水平;

许多工具使用 ATA S.E. 命令来重置驱动器并提供用户界面。诸如 HDDerase 等等。部分 GParted 和 Ubuntu live CD 提供一个可引导的 Linux 磁盘实用程序系统,其包括 ATA S.E. 命令;

针对动态加密所有写入的驱动器,可以以另一种方式实施 ATA S.E.。每次完成安全擦除时,它们都会简单地归零,并生成一个新的随机加密密钥。这样就无法再读取旧数据,因为它无法解密。一些具有集成加密功能的驱动器之后也会物理清除所有块,而其他驱动器可能需要将 TRIM 命令发送到驱动器以将驱动器恢复到其原始的开箱状态(否则它们的性能可能会不能最大化);

ATA S.E. 数据擦除失败:某些驱动器可能部分(或完全)无法使用 ATA S.E. 来擦除数据,并且数据仍可从此类驱动器恢复。这可能是设备控制器的问题(Beware – When SECURE ERASE doesn’t erase at all

实施安全擦除

Solid state drive/Memory cell clearing – ArchWiki
ATA S.E.cure Erase (SE) and hdparm

接下来,我们将针对 SSD 进行磁盘擦除操作。

第一步、检查 ATA S.E. 启动

某些 BIOS 通过发出 SECURITY FREEZE 命令,以在启动操作系统前“冻结”驱动器,来阻止 ATA S.E. 命令:

# hdparm -I /dev/sdb | grep frozen
                frozen                                         ---------------- // frozon 表示 ATA SE 被禁用

解锁 frozen 的方法如下:
1)或,将系统休眠,再唤醒,而后 frozen 将自动被解除;(通过该方法,我们得以解决 frozen 问题)
2)或,磁盘热插拔。如果内核崩溃,则主板开启 AHCI 允许插拔,而不会导致内核崩溃;
3)或,使用 USB 转 SATA 来实现实现热插拔;

# hdparm -I /dev/sdb | grep frozen
	not	frozen

第二步、配置安全密码

# hdparm -I /dev/sdb | grep -E 'Security:' -A 8
Security: 
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
	not	frozen
	not	expired: security count
		supported: enhanced erase
	4min for SECURITY ERASE UNIT. 8min for ENHANCED SECURITY ERASE UNIT.

# hdparm --user-master u --security-set-pass p /dev/sdb
security_password: "p"

/dev/sdb:
 Issuing SECURITY_SET_PASS command, password="p", user=user, mode=high

# hdparm -I /dev/sdb | grep -E 'Security:' -A 8
Security: 
	Master password revision code = 65534
		supported
		enabled                      ------------------------------------------ // 已启用
	not	locked
	not	frozen
	not	expired: security count
		supported: enhanced erase
	Security level high

Q:为什么要配置 ATA S.E. 密码?(Purpose of password in SSD Secure Erase
A:保证 SE 能够成功执行,并且保证磁盘在 SE 期间不被访问(除非知道密码)。当设置密码后,仅能进行两个操作:(1)继续执行当前擦除动作;(2)通过设置新密码,以进行新一轮的 SE 操作;

第三步、进行磁盘擦除

// Secure erase,将使用零填充设备
hdparm --user-master u --security-erase p /dev/sdb

// 针对 supported: enhanced erase 设备
// 将使用厂商特定的模式来填充设备
hdparm --user-master u --security-erase-enhanced p /dev/sdb

第四步、禁用安全设置(可选)

当磁盘擦除结束后,Security 将自动进入 not enable 状态。

如果没有进入 not enable 状态,通常设备也没有完全被擦除,并且将处于 lock 状态。需要手动处理:

# hdparm -I /dev/sdx
...
Security:
	Master password revision code = 65534
		supported
		enabled
		locked
	not	frozen
	not	expired: security count
		supported: enhanced erase
	Security level high
	98min for SECURITY ERASE UNIT. 98min for ENHANCED SECURITY ERASE UNIT.
...

# hdparm --user-master u --security-unlock p /dev/sdx

# hdparm --user-master u --security-disable p /dev/sdx	

第五步、检查数据擦除结果

# dd if=/dev/sdb bs=8192 status=progress | hexdump
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
2000036970496 bytes (2.0 TB, 1.8 TiB) copied, 3880 s, 515 MB/s 
244189323+0 records in
244189323+0 records out
2000398934016 bytes (2.0 TB, 1.8 TiB) copied, 3882.36 s, 515 MB/s
1d1c1116000

// hexdump 会将重复的行显示为 *,所以如果未清空,则会显示不同的行;

参考文献

Wikipedia/Write amplification/Secure erase