科美工业存储论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1653|回复: 1

NVMe SSD如何使用Sanitize命令进行数据销毁?

[复制链接]

35

主题

44

帖子

334

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
334
发表于 2022-10-20 13:13:33 | 显示全部楼层 |阅读模式
NVMe SSD的数据销毁,一个是采用一键销毁的方式进行,一种是软件命令的方式。

一键销毁比较简单,如有产品需求,详细操作方法和产品选型,可以联系我们的技术和销售人员予以解决,本篇来解答下客户如何进行软件命令数据销毁。
NVMe标准的协议,就已经支持数据销毁,这个命令就是Sanitize。

用法
0. 安装nvme-cli
使用如下命令安装:
CentOS:#yum install nvme-cli
Debian/Ubuntu:# apt install nvme-cli

1. 列出NVMe设备List NVMe device(s)
# nvme listNode
                                    SN                   Model                          Namespace        Usage                          Format             FW Rev  
---------------- -------------------- ----------------------------------------    ---------    --------------------------         ----------------       --------
/dev/nvme0n1     XXXXXXXXXXXX         WDS250G2X0C-00L350        1         250.06  GB / 250.06  GB    512   B +  0 B   101110WD
/dev/nvme1n1     XXXXXXXXXXXX         CT500P1SSD8                     1         500.11  GB / 500.11  GB    512   B +  0 B   P3CR010

  
2. 检查Sanitize命令的支持情况Check for Sanitize support:
# nvme id-ctrl -H /dev/nvme1
...  
[2:2] : 0   Overwrite Sanitize Operation Not Supported  
[1:1] : 0x1 Block Erase Sanitize Operation Supported  
[0:0] : 0   Crypto Erase Sanitize Operation Not Supported...

3. 执行命令Perform block erase sanitize operation

# nvme sanitize -a 2 /dev/nvme1

4. 检查状态Check sanitize status‡

# nvme sanitize-log /dev/nvme1
Running:
Sanitize Progress                      (SPROG) :  16704Sanitize Status                        (SSTAT) :  0x2...
Complete:
Sanitize Progress                      (SPROG) :  65535Sanitize Status                        (SSTAT) :  0x101...

5. 验证效果Verify

# dd if=/dev/nvme1n1 bs=8192 status=progress | hexdump0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
...
7470c06000

Footnotes
Sanitize action values are listed as 3-bit binary numbers in the nvme-sanitize man page:
-a <action>::
--sanact=<action>::
   Sanitize Action:
   000b - Reserved
   001b - Exit Failure Mode
   010b - Start a Block Erase sanitize operation   
   011b - Start an Overwrite sanitize operation   
   100b - Start a Crypto Erase sanitize operation

though the included examples use hexadecimal:

# nvme sanitize /dev/nvme0n1 -a 0x02
# nvme sanitize /dev/nvme0n1 --sanact=0x01
As we saw above, plain decimal values are fine too (000b = 0, 001b = 1, 010b = 2, 011b = 3, 100b = 4), though not binary:
# nvme sanitize -a 010b /dev/nvme1
Invalid Sanitize Action

# nvme sanitize -a 0b010 /dev/nvme1
Invalid Sanitize Action

Sanitize mode notes from NVMe Tips and Tricks ww46'18 rev2 by Jonmichael Hands, "Strategic Planner / Product Line Manager for Intel Data Center SSDs":
  • Block Erase – low level block erase on media (physically erase NAND blocks)
  • Crypto Erase - change media encryption key
  • Overwrite – overwrite with data patterns (not good or recommended for NAND based SSDs due to endurance)

There is some confusion as to whether a Sanitize Status (SSTAT) value of 0x101 indicates success or failure; according to ArchWiki, it is the former:
When the command has completed successfully:
Sanitize Progress                      (SPROG) :  65535
Sanitize Status                        (SSTAT) :  0x101
This Google-translated excerpt from Sanitize小知识 offers a possible explanation:
The Sanitize Progress (SPROG) field represents the progress of sanitize completion, which refers to the progress of completely deleting data from NAND asynchronously. With 65536 as the denominator, 65535 means that the progress is 100% complete.
The Sanitize Status (SSTAT) field records the last completed sanitize status, and 0x101 represents that the 0th bit in [2:0] is set to "1", which means that the latest sanitize execution was successful.

参考:Centos 7环境安装Nvme-cli-master方法


回复

使用道具 举报

35

主题

44

帖子

334

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
334
 楼主| 发表于 2022-10-20 13:35:53 | 显示全部楼层
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参数的指定,选择要执行哪种类型操作。
1.JPG


Sanitize 和Secure Erase的主要区别


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字节;

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

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

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


2.JPG

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


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


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


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


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


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



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|科美工业存储论坛

GMT+8, 2024-4-28 00:28 , Processed in 0.071001 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表