PVE 系统 2.5G网卡驱动从 r8169 切换到 r8125

PVE 系统 2.5G网卡驱动从 r8169 切换到 r8125(实战完整记录)

一、概述

很多主板上自带的 2.5G 网卡是 Realtek RTL8125,

在 Proxmox VE (PVE) 下,系统默认会使用通用驱动 r8169,可以用,但性能和稳定性一般。

目标 :在不重装系统的前提下,把两张 RTL8125 网卡的驱动从 r8169 切换到专用的 r8125 驱动,并且保证重启后仍然生效。

整篇文章是基于一次真实的成功操作过程 整理而成,所有关键命令后面都附上了实战执行日志(节选),技术小白照着做也能完成。

命令清单(熟手可只看这一段、小白继续往后看)

适合已经有一定 Linux / PVE 基础的用户,按顺序执行即可。

详细解释、日志示例见后面的完整教程。

bash 复制代码
# 0. 确认当前驱动(可选)
lsmod | grep -E "r8169|r8125|r8168"
lspci -k | grep -A 3 RTL8125

# 1. 安装 dkms 和内核头文件
apt update
apt install -y dkms pve-headers-$(uname -r)

# 2. 下载并进入 r8125 源码目录
cd /tmp
git clone https://github.com/awesometic/realtek-r8125-dkms.git
cd /tmp/realtek-r8125-dkms

# 3. 使用 dkms 安装 r8125 驱动
./dkms-install.sh
dkms status

# 4. 拉黑旧驱动 r8169
echo "blacklist r8169" > /etc/modprobe.d/blacklist-r8169.conf
cat /etc/modprobe.d/blacklist-r8169.conf

# 5. 更新 initramfs
update-initramfs -u

# 6. 预加载 r8125(可选)
modprobe r8125
lsmod | grep -E "r8169|r8125"

# 7. 重启
reboot

# 8. 重启后验证(重点看 r8125 是否生效)
lspci -k | grep -A 3 RTL8125
lsmod | grep -E "r8169|r8125"
ip link show
ping -c 3 192.168.1.2   # 换成你的网关 IP

二、环境信息(方便你对照自己的环境)

  • 系统: Proxmox VE
  • 内核版本 : Linux 6.8.12-4-pve (2024-11-06T15:04Z)
  • 网卡型号 : Realtek RTL8125 2.5GbE Controller
  • 网卡数量: 2 张
  • 原始驱动 : r8169
  • 目标驱动 : r8125(通过 DKMS 安装,版本 9.016.01

三、整体操作流程总览

给一个整体图,心里有数:

  1. 确认当前网卡和驱动情况
  2. 确认系统还没有 r8125 驱动
  3. 安装 dkms + 内核头文件
  4. 下载 r8125 源码(realtek-r8125-dkms)
  5. 用 dkms 编译并安装 r8125 驱动
  6. 把旧驱动 r8169 拉入黑名单
  7. 更新 initramfs
  8. 加载 r8125 驱动并重启
  9. 重启后验证:网卡是否已经使用 r8125 驱动,网络是否正常

下面按这个顺序,一步步来。


四、前置检查:现在网卡在用什么驱动?

1.1 查看当前加载的网卡驱动模块

bash 复制代码
lsmod | grep -E "r8169|r8125|r8168"

实战输出(节选)

text 复制代码
root@pve:~# lsmod | grep -E "r8169|r8125|r8168"
r8169                 110592  0

说明当前只加载了 r8169,还没有 r8125

1.2 查看 RTL8125 网卡使用的内核驱动

bash 复制代码
lspci -k | grep -A 3 RTL8125

实战输出

text 复制代码
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
        Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller
        Kernel driver in use: r8169
        Kernel modules: r8169
--
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 04)
        Subsystem: Micro-Star International Co., Ltd. [MSI] RTL8125 2.5GbE Controller
        Kernel driver in use: r8169
        Kernel modules: r8169

可以看到,两张 RTL8125 网卡都在使用 r8169 驱动。

1.3 看一下网卡接口和网桥绑定情况

bash 复制代码
ip link show

实战输出(节选)

text 复制代码
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr1 state UP group default qlen 1000
    link/ether 88:c9:b3:bb:d2:1f brd ff:ff:ff:ff:ff:ff
3: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000
    link/ether 2c:f0:5d:da:a1:ab brd ff:ff:ff:ff:ff:ff
5: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
6: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> ...

结合路由(ip route show)可以确认:

  • enp4s0 通过 vmbr0管理口/默认路由
  • enp1s0 通过 vmbr1 用作其他用途

