配置NVMe over TCP时执行nvme discover命令报错“Failed to write to /dev/nvme-fabrics: Connection refused”求助
我之前配置NVMe over TCP的时候也碰到过类似的连接拒绝问题,结合你给出的环境(客户端Ubuntu 22.04,主机Ubuntu 20.04),给你几个具体的排查方向:
先确认主机端的NVMe-oF服务是否在监听指定端口
登录主机(192.168.1.32),执行以下命令检查8009端口是否被NVMe相关进程监听:ss -tulpn | grep 8009如果没有返回结果,说明主机端的NVMe TCP控制器没正确启动或者端口配置错误。你可以用
nvme list-subsys查看主机上的NVMe子系统,确认是否已经成功导出了NVMe设备;另外别忘了加载nvme-tcp内核模块,执行modprobe nvme-tcp后再用lsmod | grep nvme_tcp确认模块是否加载成功。验证两台机器的网络连通性
在客户端(192.168.1.170)上测试能否访问主机的8009端口:nc -zv 192.168.1.32 8009如果提示连接失败,大概率是防火墙拦截了流量。Ubuntu默认用ufw,你可以在主机端执行
ufw allow 8009/tcp开放端口,同时检查客户端的ufw是否允许出站到这个端口;另外也要确认两台机器在同一个局域网,没有路由或者IP配置错误。检查命令参数和主机端的访问控制
确认你执行的nvme discover参数是否正确:--host-traddr是不是客户端的正确IP?有没有输错?另外,主机端的NVMe子系统可能需要指定允许访问的主机NQN,你可以在主机端用nvme show-subsystem查看子系统的访问控制列表,确认客户端的主机NQN是否被允许接入。核对内核版本兼容性
虽然Ubuntu 20.04的默认内核(5.4)已经支持NVMe over TCP,但有些旧版本可能存在兼容性问题。你可以在两台机器上分别执行uname -r查看内核版本,如果主机端内核版本过低,建议升级到较新的稳定版后再尝试。
备注:内容来源于stack exchange,提问作者Aman Sharma

