NVMe-CLI 2.11版本中NVMe over Fabrics连接失败问题分析
问题现象
在使用NVMe over Fabrics(NVMe-oF)时,用户发现当升级到nvme-cli 2.11版本和libnvme 1.11版本后,无法成功进行发现和连接操作。具体表现为:
- 执行
nvme connect命令时返回"Operation not supported"错误 - 执行
nvme discover命令同样失败 - 问题仅出现在libnvme 1.11版本中,使用libnvme 1.10版本时功能正常
问题根源
经过分析,这个问题与libnvme 1.11版本中的一个关键改动有关。在libnvme的Linux系统接口实现中,当尝试从配置导入密钥时,如果系统没有安装keyutils库,函数会错误地返回ENOTSUPP(操作不支持)错误码。
具体来说,在__nvme_import_keys_from_config函数中,当检测到系统没有keyutils支持时,直接返回了ENOTSUPP,这导致后续的NVMe控制器添加操作失败。
解决方案
针对这个问题,开发团队已经提出了修复方案:
-
正确的做法应该是当系统不支持keyutils时,函数应该返回0(成功),而不是错误码。因为密钥导入功能是可选的,不应该影响基本的NVMe功能。
-
用户也可以选择安装keyutils库来完整支持所有功能。keyutils是Linux内核提供的一个工具库,用于管理内核密钥环。
影响范围
这个问题影响以下组合环境:
- nvme-cli 2.11 + libnvme 1.11
- 任何使用libnvme 1.11版本的工具
而不影响:
- nvme-cli 2.10.2 + libnvme 1.10
- 其他版本组合
临时解决方案
对于急需解决问题的用户,可以采取以下临时方案之一:
- 降级到libnvme 1.10版本
- 手动修改libnvme源代码,将
__nvme_import_keys_from_config函数中的错误返回改为返回0 - 安装keyutils库
长期解决方案
开发团队已经提交了修复补丁,后续版本将会正确处理keyutils缺失的情况。建议用户关注官方更新,及时升级到修复后的版本。
总结
NVMe over Fabrics是现代存储架构中的重要技术,而nvme-cli工具是其管理的关键。这次的问题提醒我们,在开源软件的版本升级过程中,需要特别注意依赖库的变化和兼容性。对于存储管理员来说,保持工具链的稳定性和及时了解已知问题非常重要。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