结论:两张网卡都在工作,且都在使用 r8169,我们切换驱动会同时影响两张网卡。


五、确认系统是否已有 r8125 驱动

bash 复制代码
# 查找内核模块目录里有没有 r8125
find /lib/modules/$(uname -r) -name "*r8125*" -o -name "*8125*"

# 查看 dkms 状态
dkms status

实战输出

text 复制代码
root@pve:~# find /lib/modules/$(uname -r) -name "*r8125*" -o -name "*8125*"
root@pve:~#
text 复制代码
root@pve:~# dkms status
-bash: dkms: command not found

说明:系统目前既没有安装 dkms,也还没有 r8125 驱动模块,需要从源码安装。


六、安装 dkms 和内核头文件

2.1 更新软件源

bash 复制代码
apt update

实战输出(节选)

text 复制代码
Hit:1 https://mirrors.ustc.edu.cn/debian bookworm InRelease
...
Err:7 https://enterprise.proxmox.com/debian/ceph-quincy bookworm InRelease
  401  Unauthorized [IP: 51.79.228.122 443]
...
E: The repository 'https://enterprise.proxmox.com/debian/ceph-quincy bookworm InRelease' is not signed.

说明:上面的 401 错误是 PVE 企业版 Ceph 仓库 没有订阅导致的,

不影响我们后续安装 dkms 和内核头文件,可以忽略。

2.2 安装 dkms 和对应内核头文件

这里使用你实战中成功的命令:

bash 复制代码
apt install -y dkms pve-headers-$(uname -r)

在你的环境中,命令的实战输出如下:

text 复制代码
root@pve:~# apt install -y dkms pve-headers-6.8.12-4-pve
Note, selecting 'proxmox-headers-6.8.12-4-pve' instead of 'pve-headers-6.8.12-4-pve'
dkms is already the newest version (3.0.10-8+deb12u1).
...
Setting up proxmox-headers-6.8.12-4-pve (6.8.12-4) ...

小结:

  • dkms 安装完成(或提示已是最新)。
  • 成功安装了与你当前内核匹配的头文件 proxmox-headers-6.8.12-4-pve

如果你的系统里没有 git,顺手安装一下(你那边已有 git,这条是给其他读者用的):

bash 复制代码
apt install -y git

七、下载 r8125 驱动源码(realtek-r8125-dkms)

3.1 切换到临时目录并克隆仓库

bash 复制代码
cd /tmp
git clone https://github.com/awesometic/realtek-r8125-dkms.git

实战输出

text 复制代码
root@pve:/tmp# git clone https://github.com/awesometic/realtek-r8125-dkms.git
Cloning into 'realtek-r8125-dkms'...
remote: Enumerating objects: 617, done.
remote: Counting objects: 100% (206/206), done.
...
Resolving deltas: 100% (437/437), done.

确认目录存在:

bash 复制代码
cd /tmp/realtek-r8125-dkms
ls -la

实战输出(节选)

text 复制代码
drwxr-xr-x 5 root root  4096 Nov 23 19:41 .
drwxrwxrwt 9 root root  4096 Nov 23 19:41 ..
-rw-r--r-- 1 root root  2469 Nov 23 19:41 autorun.sh
drwxr-xr-x 3 root root  4096 Nov 23 19:41 debian
-rw-r--r-- 1 root root   379 Nov 23 19:41 dkms.conf
...
drwxr-xr-x 2 root root  4096 Nov 23 19:41 src

查看 dkms 配置,确认模块名称和版本:

bash 复制代码
cat dkms.conf

实战输出

text 复制代码
PACKAGE_NAME="realtek-r8125"
PACKAGE_VERSION="9.016.01"
...
BUILT_MODULE_NAME[0]="r8125"
BUILT_MODULE_LOCATION[0]="src"
DEST_MODULE_LOCATION[0]="/updates"
AUTOINSTALL="yes"

八、用 dkms 编译并安装 r8125 驱动

4.1 一键安装(推荐)

/tmp/realtek-r8125-dkms 目录下执行:

bash 复制代码
cd /tmp/realtek-r8125-dkms
./dkms-install.sh

实战输出(节选)

text 复制代码
About to run dkms install steps...
Creating symlink /var/lib/dkms/r8125/9.016.01/source -> /usr/src/r8125-9.016.01
...
Building module:
Cleaning build area...
'make' -j12 KVER=6.8.12-4-pve BSRC=/lib/modules/6.8.12-4-pve modules......
Signing module /var/lib/dkms/r8125/9.016.01/build/src/r8125.ko
...
r8125.ko:
 - Installation
   - Installing to /lib/modules/6.8.12-4-pve/updates/dkms/
