错误处理 - 📘 第 8.21(续)- Sanitize 操作补充说明 (第431页)
我们继续对 NVMe Base Specification Revision 2.0b 第 8.21 节中关于 Sanitize 操作的最后部分内容进行中文深入解析,帮助你全面掌握 数据不可恢复清除机制的控制逻辑和行为模型。
📘 第 8.21(续)- Sanitize 操作补充说明
🔧 No-Deallocate After Sanitize 与 NODMMAS 字段解析
当 Sanitize 命令中:
- 设置了
No-Deallocate After Sanitize = 1(即不在清除后释放 LBA 绑定); - 控制器的
NODMMAS字段值为10b(表示:支持后处理的媒体修改行为);
则说明:
除了执行正常的 Sanitize 操作之外,控制器还会执行额外的“媒体修改操作”,其目标是:
确保所有 LBA 内容变得“可读但非原始”,以配合数据完整性电路的校验机制(Integrity Circuits)。
📌 此额外媒体操作的完成时机:
必须在以下两项完成前完成:
- 控制器发送
Asynchronous Event Notification; 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 次 | ~0xFF → 0x00(第一次取反) |
| 第 3 次 | ~0x00 → 0xFF(第二次再取反) |
若 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 ExitNo-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 文件方便查阅~