R8125这张网卡,真的可以把我折磨的死去活来的,我甚至都考虑换一个I210网卡的机子了,不过今天可能真的一劳永逸的解决这个问题了。
之前将CentOS系统配置成网关服务器时,就遇到了很多R8125网卡的问题,使用过程中,如果断开连接就无法重连了,我当时已经查出来该问题是ARP报文出错,我最后解决该问题的方案是降低CentOS的内核版本。实际上,我当时对此问题的研究还不够,没有充分的获取信息。
最近又在我的PVE系统中出现了类似的情况,当我的PVE系统运行一段时间后,再开启我的笔记本,那么我的笔记本可能无法连接到网络(90%的几率),表现为无法正确的获取到IP地址(得到了一个保留地址),这和我之前配置CentOS时遇到的情况一模一样。我PVE的内核已经升级到了5.11,而R8125官方提供的驱动只支持到5.6,PVE的内核升级是直接从5.4跳到5.11的,所以我放弃了之前降级内核的方案。
我需要记录一下我解决这个问题的心理路程,这会为我之后解决问题提供经验(实际上,在解决这个问题时我非常的沮丧,之前在CentOS系统上解决问题的挫败感压得我很窒息)。
第一阶段
第一个阶段,我是尝试降级PVE的内核版本,正如上文所说,因为PVE的内核版本是跳着走的,我没有办法降级到5.6。我找到了如下的博客,博主和我的情况几乎是一样的,他也是想通过降级内核来避免R8125驱动的问题,不过他解决的是速度问题,我解决的是不好用的问题(还没到解决速度的阶段,哈哈):
我不想直接降到5.4,感觉版本跨度是在是太大了,而且我是从5.4升上来的,家中两台设备都已经升级到了5.11,而且5.4时编译R8125的驱动时,也会遇到一些问题。
第二阶段
这个时候我考虑换机器了,我想购买一条I210的机器,最后放弃了,之所以放弃是因为不想委曲求取全,万兆肯定会比千兆有更多玩的空间(虽然我目前就这一个万兆设备),而且我也不知道换成I210后还会遇到什么奇奇怪怪的问题,最重要的是,我还得花费1000个大洋,糟心。
第三阶段
既然官方不提供5.11的驱动,或许有大神提供,所以第三个阶段,我开始尝试寻找大神提供的版本。我之前看到过说有大神自己改了驱动文件,从而跑满这款网卡。于是我在GitHub上用R8125做关键字进行搜索,结果找到了如下的项目:
于是我按照这个项目的Readme执行了起来,但是最终没有解决我的问题,但是Reame的最后面给我解决我的问题埋下了种子:
这是说:如果存在R8169的驱动和R8125的驱动,可能会导致默认使用R8169的驱动,但是当是我只是按照教程简单执行了一下,没有任何效果,我就放弃了。我当时并没有办法判断我的网卡使用的是R8169还是R8125。
第四阶段:逼进真相
就在这个时候,我偶然发现了如下的一篇问题贴:
No network with Realtek RTL8125 2.5GbE R8169/R8125
我按照问题中的指令一一进行查看,发现贴主和我的几乎一模一样,那么我们的问题是同一个:网卡驱动默认选择了R8169而不是R8125(和第三阶段一样的,但是有方法可以确认的我用的是R8169的驱动了):
root@J4125:~# lspci -knn | grep Eth -A4
02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 04)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:0123]
Kernel driver in use: r8169
Kernel modules: r8169, r8125
03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 04)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:0123]
Kernel driver in use: r8169
Kernel modules: r8169, r8125
04:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 04)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:0123]
Kernel driver in use: r8169
Kernel modules: r8169, r8125
05:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 04)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:0123]
Kernel driver in use: r8169
Kernel modules: r8169, r8125
定位问题后,我又尝试用如下的方案来让我的网卡使用R8125驱动:
-
按照教程将R8169添加到黑名单中,但是始终不起作用
-
卸载R8169模块,我尝试的方案如下,这些方案都没有效果:
- 用
modprode -r r8169
指令,重启后依然存在 - 删除
/lib/modules/5.11.22-5-pve/kernel/drivers/net/ethernet/realtek/
下的r8169.ko,然后重启 - 用
rmmod r8169
指令,重启后依然存在 - 修改
/lib/modules/5.11.22-5-pve/modules.dep
文件,将r8169相关的行删掉 - 修改
/lib/modules/*/modules.dep
文件,将r8169相关的行删掉
- 用
-
在尝试了上面所有的方案后,我又开始思考,为什么pve中设置的blacklist不起作用,最后找如下教程:
Proxmox VE: Installation and configuration
这篇文章解决了blacklist不生效的问题,可能没有人能猜到,我用什么关键字搜索到了这篇文章,我使用的是:R8169 /etc/modprobe.d/pve-blacklist.conf。
最终我lspci -knn | grep Eth -A4
有了如下的输入:
root@J4125:/lib/modules/5.11.22-5-pve# lspci -knn | grep Eth -A4
02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 04)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:0123]
Kernel driver in use: r8125
Kernel modules: r8125
03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 04)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:0123]
Kernel driver in use: r8125
Kernel modules: r8125
04:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 04)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:0123]
Kernel driver in use: r8125
Kernel modules: r8125
05:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 04)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:0123]
Kernel driver in use: r8125
Kernel modules: r8125
真的很开心啊,今天状态并不是很好,这件事让人很舒服。现在我的笔记本,可以很正常的重连到我的PVE系统了,这是我家庭网络中最重要的一环,非常的开心。
存在的问题
本次解决问题的过程中,存在的最大问题就是没有控制好变量。我在CentOS时代,我不知道是不是同样是因为网卡使用了R8169驱动,导致我断线重连时无法正常重连;同样,我并不知道默认使用R8169是在我编译安装好R8125驱动后,还是在我按照Readme文档,安装了Dpks后(我倾向于前者);最后移除R8169的驱动时,我尝试了各种方案,但是方案开始前没有备份,结束后没有还原现场,虽然问题不是很大,但是可能存在影响实验结果的可能。
小结
我需要将我所做的操作重新整理一下,方便下次使用:
- 编译、安装R8125模块(参考Proxmox VE下的其他文档)
- 检查网卡当前使用的驱动:
ethtool eno1
lshw -class network
lspci -knn | grep Eth -A4
- 将R8169添加到黑名单,并让黑名单生效(这部分没有控制变量,不知道是否正确):
echo “blacklist r8169” >> /etc/modprobe.d/pve-blacklist.conf
update-initramfs -u
参考资料
核心参考的资料如下: