队列模型 - 📘 一、Fabrics 命令的状态码(续) (第114页)
继续深入分析 NVM Express® Base Specification, revision 2.0b 第 103 页,本页主要介绍了与 媒体和数据完整性错误(Media and Data Integrity Errors) 和 路径相关错误(Path Related Status) 相关的状态码。这些错误通常与数据的存储和传输过程中的问题相关。
📘 一、Fabrics 命令的状态码(续)
✅ 状态码清单(91h 到 FFh)
| 代码 | 名称 | 描述 |
|---|---|---|
91h |
Authentication Required | 需要 NVMe 内部身份验证,队列尚未通过身份验证。 |
92h ~ AFh |
保留 | 当前未使用。 |
B0h ~ BFh |
Transport Specific | 与 NVMe 传输相关的特定状态值,定义在相应的 NVMe 传输绑定规范中。 |
注释:身份验证仅适用于除 Connect、Authenticate Send 和 Authenticate Receive 外的所有命令。
🧩 二、状态码解析(Fabrics 命令相关)
1️⃣ 91h – Authentication Required
- 原因:命令需要 NVMe 内部身份验证,但队列尚未通过身份验证。
场景:例如,主机和控制器之间的安全连接尚未建立时,尝试执行命令会失败。
2️⃣ B0h ~ BFh – Transport Specific
- 原因:此范围的状态值是与 NVMe Transport(传输)特定的错误相关,具体定义请参见相关的 NVMe 传输绑定规范。
场景:这些状态码通常与具体的传输协议相关,可能会与网络连接、存储区域网络(SAN)或其他传输协议相关的错误匹配。
📘 二、媒体和数据完整性错误(SCT = 2h)
✅ 状态码清单(80h 到 FFh)
| 代码 | 名称 | 描述 |
|---|---|---|
80h |
Write Fault | 写入故障:数据未能写入介质,通常由于介质故障。 |
81h |
Unrecovered Read Error | 无法恢复读取错误:数据未能从介质中读取。 |
82h |
End-to-end Guard Check Error | 端到端保护检查错误:命令由于保护检查失败而中止。 |
83h |
End-to-end Application Tag Check Error | 端到端应用标签检查错误:命令由于应用标签检查失败而中止。 |
84h |
End-to-end Reference Tag Check Error | 端到端参考标签检查错误:命令由于参考标签检查失败而中止。 |
85h |
Compare Failure | 比较失败:参见 NVM 命令集规范。 |
86h |
Access Denied | 访问被拒绝:由于缺少访问权限,无法访问命名空间或用户数据。 |
87h |
Deallocated or Unwritten Logical Block | 逻辑块已被释放或未写入:参见 NVM 命令集规范。 |
88h |
End-to-End Storage Tag Check Error | 端到端存储标签检查错误:命令由于存储标签检查失败而中止。 |
89h ~ BFh |
保留 | 当前未使用。 |
C0h ~ FFh |
Vendor Specific | 供应商自定义状态码,具体定义由供应商提供。 |
🧩 三、状态码解析(媒体和数据完整性错误)
1️⃣ 80h – Write Fault
- 原因:在写入操作时,数据未能成功提交到存储介质,可能是由于硬件故障或存储介质问题。
场景:例如,在 SSD 或硬盘上执行写入时,介质出现故障导致写入失败。
2️⃣ 81h – Unrecovered Read Error
- 原因:读取数据时发生错误,且无法从存储介质中恢复数据。可能是由于介质损坏或数据损坏导致的读取失败。
场景:例如,读取坏道上的数据或存储区域中数据遭到破坏。
3️⃣ 82h – End-to-end Guard Check Error
- 原因:数据传输过程中的端到端保护检查失败。通常在数据传输过程中使用校验和或其他保护机制确保数据完整性。
场景:例如,数据在传输过程中出现损坏或篡改,导致保护机制检测失败。
4️⃣ 83h – End-to-end Application Tag Check Error
- 原因:数据传输中的端到端应用标签检查失败。应用标签通常用于标识和保护特定数据块。
场景:例如,传输过程中数据的应用标签与预期不匹配,导致检查失败。
5️⃣ 84h – End-to-end Reference Tag Check Error
- 原因:数据传输中的端到端参考标签检查失败。参考标签通常用于数据块的身份验证和校验。
场景:例如,数据传输中的参考标签不一致或无效。
6️⃣ 85h – Compare Failure
- 原因:比较失败。通常在执行数据验证操作时,如果数据与预期结果不匹配,则会报告此错误。
场景:例如,在执行 Compare and Write 操作时,数据比较发现不一致。
7️⃣ 86h – Access Denied
- 原因:由于权限问题,主机无法访问命名空间或数据。这通常涉及安全性检查。
场景:例如,用户没有权限访问某个存储区域或数据被加密保护。
📘 四、路径相关状态码(SCT = 3h)
✅ 状态码清单(00h 到 FFh)
| 代码 | 名称 | 描述 |
|---|---|---|
00h ~ FFh |
路径相关状态 | 指示与命令处理过程中主机与控制器或控制器与命名空间之间的连接相关的状态。 |
注释:在多路径环境中,如果可用,应使用不同的路径重试错误。
🧩 五、路径相关状态码解析
- 状态码含义:这些错误通常发生在 主机与控制器 或 控制器与命名空间 之间的连接问题。例如,网络故障或连接超时可能会导致路径相关的错误。
场景:例如,在多路径存储系统中,连接某个路径失败时,系统可能会尝试通过其他路径重新传输命令。
🧠 总结与核心要点
| 状态码 | 说明 |
|---|---|
91h |
Authentication Required:需要进行身份验证。 |
80h |
Write Fault:写入故障,数据未成功写入介质。 |
81h |
Unrecovered Read Error:读取错误,数据未能成功恢复。 |
82h |
End-to-End Guard Check Error:端到端保护检查失败。 |
83h |
End-to-End Application Tag Check Error:端到端应用标签检查失败。 |
80h ~ BFh |
I/O 命令集特定错误:涉及 I/O 命令集中的多种错误,如 区域已满、写入错误 等。 |
00h ~ FFh |
路径相关状态:与命令在主机与控制器之间的路径相关的错误。 |
这些状态码帮助我们理解存储系统中的 数据完整性问题、访问控制问题 和 路径故障问题,并能有效地进行错误排查与恢复。
如果你对某个具体命令或状态码的实际应用感兴趣,或者希望探讨在开发中的错误处理和恢复策略,随时告知!