解决 PVE 环境下网卡突然假死、断流,控制台失联且只能通过物理重启服务器才能恢复的网络稳定性问题
封面使用 ChatGPT Images 2.0 生成
问题现象
在运行 PVE 系统的主机上,时不时会遇到网卡无故“突然掉线”的情况,具体表现为:
- 网络访问突然中断,PVE 网页后台无法打开,SSH 无法连接,重启/等待后解决
- 接入物理显示器发现系统并未死机,但尝试 ping 外部 IP 均提示网络不可达
重启后进入 PVE,在左侧列表点击自己的 PVE,展开系统选项,找到系统日志,查看相关时间的日志,可以发现网卡掉了
Jul 17 16:41:59 DongShao-PVE kernel: r8169 0000:02:00.0 enp2s0: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 5008 ms
Jul 17 16:41:59 DongShao-PVE kernel: r8169 0000:02:00.0: resetting
Jul 17 16:42:00 DongShao-PVE kernel: pcieport 0000:00:1c.0: broken device, retraining non-functional downstream link at 2.5GT/s
Jul 17 16:42:01 DongShao-PVE kernel: pcieport 0000:00:1c.0: retraining failed
Jul 17 16:42:02 DongShao-PVE kernel: pcieport 0000:00:1c.0: Data Link Layer Link Active not set in 100 msec
Jul 17 16:42:02 DongShao-PVE kernel: r8169 0000:02:00.0: reset done
Jul 17 16:42:02 DongShao-PVE kernel: r8169 0000:02:00.0 enp2s0: Can't reset secondary PCI bus, detach NIC
这种现象在安装了 Intel I225-V / I226-V 以及 Realtek RTL8125B 等 2.5G 网卡的设备上尤为高发
根本原因
PCIe ASPM (高级电源管理) 的“假死”机制
消费级主板与高阶网卡为了节能,默认会开启 PCIe ASPM 功耗控制。在网络空闲时,系统会尝试让网卡进入深度的节能睡眠状态。由于部分网卡固件或主板主控与 Linux 内核的节能协议存在兼容性漏洞,网卡一旦“睡死”过去,在有新的网络请求时便无法被正确“唤醒”,导致在硬件层面上陷入死锁,只能通过重启来重置
解决方法
在 PVE 的系统引导中加入对应的内核参数,强制关闭网卡的自主节能或调整硬件中断模式,即可彻底解决此问题
操作步骤
博主的 PVE 为 GRUB 引导,使用 Realtek RTL8125BG 网卡,所以仅针对这种情况修复,其他情况可以问问 AI
-
使用 SSH 或在 PVE Web 终端中登录宿主机,编辑 GRUB 配置文件:
nano /etc/default/grub -
找到
GRUB_CMDLINE_LINUX_DEFAULT="..."这一行。在quiet后面留一个空格,添加修复参数pcie_aspm=off,完成后示例:GRUB_CMDLINE_LINUX_DEFAULT="quiet pcie_aspm=off" -
修改完成后,按下
Ctrl + X退出编辑器,输入 y 按回车保存 -
千万不要忘记应用更新,运行命令
update-grub以重新编译 GRUB 引导文件 -
重启