错误处理与诊断 - 第430页
NVME2.0协议解读 1 min read

错误处理与诊断 - 第430页

Blog Author

我们继续深入分析 NVMe Base Specification Revision 2.0b,聚焦第 8.20 与 8.21 节的内容:


📘 第 8.20(结尾)- Rotational Media(旋转介质)与 Spinup 控制

🔧 条件说明:

如果一个 domain 包含旋转介质(如硬盘),且:

  • 该 domain 执行了 NVM Subsystem Reset
  • 并且启用了或禁用了 Spinup Control(电机启动控制)功能;

则行为如下:

Spinup 控制状态 行为描述
Disabled(默认关闭) 所有 Endurance Groups 的旋转轴 立即启动(spinup)
Enabled(启用) 控制器会延迟旋转,直到收到一个设置为 Operational Power State 的 Set Features(Power Management)命令

⚠️ 如果使用 PCIe 传输层,还需要考虑 PCIe Slot Power Control 对电源状态的影响。


📘 第 8.21 - Sanitize Operations(清除操作)


🧩 目的:

执行 Sanitize 操作是为了确保 永久性地销毁 所有用户数据,使其:

  • 无法从非易失性存储器中恢复;
  • 无法通过缓存或控制器内部 RAM 恢复;
  • 不可通过 NVMe-MI 或任何接口访问残留数据。

🔍 清除范围包含:

  • 缓存(包括 CMB、PMR 等);
  • NVM 媒体的已分配与未分配区域;
  • 控制器内存中的所有用户数据副本(不一定包括队列结构);
  • 日志页数据(若日志中可能含有敏感数据,会一并清除或修改);

不包括:

  • RPMB 区域(Replay Protected Memory Block);
  • Boot Partition 引导分区
  • 非用户数据区域的非易失性缓存。

❗ 注意事项:

  • Sanitize 只能在 整个 NVM Subsystem 未划分状态(Undivided)下启动;
  • 一旦启动,不可中止(包括电源重启后仍会继续);
  • 如果中途发生 division(划分事件)或拓扑变化,Sanitize 操作将失败;
  • 操作完成后,部分区域若未被实际覆盖,必须确保不可再访问(实现上的永久屏蔽);
  • 若成功完成,会触发以下之一:
  • Sanitize Operation Completed 异步事件;
  • Sanitize Operation Completed With Unexpected Deallocation 异步事件;
  • Sanitize 状态可通过 Sanitize Status Log Page 查询。

🔧 Sanitize 支持类型(由 SANICAP 指定):

类型 描述
Block Erase 通过存储介质底层的擦除命令清除数据(如 Flash 的擦除块操作)
Crypto Erase 通过替换或销毁加密密钥使原始数据不可恢复(仅适用于加密设备)
Overwrite 将固定或变化的数据模式写入所有用户数据区,覆盖旧数据

🔑 示例:Overwrite 模式行为(将在后续 Figure 474 中定义)

可能会执行一次或多次以下操作:

  • 写入 全 0 / 全 1 / 随机模式 / 指定模式
  • 可指定不同 Passes(遍数)或模式组合;

⚙️ 控制器属性(SANICAP 补充):

字段 作用
NODMMAS(No-Deallocate Modifies Media After Sanitize) 指示:若 Sanitize 操作成功但未触发媒体去分配行为(deallocate),控制器是否依然会修改媒体

💡 补充:

  • Sanitize 命令(参考第 5.24 节)是异步提交,完成并不代表数据已清除;
  • 实际操作是否清除 Controller Memory Buffer 内的 Submission Queue、Completion Queue,是实现相关的,不强制。

🔄 小结:Sanitize 操作流程图

┌────────────┐
│ 主机发起   │
│ Sanitize命令│
└────┬───────┘
     ▼
┌────────────┐
│ 操作类型确认│
│ Block/Crypto/│
│ Overwrite    │
└────┬───────┘
     ▼
┌────────────┐
│ 执行后台清除│
│(可跨重启) │
└────┬───────┘
     ▼
┌────────────┐
│ 更新日志页 │
│ 触发事件通知│
└────────────┘

是否需要我继续讲解下一小节 8.22 Persistent Event Log(持久事件日志)
或者你希望我将第 8.16 - 8.21 小节进行结构化总结或转换为学习笔记 PDF?