PVE 实战:拔掉 PCI 硬盘后网卡灯不亮的排查与解决
编辑最近在 PVE 上做实验的时候,遇到一个奇怪的问题:我拔掉了一块 PCI 硬盘,结果原本运行正常的 PCI 网卡 灯完全不亮了,PVE 里也无法识别网络。开始我还以为是网卡坏了,但换到其他系统上一试,网卡完全正常,这让我非常困惑。经过一番排查,发现问题其实和 PCI 地址漂移和 VFIO 直通绑定 有关。
1. 事情经过
我在 PVE 上配置了:
一块 PCI NVMe 硬盘(Biwin)
一块 PCI 网卡(Intel I226-V)
硬盘原本用于虚拟机直通,网卡用于 PVE 系统本身上网。拔掉硬盘后,网卡完全失效,灯不亮,ip link
看不到接口。
我第一时间怀疑硬件坏掉,但在其他系统测试网卡一切正常,于是排除了硬件问题。
2. 排查思路
2.1 检查 PCI 设备
在 PVE 上运行:
lspci -nn | grep Ethernet
结果显示网卡仍在系统里:
02:00.0 Ethernet controller: Intel I226-V [8086:125c]
但是检查驱动:
lspci -k -nn | grep -A3 02:00.0
发现:
Kernel driver in use: vfio-pci
Kernel modules: igc
说明网卡 被 VFIO 绑定了,PVE 无法使用它,所以灯不亮。
2.2 核心原因
结合 IOMMU 分组和 PCI 地址,我发现关键点是:
拔掉硬盘后,PCI 总线号变化:原本网卡在
02:00.0
→ 变成01:00.0
PVE 配置里,
01:00.0
原本是直通给虚拟机的硬盘结果网卡被错误绑定到 VFIO,系统驱动失效 → 灯不亮 → 无网络
所以问题根源其实是 PCI 地址漂移导致 VFIO 绑定错误。
3. 解决办法
3.1 暂时解除 VFIO 绑定
先解除误绑定:
echo 0000:01:00.0 > /sys/bus/pci/drivers/vfio-pci/unbind
3.2 绑定回系统驱动
然后绑定到 Intel I226-V 的正常驱动:
echo 0000:01:00.0 > /sys/bus/pci/drivers/igc/bind
确认网卡状态:
ip link
网卡应该出现,灯也亮起来,可以正常上网。
3.3 避免下次问题
不要在 PVE 配置里写死 PCI 地址
使用
vendor:device ID
绑定 VFIO 比如:options vfio-pci ids=8086:125c
这样即使 PCI 地址变化,也能正确识别设备。
主板 BIOS 设置
打开 Consistent Device Naming / PCIe slot fixed mapping,减少 PCI 地址漂移的风险。
4. 总结
这次经历让我深刻体会到 PVE 下 PCI 设备直通的坑:
拔掉硬盘不是单纯的硬件操作,可能会改变其他 PCI 设备的总线号
VFIO 绑定是 静态绑定 PCI 地址,容易因为地址漂移导致系统设备失效
排查思路是:先确认 PCI 地址 → 检查驱动 → 解除 VFIO 绑定 → 绑定回系统驱动
通过这些步骤,我最终把网卡恢复正常,也总结出了一套 拔 PCI 硬盘后修复网卡的经验。
如果你在 PVE 上遇到 网卡灯不亮、接口消失 的情况,记得先别急着换硬件,多半是 PCI 地址漂移和 VFIO 绑定的问题。
- 0
-
分享