特性配置 - 深入分析:Sanitize 命令的工作原理 (第295页)
NVME2.0协议解读 1 min read

特性配置 - 深入分析:Sanitize 命令的工作原理 (第295页)

Blog Author

深入分析:Sanitize 命令的工作原理

概述

Sanitize 命令用于启动数据清除操作(如块擦除、加密擦除、覆盖擦除)。此操作可以确保数据在存储设备中被完全删除,以避免数据泄露。所有的 Sanitize 操作都是在后台执行的,即命令完成并不表示擦除操作的完成。该命令涉及到多个控制器和子系统的协作,确保整个存储系统在进行数据清除时的一致性和安全性。

关键操作和行为

  1. 多域支持
  2. 如果 NVM 子系统支持多个域,并且由于子系统的划分导致 Sanitize 命令无法启动擦除操作(例如,域分割情况),则 Sanitize 命令会中止,并返回错误状态 Asymmetric Access InaccessibleAsymmetric Access Persistent Loss

  3. 控制器行为

  4. 当擦除操作开始时,所有控制器应执行以下操作:

    • 清除任何未完成的擦除操作事件(例如 Sanitize Operation CompletedSanitize Operation Completed With Unexpected Deallocation)。
    • 更新擦除状态日志。
    • 中止所有不允许在擦除操作进行时执行的命令,并返回状态 Sanitize In Progress
    • 中止正在进行的设备自检操作。
    • 暂停自主管理的电源状态管理活动。
    • 释放所有打开的流标识符。
  5. 退出擦除失败模式

  6. 如果没有正在进行擦除操作,并且最近的擦除操作没有失败,那么设置擦除动作为 001b(即退出失败模式)的 Sanitize 命令将完成,并返回成功完成的状态,不执行其他操作。

  7. 失败后的恢复

  8. 如果擦除操作失败,所有控制器应中止任何不允许在擦除操作期间执行的命令,并返回状态 Sanitize Failed,直到成功恢复或重新启动新的擦除操作。
  9. 在失败模式下的恢复:

    • 不限制完成模式:如果上次失败的擦除操作是在不限制完成模式下开始的,恢复需要主机发出新的擦除命令,可以选择限制或不限制完成模式,或者选择退出失败模式的动作。
    • 限制完成模式:如果上次失败的擦除操作是在限制完成模式下开始的,恢复需要主机继续以限制模式发出新的擦除命令。
  10. 擦除类型支持

  11. Identify Controller 数据结构中的 Sanitize Capabilities 字段指示控制器支持的擦除操作类型,包括:

    • 是否支持 No-Deallocate After Sanitize 位(即在擦除成功完成后,是否修改介质)。
    • 是否禁止 No-Deallocate After Sanitize 位的功能。
  12. 禁止的擦除操作

  13. 如果选择了不支持的擦除操作类型,控制器会中止命令并返回状态 Invalid Field in Command
  14. 如果启用了持久内存区域(Persistent Memory Region),擦除命令将被禁止,并返回状态 Sanitize Prohibited While Persistent Memory Region is Enabled

  15. 固件激活与重置

  16. 如果正在进行固件激活(包括重置),控制器将中止任何 Sanitize 命令。

命令完成

Sanitize 命令完成时,控制器会向 Admin Completion Queue 发送一个完成队列条目,指示命令的执行状态。此过程确保了命令的顺利执行,或者在发生错误时提供详细的错误信息,帮助主机软件进行相应的处理。

总结

Sanitize 命令的设计注重数据清除的严格控制与系统的安全性。通过提供多种失败恢复机制和不同模式的支持,确保擦除操作能够在发生故障时得到适当处理,并在整个 NVM 子系统中保持一致性。对于主机来说,理解这些机制非常重要,尤其是在管理多个控制器和处理擦除失败的情况下。