安全擦除SSD中存储的数据,在一些场景下是非常必要的功能。譬如你手中有一块NVMe SSD想重新用做其他业务,或者设备折旧退役,为保证之前SSD的数据不被泄露,安全擦除SSD中的数据,避免通过某些工具恢复旧数据成为必需。
Memblaze推出的PBlaze5系列SSD支持通过Secure Erase(安全擦除)来擦除SSD的数据,而全新一代PBlaze6 PCIe 4.0 SSD系列支持增强用户数据安全擦除技术—Sanitize来实现SSD数据擦除。
内容概览:
1. Sanitize如何实现数据安全擦除
2. Sanitize 和Secure Erase的主要区别
3. Sanitize执行时间为什么比Format短?
4. 使用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参数的指定,选择要执行哪种类型操作。
nvme sanitize命令
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大小,如新一代PBlaze6系列延续上一代PBlaze5 920系列可变Sector size功能,支持 512/520/4096/4104 和 4160字节(扩展可以参考PBlaze5 920系列NVMe SSD—可变Sector Size管理);
• 用来修改保护信息(Protection Information)类型,Type1/Type2/Type,PI信息是放在元数据的前8位还是后8位(扩展可以参考企业级数据链路保护是什么?);
• format可以针对多命名空间或单个命名空间进行操作,sanitize是对整个命名空间操作;
• format也支持User Data Erase(用户数据删除)和Cryptographic Erase(密钥删除),这两种类型的format方式也就是sanitize的Block Erase 和Crypto Erase的擦除操作。
nvme format命令
Sanitize主要包含两个两个阶段,向SSD发sanitize命令,后台异步执行擦除操作,也就对应两个时间 completion of the Sanitize command(命令的完成)和completion of the sanitize operation(操作的完成),命令的完成不代表操作的完成。对于用户而言,sanitize命令是在异步完成用户数据删除前返回完成,所以看到的执行时间相比format更短,format必须彻底删除数据后才返回完成。
当Sanitize异步数据擦除都彻底执行完后,会发一个异步事件去通知主机。
NVMe 1.4中对sanitize status log结构定义如Figure238(截取部分),log会记录最近一次sanitize执行情况。 用户可通过nvme sanitize-log查询sanitize执行进度。
如下是对PBlaze6 6926系列执行sanitize block erase后关键状态log输出和解析举例。
Sanitize status log关键字段解析:A
• 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在执行过程中会中断一些不被允许执行的命令,像admin、format、upgrade等绝大多数命令都不允许在sanitize过程中执行。如果执行Sanitize命令过程中遇到异常掉电,上电后会自动重新完成sanitize操作。
• NVMe Express Base Specification Revision 1.4
• PBlaze5 920系列NVMe SSD—可变Sector Size管理
• 企业级数据链路保护是什么?