写点什么

什么是 SSD Sanitize 数据擦除技术?

用户头像
怀瑾握瑜
关注
发布于: 2021 年 06 月 25 日
什么是SSD Sanitize数据擦除技术?

安全擦除 SSD 中存储的数据,在一些场景下是非常必要的功能。譬如你手中有一块 NVMe SSD 想重新用做其他业务,或者设备折旧退役,为保证之前 SSD 的数据不被泄露,安全擦除 SSD 中的数据,避免通过某些工具恢复旧数据成为必需。

企业级 SSD 一般都支持通过 Secure Erase(安全擦除)来擦除 SSD 的数据,也有一些企业级 SSD 支持增强用户数据安全擦除技术— Sanitize 来实现 SSD 数据擦除。

Sanitize 如何实现数据安全擦除

Sanitize 从字面上理解就是销毁、清除的意思。Sanitize 支持 Block Erase(块擦除)、Overwrite(覆写)、Crypto Erase(密钥删除)三种类型擦除操作。

  • Block Erase:从 block 级别,也就是从物理上彻底擦除 SSD 上的数据

  • Overwrite:用特定的数据格式覆盖用户数据。Overwrite 擦除方式最早在 HDD 上应用,HDD 的数据是存储在带有磁性涂层的金属盘片上,写入新数据可以通过覆写的方式完成。NVMe SSD 时代,协议演进到 NVMe1.3 引入 Sanitize 功能,Overwrite 擦除方式也得以沿用。然而,SSD 的存储介质与 HDD 不同,读取和写入的基本单位不是 HDD 的比特(bit)或字节(byte),而是一个页(Page),新的数据写入需要先擦除(Erase),然后再写入(Program),擦除必须按照块(Block)为单位进行,这无形中会引入额外擦除,从而降低 SSD 寿命。

  • Crypto Erase:对于支持自加密功能的 SSD,通过删除密钥,使加密数据不可识别

和 Sanitize 相关的 nvme 标准命令有两条,一条是向 SSD 发起 Sanitize 操作nvme sanitize,一条是nvme sanitize-log来获取日志解析执行情况。我们会在后面的文章通过实例进行演示。nvme-sanitize 可以通过-a 参数的指定,选择要执行哪种类型操作。

Sanitize 和 Secure Erase(Format)的主要区别

Sanitize 和 Secure Erase 都可以安全地将 SSD 设备上存储的数据删除。对 SSD 进行 Sanitize 或 Secure Erase 操作后,硬盘上的所有数据将被永久删除,且无法恢复。但这两种方法有一些显著区别,二者首先通过不同 nvmecli 命令触发,sanitize 的主要作用就是用来清除用户数据,而 Secure Erase 主要通过 format(格式化)修改 SSD 一些配置参数,修改参数的同时会对数据进行删除。

Secure Erase 通过nvme format命令操作,而 format 主要有如下作用:

  • 用来修改 LBA sector size,通过 LBAF(-i 参数)的指定来修改 Sector 大小,如企业级 NVMe SSD 如果支持可变 Sector size 功能,就可以根据支持的 sector 大小,如 512、520、4096、4104 、4160 字节进行格式化

  • 用来修改保护信息(Protection Information)类型,Type1/Type2/Type3,PI 信息是放在元数据的前 8 位还是后 8 位

  • Format 可以针对多命名空间或单个命名空间进行操作,sanitize 是对整个命名空间操作;

  • Format 也支持 User Data Erase(用户数据删除)和 Cryptographic Erase(密钥删除),这两种类型的 format 方式也就是 sanitize 的 Block Erase 和 Crypto Erase 的擦除操作。

Sanitize 执行时间为什么比 Format 短?

Sanitize 主要包含两个阶段,向 SSD 发 sanitize 命令,后台异步执行擦除操作,也就对应两个时间 completion of the Sanitize command(命令的完成)和 completion of the sanitize operation(操作的完成),命令的完成不代表操作的完成。对于用户而言,sanitize 命令是在异步完成用户数据删除前返回完成,所以看到的执行时间相比 format 更短,format 必须彻底删除数据后才返回完成。

当 Sanitize 异步数据擦除都彻底执行完后,会发一个异步事件去通知主机。

如何查看 Sanitize 的执行情况?

NVMe 1.4 中对 sanitize status log 结构定义如 Figure238(截取部分),log 会记录最近一次 sanitize 执行情况。 用户可通过 nvme sanitize-log 查询 sanitize 执行进度。


如下是对 PBlaze6 6926 系列执行 sanitize block erase 后关键状态 log 输出和解析举例。

Sanitize status log 关键字段解析:

  • Sanitize Progress(SPROG)字段代表 sanitize 完成进度,是指异步从 NAND 彻底删除数据的进度,以 65536 为分母,65535 即进度完成 100%。

  • Sanitize Status(SSTAT)字段记录最近一次完成的 sanitize 状态,0x101 代表[2:0]中第 0 bit 置“1”,即说明最近一次 sanitize 执行成功。

  • Sanitize Command Dword 10 Information (SCDW10)字段代表完成 Sanitize – Command Dword 10 的操作类型,0x2 即 0x010b,完成的是 Block Erase sanitize 操作

使用 Sanitize 有什么注意事项吗?

Sanitize 会彻底删除用户数据,所以执行 Sanitize 前一定要 备份重要数据!

另外 Sanitize 在执行过程中会中断一些不被允许执行的命令,像 admin、format、upgrade 等绝大多数命令都不允许在 sanitize 过程中执行。如果执行 Sanitize 命令过程中遇到异常掉电,上电后会自动重新完成 sanitize 操作。

 

相关参考:

  • NVMe Express Base Specification Revision 1.4 

 

发布于: 2021 年 06 月 25 日阅读数: 8
用户头像

怀瑾握瑜

关注

小跑步跟上IT圈儿技术的无尽迭代 2021.06.16 加入

6年+闪存存储行业Technical Communication,在结合文学、设计、信息技术的跨学科TC行业深耕

评论

发布
暂无评论
什么是SSD Sanitize数据擦除技术?