队列模型 - 📘 一、状态码清单(24h 到 FFh) (第111页)
我们继续深入分析 NVM Express® Base Specification, revision 2.0b 第 100 页,此页主要列出了更多的通用命令状态码,并提供了相关的解释。这些状态码涉及 管理员命令、命名空间访问限制、存储空间超出 等情况。
📘 一、状态码清单(24h 到 FFh)
✅ 状态码清单(24h 到 FFh)
| 代码 | 名称 | 描述 |
|---|---|---|
24h |
Admin Command Media Not Ready | 管理员命令需要访问媒体,但媒体未准备好,只有在控制器处于 Controller Ready Independent of Media 模式 下(CC.CRIME 设置为 1)时,才会返回此状态。 |
25h 到 7Fh |
保留 | 当前未使用。 |
80h |
LBA Out of Range | 逻辑块地址超出范围,常见于访问无效的存储区域时。 |
81h |
Capacity Exceeded | 执行命令导致命名空间容量超过,常见于命名空间超出容量限制。 |
82h |
Namespace Not Ready | 命名空间未准备好,可以因多种原因而未能准备好,且该状态不属于 Asymmetric Namespace Access 错误。 |
83h |
Reservation Conflict | 由于命名空间上存在冲突的预定访问请求,导致命令中止。 |
84h |
Format In Progress | 格式化 操作正在进行中,命令需要等待。 |
85h |
Invalid Value Size | 该状态码适用于 Key-Value 命令集,表示值的大小无效。 |
86h |
Invalid Key Size | 该状态码适用于 Key-Value 命令集,表示密钥的大小无效。 |
87h |
KV Key Does Not Exist | 该状态码适用于 Key-Value 命令集,表示指定的密钥不存在。 |
88h |
Unrecovered Error | 该状态码适用于 Key-Value 命令集,表示发生了未能恢复的错误。 |
89h |
Key Exists | 该状态码适用于 Key-Value 命令集,表示指定的密钥已存在。 |
90h 到 BFh |
保留 | 当前未使用。 |
C0h 到 FFh |
厂商自定义 | 供应商定义的状态码,用于特定的错误或状态反馈。 |
🧩 二、状态码解析
1️⃣ 24h – Admin Command Media Not Ready
- 原因:管理员命令需要访问存储介质,但介质没有准备好,通常是因为控制器处于 Controller Ready Independent of Media 模式。
- 常见应用:此错误只会出现在管理员命令中,控制器在没有加载媒体(如磁盘)时返回此错误。
场景:在控制器刚启动时,可能无法访问存储介质(如硬盘未准备好),此时管理员命令会失败,直到控制器准备好。
2️⃣ 80h – LBA Out of Range
- 原因:试图访问的 逻辑块地址(LBA)超出范围。
- 常见应用:当命令指定的 LBA 超出了有效的存储区域时,控制器会返回此错误。
场景:试图读写一个超出命名空间或磁盘实际范围的 LBA。
3️⃣ 81h – Capacity Exceeded
- 原因:执行命令导致 命名空间容量超出,例如写入超出容量的区域。
- 常见应用:当存储设备的 命名空间容量 被超过时,控制器会返回此错误。
场景:例如,写入的总数据量超过了命名空间配置的最大容量。
4️⃣ 82h – Namespace Not Ready
- 原因:命名空间由于某些原因未能准备好,可能是设备初始化未完成、媒体问题或系统配置错误。
- 常见应用:该错误不属于 Asymmetric Namespace Access 错误,但表示访问命名空间时遇到问题。
场景:在设备初始化过程中或命名空间未完全加载时尝试访问。
5️⃣ 83h – Reservation Conflict
- 原因:命令中止是因为存在 命名空间的预定访问冲突。
- 常见应用:在使用 Reservation Acquire 或类似功能时,若命名空间已经被其他操作或命令预定,则会发生冲突。
场景:尝试访问一个已经被锁定的命名空间。
6️⃣ 84h – Format In Progress
- 原因:命名空间正在进行 格式化操作,当前命令不可执行,直到格式化操作完成。
- 常见应用:格式化操作正在进行中时,无法对存储设备进行其他操作。
场景:例如,在执行 格式化命令(Format NVM) 时,该命令需要排队,等待格式化完成。
7️⃣ 85h / 86h / 87h / 88h / 89h – Key-Value 错误状态码
这些状态码属于 Key-Value(KV)命令集,专门处理键值对(key-value)存储模型中的问题。常见的状态码包括:
- 85h:值的大小无效;
- 86h:密钥的大小无效;
- 87h:指定的密钥不存在;
- 88h:未恢复的错误;
- 89h:密钥已存在。
场景:在使用 KV 存储模型 时,常遇到这些错误,通常与数据格式、密钥管理相关。
🧠 总结与关键要点
| 状态码 | 说明 |
|---|---|
24h |
管理员命令媒体未就绪:媒体未准备好,命令无法执行。 |
80h |
LBA 超出范围:访问的逻辑块地址无效。 |
81h |
容量超出:命名空间的容量超出了配置上限。 |
82h |
命名空间未准备好:命名空间因某些问题未准备好。 |
83h |
预定访问冲突:命名空间存在预定冲突,命令被中止。 |
84h |
格式化进行中:格式化操作未完成,无法执行其他命令。 |
85h ~ 89h |
Key-Value 命令错误:键值存储中的常见错误,如密钥、值大小无效等。 |
如果你希望深入了解 Key-Value 命令集 中的错误处理机制,或者如何在 NVMe over Fabrics 中处理类似的命令失败,请告诉我!