错误处理 - 📄 第 8.21(续)- Sanitize 状态监测与失败恢复机制 (第432页)
我们继续深入中文解析 NVM Express® Base Specification Revision 2.0b 第 8.21 节的尾段内容 —— Sanitize 状态监测机制与失败恢复流程,帮助你掌握 “清除过程的进展跟踪、结果上报与故障处理”的核心机制。
📄 第 8.21(续)- Sanitize 状态监测与失败恢复机制
🔍 Sanitize Status Log Page:状态日志页的功能
该日志页(详见 5.16.1.25 节)记录:
- 当前是否有清除(Sanitize)任务在执行;
- 清除操作的具体参数(Sanitize 类型等);
- 最近一次 Sanitize 的完成状态;
- 各种类型 Sanitize 的 预计所需时间;
- 一个重要的全局标志位:Global Data Erased。
✅ Global Data Erased 位
用于表示 NVM 子系统是否仍可能残留用户数据:
1:表示用户数据已全部不可恢复(已执行成功的清除);0:表示用户数据可能仍然存在。
🕘 Sanitize 状态日志页的更新时机:
- 控制器上电准备完成前初始化(详见 3.5.3 / 3.5.4);
- Sanitize 命令完成前更新状态;
- 清除任务真正完成时(包括异步事件上报前);
- 清除过程执行中建议定期更新,用于让主机可轮询查看进度。
⏳ 主机对进度的查看建议:
- 主机可轮询
Sanitize Status日志页来查看清除进度; - 但应避免过度查询(建议每几分钟一次),以免影响 Sanitize 本身的执行效率。
✅ Sanitize 操作完成后的行为:
若 Sanitize 成功,则:
- 设置
Global Data Erased = 1; - 更新日志页;
- 发出 异步事件通知(Asynchronous Event Request 命令):
| 字段 | 值 |
|---|---|
| Log Page Identifier | 81h(Sanitize Status) |
| Async Event Info | Sanitize Operation Completed 或 Sanitize Operation Completed With Unexpected Deallocation |
| Async Event Type | 110b(I/O 命令特定状态) |
- 所有控制器恢复原有的电源管理行为(若清除期间暂停)。
📖 补充建议:
主机在接收到异步事件后,应:
使用
Retain Asynchronous Event = 0读取 Sanitize 状态日志页,清除异步事件记录。
❌ 如果 Sanitize 操作失败,该怎么办?
所有控制器将采取如下动作:
- 所有清除期间禁止执行的命令会返回错误状态码:Sanitize Failed;
-
直到满足以下条件之一,才能恢复正常操作:
-
主机重新启动一个成功的 Sanitize 操作;
- 主机使用 “退出失败模式”操作(Exit Failure Mode) 来清除失败状态。
✅ 协议支持要求总结:
若控制器宣称支持 Sanitize 命令,则必须同时支持:
| 功能 | 说明 |
|---|---|
| Sanitize Status 日志页 | 状态追踪与进度可视化 |
| 异步事件:Sanitize Operation Completed | 清除成功时触发 |
| 异步事件:Sanitize Completed With Unexpected Deallocation | 若支持 Sanitize Config 特性则还需支持此事件(表示发生了未预期的地址释放) |
| Exit Failure Mode 操作 | 用于从失败状态中手动恢复(如清除失败后) |
🧠 总结核心逻辑:
flowchart TD
A[主机发出 Sanitize 命令] --> B{参数合法?}
B -- 否 --> F[命令失败,状态不更新]
B -- 是 --> C[控制器后台执行清除]
C --> D[更新 Sanitize Status 日志页]
D --> E[完成后发出 Async Event]
E --> G{是否成功?}
G -- 是 --> H[Global Data Erased = 1]
G -- 否 --> I[系统进入 Sanitize Failed 状态]
I --> J[主机可选择重新清除或执行 Exit Failure Mode]
是否需要我为你整理一个「Sanitize 整体执行状态机图 + 状态日志字段中文速查表」?也可按你需求生成 PPT 或 PDF 学习资料。随时告诉我你的需求~