错误处理 - 📘 第 8.21(续)- Sanitize 操作补充说明 (第431页)
NVME2.0协议解读 1 min read

错误处理 - 📘 第 8.21(续)- Sanitize 操作补充说明 (第431页)

Blog Author

我们继续对 NVMe Base Specification Revision 2.0b 第 8.21 节中关于 Sanitize 操作的最后部分内容进行中文深入解析,帮助你全面掌握 数据不可恢复清除机制的控制逻辑和行为模型。


📘 第 8.21(续)- Sanitize 操作补充说明


🔧 No-Deallocate After SanitizeNODMMAS 字段解析

Sanitize 命令中:

  • 设置了 No-Deallocate After Sanitize = 1(即不在清除后释放 LBA 绑定);
  • 控制器的 NODMMAS 字段值为 10b(表示:支持后处理的媒体修改行为);

则说明:

除了执行正常的 Sanitize 操作之外,控制器还会执行额外的“媒体修改操作”,其目标是:
确保所有 LBA 内容变得“可读但非原始”,以配合数据完整性电路的校验机制(Integrity Circuits)。


📌 此额外媒体操作的完成时机:

必须在以下两项完成前完成:

  1. 控制器发送 Asynchronous Event Notification
  2. Sanitize Status Log Page 中报告“清除完成”。

⛔ 所以从主机角度观察,sanitize 操作真正“完成”要晚于 Sanitize 命令本身返回成功状态!


🧱 Overwrite 模式的清除机制(Figure 474)

NVMe Overwrite 模式并不是简单地写一遍全 0 或 FF,而是支持复杂的 多轮写入 + 反转策略

参数 意义说明
OIPBP Overwrite Invert Pattern Between Passes:是否在每轮写入之间反转写入模式
Pass Count 写入的总轮数(每一轮是完整 LBA 数据区域的一遍重写)
Pass Number 当前是第几轮写入(用于判断写入模式)
Overwrite Pattern 第 1 次写入的固定字节模式(如全 FFh

🧪 示例:OIPBP = 1,Pass Count = 3

第几轮写入 写入内容(每字节)
第 1 次 0xFF(Overwrite Pattern)
第 2 次 ~0xFF0x00(第一次取反)
第 3 次 ~0x000xFF(第二次再取反)

若 OIPBP = 0,则每一轮都写同样的模式(不反转)。


🛡️ Metadata 清除说明:

  • 如果开启 PI(Protection Information),写入内容也会影响 PI Metadata 区域
  • 具体是否覆盖 metadata,需要依赖 I/O Command Set 的规定(见相关章节)。

📝 命令结构补充说明

要发起 Sanitize 操作,主机需要:

  • 填写 Admin 命令结构中的:
  • Dword 10:Overwrite Pattern 控制字段(OIPBP, Pass Count)
  • Dword 11:实际写入的数据模式
  • 设置 Sanitize Type = Overwrite / Crypto Erase / Block Erase
  • 可选设置:
  • Allow Unrestricted Sanitize Exit
  • No-Deallocate After Sanitize

⚠️ 执行流程小结

graph TD
A[主机发起 Sanitize 命令] --> B{参数合法?}
B --  --> F[命令失败,Sanitize 不执行]
B --  --> C[控制器启动后台清除操作]
C --> D{是否需要后处理媒体修改?}
D --  --> E1[清除完成后立即上报完成状态]
D --  --> E2[清除后继续媒体修改,之后再上报完成]

❗ 补充注意事项:

  • 即使控制器处于只读模式(如 S.M.A.R.T. Critical Warning 触发),也必须尝试执行 Sanitize;
  • 在 Sanitize 期间,可能会限制其他 Admin 命令(特别是 Format NVM 相关),详见第 5 章;
  • 不同类型的介质(如 NAND)对多轮写入操作的耐久性有影响,需合理选择 Pass Count。

🧠 总结关键词:

  • NODMMAS:是否在清除后还需执行“媒体可读性修复处理”;
  • No-Deallocate After Sanitize:保留原有 LBA 分配关系;
  • Overwrite Sanitize:支持自定义 Pattern、多轮写入、逐轮反转;
  • 清除完成的 标志信号是异步的,需要读取状态日志页确认

是否需要我为你整理一份专属的「Sanitize 全流程执行图 + 命令字段注释表」或者「完整中文速查表」?也可以直接导出为 PDF 文件方便查阅~