队列模型 - 📘 一、状态码清单(24h 到 FFh) (第111页)
NVME2.0协议解读 1 min read

队列模型 - 📘 一、状态码清单(24h 到 FFh) (第111页)

Blog Author

我们继续深入分析 NVM Express® Base Specification, revision 2.0b 第 100 页,此页主要列出了更多的通用命令状态码,并提供了相关的解释。这些状态码涉及 管理员命令命名空间访问限制存储空间超出 等情况。


📘 一、状态码清单(24hFFh

状态码清单(24hFFh

代码 名称 描述
24h Admin Command Media Not Ready 管理员命令需要访问媒体,但媒体未准备好,只有在控制器处于 Controller Ready Independent of Media 模式 下(CC.CRIME 设置为 1)时,才会返回此状态。
25h7Fh 保留 当前未使用。
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 命令集,表示指定的密钥已存在。
90hBFh 保留 当前未使用。
C0hFFh 厂商自定义 供应商定义的状态码,用于特定的错误或状态反馈。

🧩 二、状态码解析

1️⃣ 24hAdmin Command Media Not Ready

  • 原因:管理员命令需要访问存储介质,但介质没有准备好,通常是因为控制器处于 Controller Ready Independent of Media 模式。
  • 常见应用:此错误只会出现在管理员命令中,控制器在没有加载媒体(如磁盘)时返回此错误。

场景:在控制器刚启动时,可能无法访问存储介质(如硬盘未准备好),此时管理员命令会失败,直到控制器准备好。


2️⃣ 80hLBA Out of Range

  • 原因:试图访问的 逻辑块地址(LBA)超出范围
  • 常见应用:当命令指定的 LBA 超出了有效的存储区域时,控制器会返回此错误。

场景:试图读写一个超出命名空间或磁盘实际范围的 LBA。


3️⃣ 81hCapacity Exceeded

  • 原因:执行命令导致 命名空间容量超出,例如写入超出容量的区域。
  • 常见应用:当存储设备的 命名空间容量 被超过时,控制器会返回此错误。

场景:例如,写入的总数据量超过了命名空间配置的最大容量。


4️⃣ 82hNamespace Not Ready

  • 原因:命名空间由于某些原因未能准备好,可能是设备初始化未完成、媒体问题或系统配置错误。
  • 常见应用:该错误不属于 Asymmetric Namespace Access 错误,但表示访问命名空间时遇到问题。

场景:在设备初始化过程中或命名空间未完全加载时尝试访问。


5️⃣ 83hReservation Conflict

  • 原因:命令中止是因为存在 命名空间的预定访问冲突
  • 常见应用:在使用 Reservation Acquire 或类似功能时,若命名空间已经被其他操作或命令预定,则会发生冲突。

场景:尝试访问一个已经被锁定的命名空间。


6️⃣ 84hFormat In Progress

  • 原因:命名空间正在进行 格式化操作,当前命令不可执行,直到格式化操作完成。
  • 常见应用:格式化操作正在进行中时,无法对存储设备进行其他操作。

场景:例如,在执行 格式化命令(Format NVM) 时,该命令需要排队,等待格式化完成。


7️⃣ 85h / 86h / 87h / 88h / 89hKey-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 中处理类似的命令失败,请告诉我!