depmod...
Finished running dkms install steps.

看到 Finished running dkms install steps. 基本就说明驱动已经编译并安装成功了。

4.2 确认模块文件和 dkms 状态

bash 复制代码
# 确认内核模块文件存在
ls -la /lib/modules/$(uname -r)/updates/dkms/r8125.ko

# 查看 dkms 状态
dkms status

实战输出

text 复制代码
root@pve:~# ls -la /lib/modules/$(uname -r)/updates/dkms/r8125.ko
-rw-r--r-- 1 root root 505869 Nov 23 19:43 /lib/modules/6.8.12-4-pve/updates/dkms/r8125.ko
text 复制代码
root@pve:~# dkms status
r8125/9.016.01, 6.8.12-4-pve, x86_64: installed

至此,新驱动已经"装进系统"里了,接下来要做的是:让内核优先用 r8125,而不是 r8169


九、把旧驱动 r8169 拉入黑名单

5.1 写入黑名单配置

bash 复制代码
echo "blacklist r8169" > /etc/modprobe.d/blacklist-r8169.conf
cat /etc/modprobe.d/blacklist-r8169.conf

实战输出

text 复制代码
root@pve:~# cat /etc/modprobe.d/blacklist-r8169.conf
blacklist r8169

这一步的意思是:告诉内核 以后不要自动加载 r8169 模块


十、更新 initramfs(让重启后也生效)

修改了内核模块相关配置后,需要更新 initramfs:

bash 复制代码
update-initramfs -u

实战输出(节选)

text 复制代码
update-initramfs: Generating /boot/initrd.img-6.8.12-4-pve
Running hook script 'zz-proxmox-boot'..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.

到这里,重启后系统会按新的 initramfs 配置来加载模块。


十一、重启前先手动加载 r8125(验证模块正常)

这一步不是必须,但可以提前确认 r8125 模块本身没有问题。

bash 复制代码
# 手动加载 r8125 模块
modprobe r8125

# 看一下当前内存中加载了哪些网卡驱动
lsmod | grep -E "r8169|r8125"

# 看一下 r8125 模块的详细信息
modinfo r8125 | head -20

实战输出(节选)

text 复制代码
root@pve:~# lsmod | grep -E "r8169|r8125"
r8125                 307200  0
r8169                 110592  0
text 复制代码
root@pve:~# modinfo r8125 | head -20
filename:       /lib/modules/6.8.12-4-pve/updates/dkms/r8125.ko
version:        9.016.01-NAPI
license:        GPL
description:    Realtek r8125 Ethernet controller driver
...

说明:此时 r8125 模块已经加载进内存 ,但网卡仍然在用 r8169,

真正切换需要 重启之后,由系统重新为网卡绑定驱动


十二、重启系统,让网卡真正切换到 r8125

bash 复制代码
reboot

等待系统重启完成后,从控制台或 SSH 登陆,再做下面的验证。


十三、重启后的验证:确认已经在用 r8125

8.1 再次查看网卡使用的内核驱动

bash 复制代码
lspci -k | grep -A 3 RTL8125

实战输出

text 复制代码
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
        Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller
        Kernel driver in use: r8125
        Kernel modules: r8169, r8125
--
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 04)
        Subsystem: Micro-Star International Co., Ltd. [MSI] RTL8125 2.5GbE Controller
        Kernel driver in use: r8125
        Kernel modules: r8169, r8125

重点看这一行:Kernel driver in use: r8125

说明 两张 RTL8125 网卡都已经在使用 r8125 驱动

8.2 确认内存中只加载了 r8125,没有 r8169

bash 复制代码
lsmod | grep -E "r8169|r8125"

实战输出

text 复制代码
root@pve:~# lsmod | grep -E "r8169|r8125"
r8125                 307200  0

只有 r8125,没有 r8169,说明黑名单生效了。

8.3 检查网卡接口状态

bash 复制代码
ip link show

实战输出(节选)

text 复制代码
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr1 state UP mode DEFAULT group default qlen 1000
    link/ether 88:c9:b3:bb:d2:1f brd ff:ff:ff:ff:ff:ff
3: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr0 state UP mode DEFAULT group default qlen 1000
    link/ether 2c:f0:5d:da:a1:ab brd ff:ff:ff:ff:ff:ff
