PVE升级后无法直通网卡的问题

源起

源于某个周日下午(2023-10-22), 看着最近一段时间逐步完善的软路由网络架构. 已经可以比较完美地满足现有的网络需求

  • 国内外流量分流
  • 端口映射
  • P2P组网
  • 媒体硬解

内心膨胀了, 开始想要把基础设施(PVE)升级到最新版本了. 甚至我完全没有去看更新日志, 脑子一热, 找了个流程就开始了升级.

升级过程一切顺利, 正常看到了版本号变更. 噩耗就发生在第一次重启之后. 发现我的ROS无法启动

源途

在日志中看到了简单的got timeout, 由于其他虚拟机正常运行, 于是将目标投向了这些虚拟机不同的地方—直通网卡.

除了PVE的管理口, 是通过挂载进去的, 其余三个网口都是通过PCI直通的方式进入到ROS中. 在经过多次删减后, 发现0000:05:00:0 也就是最后一个网口, 只要去掉这个网口即可正常开机. 本来这个网口也被我拿来当作2.5G LAN的用途, 为了暂时先解决没网的问题, 只好先将这个网口先空余出来, 其他设备先接入到交换机中.

第二天, 本着试试的心态, 把这个网口直通到了一个win10的虚拟机, 依然启动不了. 这时想到了之前手动直通时接触到的一个命令 dmesg. 找到了一个可能的错误

1
Unable to change power state from D3cold to D0, device inaccessible

并且这一句前面刚好就是 0000:05:00:0

源灭

根据关键词搜索, 最终找到了 pcie_port_pm=off 将此参数加入到 pve的 /etc/default/grub => GRUB_CMDLINE_LINUX_DEFAULT= 然后update-grub. 重启后再次将最后一个网口直通到win10虚拟机, 正常使用. 然后又胆大包天, 直接给怼到ROS里(这时候人还不在家), 战战兢兢地点击重启按钮, 手那个抖的啊…

源因

pve8使用了6.2.x的内核, 这个版本内核对于Intel I225网卡有bug, 主要就是在切换设备电源状态的时候失败了, 导致vfio模块无法正常加载所有网卡. 增加上面的参数就是关闭pcie端口的电源管理功能, 跳过这一步骤. 由于网卡也没有休眠之类的, 插着么总是会用的, 因此对于功耗的影响不大.

改天还是想办法把版本退回去好了, 对于新版本没有什么追求, 还是稳定最好.

教训: 升级!!! 升个鬼的级!!!

Licensed under CC BY-NC-SA 4.0
记录平时瞎折腾遇到的各种问题, 方便查找
使用 Hugo 构建
主题 Stack 3.29.0Jimmy 设计