特性配置 - 深入分析:Sanitize 命令的工作原理 (第295页)
深入分析:Sanitize 命令的工作原理
概述
Sanitize 命令用于启动数据清除操作(如块擦除、加密擦除、覆盖擦除)。此操作可以确保数据在存储设备中被完全删除,以避免数据泄露。所有的 Sanitize 操作都是在后台执行的,即命令完成并不表示擦除操作的完成。该命令涉及到多个控制器和子系统的协作,确保整个存储系统在进行数据清除时的一致性和安全性。
关键操作和行为
- 多域支持:
-
如果 NVM 子系统支持多个域,并且由于子系统的划分导致
Sanitize命令无法启动擦除操作(例如,域分割情况),则Sanitize命令会中止,并返回错误状态Asymmetric Access Inaccessible或Asymmetric Access Persistent Loss。 -
控制器行为:
-
当擦除操作开始时,所有控制器应执行以下操作:
- 清除任何未完成的擦除操作事件(例如
Sanitize Operation Completed或Sanitize Operation Completed With Unexpected Deallocation)。 - 更新擦除状态日志。
- 中止所有不允许在擦除操作进行时执行的命令,并返回状态
Sanitize In Progress。 - 中止正在进行的设备自检操作。
- 暂停自主管理的电源状态管理活动。
- 释放所有打开的流标识符。
- 清除任何未完成的擦除操作事件(例如
-
退出擦除失败模式:
-
如果没有正在进行擦除操作,并且最近的擦除操作没有失败,那么设置擦除动作为
001b(即退出失败模式)的Sanitize命令将完成,并返回成功完成的状态,不执行其他操作。 -
失败后的恢复:
- 如果擦除操作失败,所有控制器应中止任何不允许在擦除操作期间执行的命令,并返回状态
Sanitize Failed,直到成功恢复或重新启动新的擦除操作。 -
在失败模式下的恢复:
- 不限制完成模式:如果上次失败的擦除操作是在不限制完成模式下开始的,恢复需要主机发出新的擦除命令,可以选择限制或不限制完成模式,或者选择退出失败模式的动作。
- 限制完成模式:如果上次失败的擦除操作是在限制完成模式下开始的,恢复需要主机继续以限制模式发出新的擦除命令。
-
擦除类型支持:
-
在
Identify Controller数据结构中的Sanitize Capabilities字段指示控制器支持的擦除操作类型,包括:- 是否支持
No-Deallocate After Sanitize位(即在擦除成功完成后,是否修改介质)。 - 是否禁止
No-Deallocate After Sanitize位的功能。
- 是否支持
-
禁止的擦除操作:
- 如果选择了不支持的擦除操作类型,控制器会中止命令并返回状态
Invalid Field in Command。 -
如果启用了持久内存区域(Persistent Memory Region),擦除命令将被禁止,并返回状态
Sanitize Prohibited While Persistent Memory Region is Enabled。 -
固件激活与重置:
- 如果正在进行固件激活(包括重置),控制器将中止任何
Sanitize命令。
命令完成
在 Sanitize 命令完成时,控制器会向 Admin Completion Queue 发送一个完成队列条目,指示命令的执行状态。此过程确保了命令的顺利执行,或者在发生错误时提供详细的错误信息,帮助主机软件进行相应的处理。
总结
Sanitize 命令的设计注重数据清除的严格控制与系统的安全性。通过提供多种失败恢复机制和不同模式的支持,确保擦除操作能够在发生故障时得到适当处理,并在整个 NVM 子系统中保持一致性。对于主机来说,理解这些机制非常重要,尤其是在管理多个控制器和处理擦除失败的情况下。