5: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
6: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> ...

可以看到:

  • 接口都处于 UP 状态
  • 队列类型从之前的 pfifo_fast 变成 mq(多队列),这是 r8125 驱动的一个特征

8.4 测试网络是否正常

bash 复制代码
ping -c 3 192.168.1.2

实战输出

text 复制代码
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.734 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.677 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.904 ms
...
3 packets transmitted, 3 received, 0% packet loss

说明:默认网关可达,网络工作正常,驱动切换完成。


十四、多网卡场景注意事项(本机有 2 张 RTL8125)

  • 两张网卡会一起切换驱动

    因为它们都是 RTL8125,都由同一个内核模块 r8169 / r8125 驱动。

  • 先认清管理口是哪一张

    一般 PVE 的 Web 管理口在 vmbr0 上,你的实战环境中是:

    • enp4s0vmbr0 → 默认路由
    • enp1s0vmbr1
  • 切换过程中网络会短暂中断

    尤其是重启那一步,因此强烈建议:

    • 在机房现场操作,或者
    • 有 IPMI / iKVM / 显示器 + 键盘可以直连机器

十五、故障排查建议

问题 1:重启后网卡不工作 / 没有 IP

可能原因:

  • initramfs 没有更新成功
  • 黑名单没生效,r8169 仍然被加载
  • r8125 没有成功编译安装

建议排查命令:

bash 复制代码
# 再次确认黑名单
cat /etc/modprobe.d/blacklist-r8169.conf

# 重新更新 initramfs
update-initramfs -u

# 检查 dkms 状态
dkms status

问题 2:加载 r8125 报错 / 网卡不认

可能原因:

  • 内核版本和驱动版本不兼容
  • 编译时缺少依赖

排查思路:

bash 复制代码
# 看内核日志里关于 r8125 的报错
dmesg | grep -i r8125
journalctl -k | grep -i r8125

# 重新编译安装一次
cd /tmp/realtek-r8125-dkms
./dkms-remove.sh
./dkms-install.sh

问题 3:无法卸载 r8169 模块

如果你在网卡正在工作的时候执行:

bash 复制代码
modprobe -r r8169

很可能会失败,这是正常的。

正确做法是:写黑名单 + 更新 initramfs + 重启

让系统在启动时就不要再加载 r8169,而不是"在线热拔"。


十六、如何回滚到 r8169(如果你想恢复原状)

如果切换后不满意,或者遇到兼容性问题,可以按下面步骤回退:

bash 复制代码
# 1. 删除 r8169 黑名单
rm /etc/modprobe.d/blacklist-r8169.conf

# 2. 卸载 r8125 模块(如果当前已加载)
modprobe -r r8125 || true

# 3. 更新 initramfs
update-initramfs -u

# 4. 重启系统
reboot

重启后,系统会重新使用内核自带的 r8169 驱动。


十七、小结

  • 这篇文章完整记录了 从 r8169 切换到 r8125 的实战全过程 ,所有关键命令都有对应的真实执行日志
  • 关键点只有三个:
    1. 用 dkms 安装好 r8125 模块
    2. 把 r8169 拉黑(blacklist)
    3. 更新 initramfs 并重启
  • 切换完成后,你可以获得:
    • 更好的 2.5GbE 性能
    • 更稳定的连接
    • 多队列(mq)等更好的特性支持

参考链接


测试环境: Proxmox VE, Linux 6.8.12-4-pve

相关推荐
折翅嘀皇虫38 分钟前
fastdds.type_propagation 详解
java·服务器·前端
人工智能训练1 小时前
windows系统中的docker,xinference直接运行在容器目录和持载在宿主机目录中的区别
linux·服务器·人工智能·windows·ubuntu·docker·容器
阿拉斯攀登1 小时前
docker介绍
服务器·docker
CheungChunChiu2 小时前
Android 系统中的 NTP 服务器配置与选择逻辑详解
android·运维·服务器
草莓熊Lotso2 小时前
红黑树从入门到进阶:4 条规则如何筑牢 O (logN) 效率根基?
服务器·开发语言·c++·人工智能·经验分享·笔记·后端
0wioiw03 小时前
跨网络互联技术(Nginx反向代理)
服务器·网络·nginx
minji...3 小时前
Linux 进程概念 (三) (进程状态,僵尸进程,孤儿进程,进程优先级)
linux·运维·服务器
qq_4798754310 小时前
X-Macros(1)
linux·服务器·windows
jun_bai12 小时前
python写的文件备份网盘程序
运维·服务器·网络