特性配置 - 深入分析:Sanitize 命令的行为与限制 (第296页)
NVME2.0协议解读 1 min read

特性配置 - 深入分析:Sanitize 命令的行为与限制 (第296页)

Blog Author

深入分析:Sanitize 命令的行为与限制

概述

Sanitize 命令用于确保存储设备上的数据被彻底清除,以避免数据泄露。它包括不同的操作类型,如块擦除(Block Erase)、加密擦除(Crypto Erase)和覆盖擦除(Overwrite)。此命令会在后台执行,因此命令完成并不意味着数据清除已经完成。所有的 Sanitize 操作必须处理多种条件和限制,以确保设备和数据的安全性。

主要功能与机制

  1. 固件激活与重置的关系
  2. 如果正在进行固件激活且固件需要重置(如控制器级重置、常规重置或 NVM 子系统重置),那么如果激活命令返回以下任一状态代码,Sanitize 命令会被中止,并返回相同的状态代码:
    • Firmware Activation Requires Controller Level Reset
    • Firmware Activation Requires Conventional Reset
    • Firmware Activation Requires NVM Subsystem Reset
  3. 如果固件激活命令已成功完成或返回其他状态代码,则 Sanitize 命令会中止并返回状态代码 Firmware Activation Requires Controller Level Reset。这表示在擦除操作进行时不允许激活新固件。

  4. 擦除操作与固件激活的限制

  5. 在执行 Sanitize 操作时,固件激活是被禁止的。这是为了防止在数据清除过程中可能出现的固件更新问题或数据损坏。

  6. Controller Memory Buffer 支持

  7. 如果 Sanitize 命令通过 Controller Memory Buffer 提交(例如,提交到 Admin Submission Queue 或指定了 Admin Completion Queue 的 Controller Memory Buffer),则是否支持这一功能是实现特定的。如果某些实现不支持 Sanitize 命令在 Controller Memory Buffer 中的处理,且该队列处于 Controller Memory Buffer 中,则控制器应以 Command Not Supported for Queue in CMB 状态中止该命令。

  8. 擦除操作与后台执行

  9. Sanitize 命令总是以后台模式执行。命令的完成并不表示数据清除操作的完成。因此,即使 Sanitize 命令完成,清除操作仍可能在后台继续进行。只有在 Sanitize 操作成功启动时,控制器才会将命令标记为成功完成。如果控制器在启动擦除操作时遇到问题,它将不会修改数据或状态日志。

命令字段解释

  1. 命令 Dword 10(Command Dword 10)
  2. No-Deallocate After Sanitize
    • 如果设置为 1,并且 No-Deallocate Inhibited 位为 0,则在成功完成擦除操作后,控制器不会删除用户数据。如果该位为 0,或者即使该位为 1No-Deallocate Inhibited 位为 1,控制器应删除用户数据。
  3. Overwrite Invert Pattern Between Passes (OIPBP)
    • 如果设置为 1,则在擦写的每个 pass(遍历)之间,擦写的模式会被反转。这个位仅在 Sanitize Action 设置为 011b(即覆盖擦除)时才有效。
  4. Overwrite Pass Count (OWPASS)
    • 该字段指定了覆盖擦除操作需要进行多少次 pass(遍历),即每次擦写多少次数据。默认为 0h,表示进行 16 次覆盖。如果设置为其他值,则会执行对应次数的覆盖擦除操作。

命令完成

  • 命令状态
  • Sanitize 命令完成时,控制器将向 Admin Completion Queue 发送一个完成队列条目,指示命令的执行状态。
  • 如果命令状态不是 Successful Completion,则该命令不会启动擦除操作,且控制器不会修改擦除状态日志或用户数据。

错误状态

  • 固件激活和 Sanitize 操作的冲突
  • 如果固件激活需要控制器重置或其他形式的系统重置,Sanitize 命令会因与固件激活冲突而中止。
  • 如果擦除操作未能启动或由于系统限制,主机可以收到具体的错误代码,如 Sanitize In ProgressSanitize Failed,这需要进行相应的恢复或错误处理。

总结

Sanitize 命令是保证数据彻底删除的重要操作,特别是在进行敏感数据清除时。它在多种设备状态和条件下的行为非常严格,确保在任何情况下擦除操作都能够得到正确执行,同时避免与其他系统操作(如固件更新)发生冲突。