管理命令集 - 📌 NQN 第二种格式(基于 UUID)解析 (第153页)
我们继续深入分析 《NVM Express® Base Specification, revision 2.0b》第142页,本部分介绍了 NVMe Qualified Names (NQN) 的第二种格式,如何使用 UUID 创建唯一标识符,以及如何进行 NQN 的处理和比较。此外,还讨论了在 Identify Controller 数据结构 中如何使用 NQN 来唯一标识 NVM 子系统。
📌 NQN 第二种格式(基于 UUID)解析
✅ UUID 格式的 NQN
第二种 NQN 格式用于没有命名权限或不需要可解释的字符串时,基于 UUID(通用唯一标识符) 创建一个独特的标识符。该格式包括:
- 字符串
"nqn"; - 字符串
"."(即 ASCII 句点字符); - 字符串
"2014-08.org.nvmexpress:uuid:"; - 一个 128 位 UUID,按照 RFC 4122 定义的格式,表示为
11111111-2222-3333-4444-555555555555。
示例:
"nqn.2014-08.org.nvmexpress:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
此格式通过 UUID 确保每个命名空间或 NVM 子系统的唯一性,特别适合没有明确命名权限或不需要人类可读字符串的场景。
📌 NQN 处理规则
✅ NQN 的比较与处理
NVMe 主机、控制器和 NVM 子系统 对 NQN 进行比较时,直接按二进制字符串进行比较,不进行任何特定于 Unicode 字符集或区域设置的文本处理(例如大小写转换或 Unicode 正规化)。这意味着 NQN 比较时不会受到字符编码、大小写等影响。
处理规则:
- 在输入时(例如,主机软件输入时):
- 主机软件可以根据 Unicode 区域设置对 NQN 进行文本处理(如转换为小写)。
-
控制器在接收到 NQN 时,也可以进行类似的处理。
-
在接收时(例如,主机接收到来自控制器的 NQN):
- 不应进行任何文本处理(例如,不进行大小写转换)。
图示(NQN 处理流程):
| 处理环节 | 操作描述 |
|---|---|
| 主机输入 | 文本处理(例如转换为小写) |
| 控制器输入 | 文本处理(例如转换为小写) |
| 主机接收 | 不应进行文本处理(保持原样) |
| 控制器接收 | 不应进行文本处理(保持原样) |
这种处理方式确保了在不同系统间传输 NQN 时的一致性,避免了由于字符编码或区域设置不同导致的错误。
📌 唯一标识符
✅ NVM 子系统唯一标识符
NVM 子系统的唯一标识符 可通过 NQN 来表示,特别是在 Identify Controller 数据结构 中定义的 NVM Subsystem NQN。如果控制器符合旧版本的 NVM Express 规范,且没有包括 NVM 子系统 NQN,那么可以通过组合 PCI Vendor ID、Serial Number 和 Model Number 来形成唯一标识符。例如:
- 使用 NQN 起始字符串
"nqn.2014.08.org.nvmexpress:"和 PCI Vendor ID、Serial Number 以及 Model Number 来组合生成唯一的子系统标识符。
🧠 教学总结
| 项目 | 说明 |
|---|---|
| NQN 第二种格式 | 基于 UUID 格式的 NQN 适用于没有命名权限或不需要可解释字符串的场景。通过 UUID 来确保命名空间或 NVM 子系统的全球唯一性。 |
| NQN 处理规则 | NQN 比较使用二进制字符串直接比较,不进行区域设置相关的文本处理,确保全球一致性。 |
| 唯一标识符 | NQN 是唯一标识 NVM 子系统的关键,如果不支持 NQN,可以使用 PCI Vendor ID、Serial Number 和 Model Number 的组合来生成唯一标识符。 |
🎯 继续学习与实践建议
- 理解 UUID 的应用:UUID 是确保全球唯一性的常用工具,学习如何在 NQN 中使用 UUID 帮助你在开发系统时保持设备的唯一性。
- 规范化 NQN 处理流程:了解 NQN 的输入和接收处理流程,有助于确保系统间的一致性,避免因文本处理不同而产生错误。
- 使用 NQN 和 PCI 信息生成唯一标识符:理解如何通过 NQN 或 PCI 信息 来唯一标识存储系统,确保设备和命名空间的标识符正确无误。
如果你希望进一步深入探讨 UUID 的具体应用,或在实际项目中如何使用 NQN 进行认证和身份验证,请随时提问!