管理命令集与操作 - 第157页
我们继续深入解读 《NVM Express® Base Specification, revision 2.0b》第 146 页 的核心内容,聚焦:
📘 图 139(续):Format NVM 与 Sanitize 操作期间允许的 Admin 命令
⚠️ 前提:
- 某些命令在 格式化命名空间 或 执行 Sanitize 擦除操作 时,仅在特定条件下允许;
- 不符合条件的命令将被中止或返回错误码,确保数据完整性与控制器状态一致性。
✅ 允许的 Get Log Page 命令(带限制)
| Log Page 类型 | 附加限制(Format 和 Sanitize 通用) |
|---|---|
| Error Information | LBA 字段需返回 0h |
| SMART / Health Information | ✅ 允许 |
| Changed Namespace List | ✅ 允许 |
| Reservation Notification | ✅ 允许 |
| Asymmetric Namespace Access | ✅ 允许 |
| Sanitize Status | ✅ 允许,主要用于查询擦除进度 |
| Vendor Specific | ❌ Sanitize 操作期间禁止 |
| Persistent Event Log | ❌ Sanitize 操作期间禁止 |
| Boot Partition | ✅ 允许 |
✅ 结论:格式化或清除数据期间,只允许访问不会涉及用户数据内容的日志页。
✅ 其他关键 Admin 命令的状态:
| Admin 命令 | 对 Format 的限制 | 对 Sanitize 的限制 |
|---|---|---|
| Identify | ✅ 允许 | ✅ 允许 |
| Keep Alive | ✅ 允许 | ✅ 允许 |
| NVMe-MI Receive | 只要 MI 规范未禁止就允许 | ✅ 允许 |
| NVMe-MI Send | ✅ 允许 | ❌ 禁止 |
| Sanitize | ✅ 允许 | ❌ 禁止(二次擦除不允许) |
| Set Features | 禁止设置 Namespace Write Protection Config | ✅ 允许 |
| Opcode 7Fh(Fabrics 命令) | 特定条件下允许,见下表 | 见下表 |
✅ Fabrics 命令(Opcode = 7Fh)允许的操作
| Fabrics 命令 | 附加说明 |
|---|---|
| Property Set | ✅ 允许 |
| Connect / Disconnect | ✅ 允许 |
| Property Get | ✅ 允许 |
| Authentication Send/Receive | ✅ 允许 |
| Vendor Specific | ✅ 允许,但 不得影响或访问用户数据 |
🔎 5.1 Abort 命令(Admin Command)
🔧 功能说明:
- 用于终止此前提交到 Admin 或 I/O Submission Queue 的一个特定命令。
- 是一种 "best effort"(尽力而为) 命令 —— 所请求中止的命令可能:
- 已完成
- 正在执行
- 尚未执行(深度排队中)
⚠️ 技术限制:
- 如果需要中止大量命令(超出 ACL 限制),推荐直接删除整个 I/O 提交队列(SQ)再重建,见第 3.7.3 节。
💡 命令结构说明:
- 使用
Command Dword 10字段指定要中止的命令; - 其他命令特定字段(Dword 11~15)均为保留位(Reserved);
- 控制器对并发中止命令数量有限制(见 Identify Controller 中的 Abort Command Limit 字段);
- 若超出限制,控制器可能返回:
Abort Command Limit Exceeded
📘 小结 | 学习重点回顾
| 核心点 | 说明 |
|---|---|
| Format/Sanitize 期间命令管理 | 只允许无害命令(如日志读取、识别、Keep Alive) |
| 命令中止机制(Abort) | 是控制器提供的“软中断”机制,不保证立即中止 |
| ACL 限制处理方式 | 若中止命令太多,建议用“删除 SQ”的方式清空 |
| Fabrics 命令支持 | 需结合 NVMe over Fabrics 规范判断支持性 |
✅ 如果你正在写控制器固件或主机端驱动程序,这些机制都非常重要,特别是在设计错误恢复、断电保护或重启恢复逻辑时。
是否需要我带你逐条解析 Abort 命令的结构和使用方法?还是继续进入 5.2 节开始学习 Identify 命令的详细结构?