问题背景
在我的日常运维工作中,一位用户反馈其 RTX 5090 VPS 无法识别显卡。通过远程连接发现:
设备管理器:NVIDIA GeForce RTX 5090 显示为隐藏设备,且在任务管理器中无法显示GPU。
错误详情:状态码为
Code 45 (Currently, this hardware device is not connected to the computer)。进一步恶化:我在尝试“卸载设备”并重新扫描硬件后,显卡直接从设备列表中消失,任务管理器也完全不显示 GPU。
这种现象在虚拟化环境下通常不是物理损坏,而是底层 PCIe 映射(Passthrough)关系断裂导致的“逻辑掉卡”。
宿主机底层排查
为了确定硬件状态,我直接登录了该 VPS 所在的物理宿主机 DBM-RTX5090-006。
1. 物理总线核实
首先确认显卡是否还在物理总线上。
02:00.0 VGA compatible controller: NVIDIA Corporation Device 2b85 (rev a1)
02:00.1 Audio device: NVIDIA Corporation Device 22e8 (rev a1)
82:00.0 VGA compatible controller: NVIDIA Corporation Device 2b85 (rev a1)
82:00.1 Audio device: NVIDIA Corporation Device 22e8 (rev a1)
分析:硬件在物理层面接通正常。注意 2b85 正是 RTX 5090 的 Device ID。
2. 驱动绑定状态检查
这是解决 Code 45 的关键。虚拟机要使用显卡,宿主机必须将该显卡绑定到 vfio-pci 驱动。
# 输出为空,未发现 Kernel driver in use
故障根源:宿主机内核虽然识别到了显卡,但由于某种原因(如总线重置失败),显卡脱离了 vfio-pci 的控制,处于“无人监管”状态,导致虚拟机无法通过 PCIe 映射获取硬件。
核心修复步骤:重新绑定与映射
1. 手动绑定 VFIO 驱动
我通过 sysfs 接口强制将 5090 重新绑定到虚拟化驱动上:
echo "10de 2b85" > /sys/bus/pci/drivers/vfio-pci/new_id
# 2. 解除可能存在的旧绑定并强制绑定到 vfio-pci
echo "0000:82:00.0" > /sys/bus/pci/devices/0000:82:00.0/driver/unbind 2>/dev/null
echo "0000:82:00.0" > /sys/bus/pci/drivers/vfio-pci/bind
# 3. 验证驱动状态
root@DBM-RTX5090-006:~# lspci -vvv -s 82:00.0 | grep "Kernel driver in use"
Kernel driver in use: vfio-pci
2. 虚拟机硬件重挂载
底层路径打通后,我通过 virt-manager (VNC) 进入管理界面。由于用户之前执行过卸载操作,导致 VM 配置丢失了对 82 号口显卡的引用。
操作:在虚拟机硬件配置中,重新添加
PCI Host Device,选中0000:82:00.0(Video) 和0000:82:00.1(Audio)。
结果验证
执行完以上操作后,重启该 VPS。
设备管理器:RTX 5090 重新出现,状态显示“This device is working properly”。
性能核实:运行
nvidia-smi,显示显存 32GB 识别完整,驱动版本 576.88,CUDA 版本 12.9。
经验总结
不要盲目重启虚拟机:如果宿主机层面的
vfio-pci绑定失效,Guest 侧做任何操作都是徒劳。Code 45 的真实含义:在云服务器环境下,它通常意味着 PCIe Passthrough 链路中断,应优先排查宿主机
dmesg日志和驱动绑定情况。运维工具链:熟练掌握
lspci、sysfs路径操作以及virt-manager的硬件配置,是保障高性能 GPU 实例稳定运行的核心技能。