拓冰建站拓冰建站
首页 / 资讯中心 / 正文

物理机离线安装CentOS 7:Realtek 2.5G网卡r8125驱动部署指南

简介这是一份面向Linux运维人员及需要在物理机上安装CentOS 7网卡驱动的用户的离线资源包专门解决Realtek RTL8125 2.5G网卡在CentOS 7.9下驱动编译与加载难题适用于无外网或内网受限环境。包体共51个文件约55.41MB结构清晰15个rpm依赖包用于补齐编译环境.c/.h源码及makefile提供驱动编译主体.ko模块与.o目标文件便于直接加载另有sh安装脚本与readme说明用户可按照包内顺序快速完成部署。已有3249人学习下载。通过这份资源读者可以绕开在线源依赖在离线状态下完成内核头文件、gcc等工具链配置并成功驱动2.5G有线网卡包内还涵盖了BIOS Secure Boot关闭等关键注意事项的说明能有效减少因驱动签名或依赖缺失导致的安装失败整体上是一份可复制、可离线操作的完整解决方案。 新到手的物理机上装CentOS 7结果系统装完了网卡灯明明亮着ip addr里却死活看不到网卡连个eno1都没有——这个场景我一年里至少碰到三五回。罪魁祸首十有八九就是主板上的 Realtek 2.5G 网卡。CentOS 7 发布时的内核停留在 3.10对 RTL8125 这种后来才普及的 2.5G 控制器根本没有原生驱动自带的r8169模块要么认不出它要么认出来也只能跑千兆完全不干活。这篇文章就专门讲在物理机离线安装 CentOS 7的场景下怎么把 Realtek 2.5G 网卡的官方驱动r8125老老实实装上去并且重启之后还能自动加载、跑满 2.5G 带宽。之所以强调“离线”是因为大部分生产内网机房根本没外网装完系统连yum install都跑不了更别提在线拉源码包了。所以整篇文章会围绕“提前准备好一切物资进机房一次性搞定”这个思路来写内容包括如何确认网卡型号、怎么准备离线编译依赖、源码编译和预编译模块两种安装路线、以及重启后驱动丢失、r8169 驱动冲突、Secure Boot 拦截这几个高频坑。适合运维、装机人员和所有在折腾物理机装 CentOS 7 的朋友收藏。1. 先认清这块 2.5G 网卡和 CentOS 7 之间的关系1.1 Realtek 2.5G 网卡到底是个什么东西Realtek 2.5G 网卡芯片主要指 RTL8125 系列包括 RTL8125B、RTL8125BG、RTL8126 等型号。这两年主流消费级主板和不少服务器板子都集成了它原因很简单价格便宜、兼容性好理论速率是千兆的 2.5 倍能跑满机械硬盘阵列的传输速度也能让千兆宽带不再有瓶颈。但它和服务器上常见的 Intel X710、Mellanox 这些网卡不一样——Realtek 走的是消费级路线Linux 内核社区对它的支持一直慢半拍。1.2 为什么 CentOS 7 装完系统后网卡不工作CentOS 7 的内核主要是 3.10.0 系列基础包里虽然有r8169这个驱动模块但它只负责老款 RTL8111/8168/8169 千兆网卡。RTL8125 出来后Realtek 官方提供的是独立的r8125驱动源码走的是一套完全不同的内部接口。如果你直接靠内核自带的r8169会出现几种典型症状系统里完全没有网卡接口ip addr只有lo能看到网卡但 ethtool 显示速率只有 1000Mb/s传输不稳定大流量拷文件直接断流这三点我在不同机器上都遇到过根本原因就是r8169对 RTL8125 是“半兼容”状态能用但没法发挥 2.5G 性能或者干脆认不出设备。1.3 装驱动前花两分钟确认硬件型号这一步别跳过我见过有人折腾了半天最后发现板载网卡根本不是 RTL8125 而是瑞昱的另一个型号。硬件确认有两种办法第一种在机器上执行lspci -nn | grep -i realtek输出类似03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125] (rev 05)看到[10ec:8125]这串 PCI ID就可以确定是 RTL8125 系列。如果是[10ec:8168]那就是老款千兆不需要折腾内核自带r8169就能驱动。第二种机器还没装系统或者系统里看不到网卡时直接查主板官网的规格参数或者开机进 BIOS 的板载设备信息页看网卡芯片型号。这套组合拳打下来基本不会认错。2. 离线环境物资清单提前一趟解决所有依赖物理机放在内网机房里没有外网没有 apt/yum 源这时候最大的敌人不是驱动本身而是依赖缺东少西。千万不要想着“先进系统再说”因为装驱动需要gcc、make、kernel-devel这些 CentOS 7 最小化安装默认都没装。我的做法是进机房之前把所有需要的东西都准备到一个 U 盘里。2.1 准备 r8125 官方源码包Realtek 官方驱动在官网提供源码包文件名类似r8125-9.011.00.tar.bz2或者r8125-9.008.00.tar.bz2。下载链接经常变搜索“Realtek r8125 download”就能找到。注意下载时选择 Linux 版本的源码包不是 Windows 的驱动 exe。下载完放到 U 盘根目录最好再放一个压缩包备份防止 U 盘中途损坏。这个包在 U 盘里到进机房前都别动它。2.2 解决编译工具链靠 CentOS 7 安装盘当本地 yum 源离线环境下没有 yum 源最省事的办法就是用 CentOS 7 的安装 ISO 做本地 yum 源。如果你安装系统用的是完整版 DVD ISO它自带gcc、make、kernel-devel等一大堆软件包。在已经装好的 CentOS 7 系统上挂载这个 ISOmount -o loop /dev/sdb1 /mnt/iso等等这里有两种情况。如果你是用 U 盘安装的系统把同一块 U 盘重新插上先lsblk看设备名假设是/dev/sdb1挂载到/mnt/usb然后找 ISO 文件再 loop 挂载mkdir -p /mnt/usb /mnt/iso mount /dev/sdb1 /mnt/usb mount -o loop /mnt/usb/CentOS-7-x86_64-Everything-2009.iso /mnt/iso配置本地 yum 源新建/etc/yum.repos.d/local.repo[local] namelocal baseurlfile:///mnt/iso gpgcheck0 enabled1然后执行yum clean all yum install -y gcc make kernel-develkernel-devel必须和当前内核版本完全一致安装系统时什么内核版本就要装对应的 kernel-devel。可以用uname -r确认。提示如果 CentOS 7 已经 EOL在线源基本都迁走了本地 ISO 源反而是最稳定可靠的依赖来源。这也是我强烈推荐用“安装盘 ISO 做离线源”的原因。2.3 如果连 ISO 都没有提前去一台能上网的机器上抓依赖有些机房不允许带光盘、ISO 文件只允许带一个 U 盘进去。这种情况我一般在一台能访问外网的 CentOS 7 同版本机器上用yumdownloader把依赖包全部下载到 U 盘yumdownloader --resolve --destdir/mnt/usb/rpms gcc make kernel-devel到了目标机器后直接rpm -ivh /mnt/usb/rpms/*.rpm安装。这里有个关键细节kernel-devel包必须和内核版本一字不差比如目标机器内核是3.10.0-1160.el7.x86_64那就只下载对应版本的 kernel-devel。高版本的内核开发包装上去编译出来的模块加载时会报 version magic 不匹配直接拒绝加载。2.4 关于 U 盘文件的组织建议我在 U 盘里一般这样放/ ├─ drv/ │ └─ r8125-9.011.00.tar.bz2 ├─ rpms/ # 所有提前下载的依赖 rpm 包 ├─ CentOS-7-x86_64-Everything-2009.iso └─ readme.txt # 记录版本号、命令步骤防止机房断网没法查机房环境往往只有 KVM 或者串口控制台没法随时随地打开浏览器查资料把关键命令写在 U 盘里的readme.txt是低成本但高回报的习惯。3. 源码编译安装 r8125 的完整过程到这一步假设硬件确认完毕、U 盘已经挂载到目标机器上、yum 源已经配好。接下来就是正片。3.1 拷贝源码包并解压建议把源码包先拷到本机目录再解压防止直接从 U 盘上编译导致 I/O 问题或者文件权限不对mkdir -p /root/driver cp /mnt/usb/drv/r8125-9.011.00.tar.bz2 /root/driver/ cd /root/driver tar xjf r8125-9.011.00.tar.bz2 cd r8125-9.011.003.2 确认编译环境就绪在开始make之前我会先做一次环境检查避免编译到一半报错浪费一整轮时间gcc --version make --version ls /usr/src/kernels/ uname -r注意看/usr/src/kernels/里的目录名必须和uname -r输出一致。如果不一致回头检查kernel-devel装没装对。3.3 编译、安装、加载驱动make make installmake install会把编译出来的r8125.ko复制到/lib/modules/$(uname -r)/extra/目录下然后自动调用depmod更新模块依赖关系。执行完先别急着重启手动加载一下modprobe r8125看有没有报错。我习惯再用几条命令确认lsmod | grep r8125 dmesg | tail -20 ip link正常的话ip link应该能看到一个网卡接口名字可能是enp3s0、eno1这种取决于你的主板和 systemd 命名规则。这时候网卡还是没有 IP 的接着配置网络即可。3.4 干掉 r8169 驱动冲突这一步是重灾区。CentOS 7 内核里的r8169模块在系统启动时会尝试接管 RTL8125 设备导致r8125加载的时候发现设备已经在别的模块手里直接放弃。表现出来就是modprobe r8125显示正常但ip link里依然没有网卡。解决办法是先把r8169模块从内核里摘掉然后启动黑名单modprobe -r r8169 modprobe r8125测试没问题后写入黑名单防止下次启动又自动加载echo blacklist r8169 /etc/modprobe.d/blacklist-r8169.conf注意黑名单只对r8169生效不影响其他网卡驱动。写完黑名单后别忘再执行一次dracut --force重建 initramfs否则重启阶段 initramfs 里依然会加载 r8169我见到的重启后驱动失效八成都是这个原因。3.5 配置静态 IP完成最后一步网卡识别后按物理机实际网络规划配置静态 IP。CentOS 7 用的是ifcfg-*文件网卡名以上面ip link看到的为准假设是enp3s0vi /etc/sysconfig/network-scripts/ifcfg-enp3s0内容参考TYPEEthernet BOOTPROTOstatic NAMEenp3s0 DEVICEenp3s0 ONBOOTyes IPADDR192.168.10.20 NETMASK255.255.255.0 GATEWAY192.168.10.1 DNS1192.168.10.1然后systemctl restart network ping -c 4 192.168.10.1能通就说明整个链路已经打通了。4. 免编译方案把预编译模块打包进系统源码编译是通用方案但有些场景下我不想在目标机器上装 gcc——毕竟生产服务器越干净越好一堆编译工具链放在上面无论是安全审计还是后续维护都麻烦。这时候可以用预编译内核模块的方案在另一台相同系统、相同内核版本的机器上编译好r8125.ko直接复制到目标机器加载。听起来简单但有几个细节必须处理好。4.1 找到和提取已编译的 .ko 文件假设你在中转机上已经按第三章的流程装好了 r8125模块文件位于/lib/modules/3.10.0-1160.el7.x86_64/extra/r8125.ko把它连同整个extra目录结构拷贝到目标机器的对应位置。内核版本必须完全一致这是硬条件。拷贝方法还是靠 U 盘cp -a /lib/modules/$(uname -r)/extra /mnt/usb/ko/到目标机器上后mkdir -p /lib/modules/$(uname -r)/extra cp -a /mnt/usb/ko/r8125.ko /lib/modules/$(uname -r)/extra/ depmod -a modprobe r8125这样目标机器完全不需要 gcc 和 kernel-devel也不需要配本地 yum 源省事太多。4.2 怎么把模块打成 RPM 包适合批量交付如果手上有十几台机器要装同一个驱动一台台敲命令太原始。用rpmbuild打完 RPM 包内网一键rpm -ivh r8125-9.011.00-1.el7.x86_64.rpm就完事了。Realtek 官方源码包里的src目录通常自带r8125.spec文件可以直接用来打包。在能访问网络的中转机上yum install -y rpm-build cd /root/driver/r8125-9.011.00 rpmbuild -bb ./r8125.spec生成物在/root/rpmbuild/RPMS/x86_64/下。把它拷到目标机器安装rpm -ivh r8125-*.x86_64.rpmRPM 包的优点是会自己处理 depmod、启动加载、黑名单这些逻辑安装完重启即用。但前提还是那个目标机器内核版本和打包机器一致否则加载照样报 version magic 错误。4.3 源码编译和预编译怎么选方案需要工具链需要网络/ISO 源适合场景踩坑概率源码编译需要 gcc/make/kernel-devel需要本地 ISO 源或 RPM 包单台调试、机型多样中依赖问题多预编译 .ko不需要不需要单台快速恢复、环境干净低但内核版本必须一致RPM 包交付不需要不需要几十台批量装低打包一次到处用我个人实际工作里最常用的是第三种先找一台同内核版本的机器打好 RPM内网一推几分钟搞定。但第一次接触的时候建议先从源码编译走一遍能帮你理解驱动加载的完整链路。5. 重启、验速与日常使用的几个坑驱动装完、网络通了表面看已经收工。但根据我的经验重启一次才算真正结束。很多人就是卡在这一步当时怎么用怎么好一重启网卡又没了。下面这些问题我做过的每一台 CentOS 7 RTL8125 机器几乎都会碰到提前处理比事后排查省心得多。5.1 重启后驱动不生效initramfs 和黑名单顺序重启后ip link里没网卡第一件事看lsmod | grep r8125。如果 r8125 没加载问题大概率出在 initramfs。CentOS 7 启动时加载的内核模块来自 initramfs 镜像不是直接扫描/lib/modules。你虽然modprobe能加载但重启流程还是按 initramfs 里的老配置走。处理方式dracut --force然后重启验证。如果之前没写黑名单r8169也可以在重装 initramfs 之前先把黑名单文件建好确保 initramfs 里根本不存在 r8169。两个动作顺序不做强要求但建议一起做掉一次性杜绝两处隐患。5.2 Secure Boot 把驱动拒之门外很多物理机默认开启了 UEFI Secure Boot。编译出来的r8125.ko没有合法签名Secure Boot 环境下内核会拒绝加载它而且dmesg里的报错往往看得人一脸懵什么Required key not available之类的第一次遇到根本想不到是驱动签名问题。判断方法mokutil --sb-state如果显示SecureBoot enabled那就别硬刚签名了进 BIOS 把 Secure Boot 关掉再启动。生产环境如果非要开 Secure Boot那得走完整的模块签名流程签发密钥、注册 MOK、签名驱动整套流程折腾下来非常费时间而且每升级一次内核就得重新签一次。我的建议是CentOS 7 这种老系统在物理机上就别开 Secure Boot 了省下的都是时间。5.3 内核升级会导致驱动失效CentOS 7 虽然已经 EOL但内网如果有自己的软件源偶尔还是会有内核安全更新。升级内核对 RTL8125 用户是个“大坑”新内核起来后/lib/modules/新版本/extra/r8125.ko不存在网卡直接消失。解决思路只有一个升级内核后用新内核重新编译/安装一次驱动yum update kernel -y reboot # 重启后进入新内核执行 mount /dev/sdb1 /mnt/usb mkdir -p /root/driver cp /mnt/usb/drv/r8125*.tar.bz2 /root/driver/ cd /root/driver tar xjf r8125*.tar.bz2 cd r8125*/ make make install dracut --force如果你用的是 RPM 包方案新内核起来后重新装一次 RPM 也一样。这里提醒一点升级内核前先把新内核对应的 kernel-devel 也准备好否则编译时又缺依赖卡在重启后的死循环里。5.4 ethtool 验证和吞吐实测驱动加载不等于性能达标。我见过驱动加载了、网卡亮了、ping 也通但速率执着地停在 1000Mb/s 的情况。验证方法ethtool enp3s0看Speed字段正常 RTL8125 协商后应该是2500Mb/s。如果显示1000Mb/s常见原因网线是五类线或者质量太差2.5G 对线材要求比千兆高对端交换机/对端网卡不支持 2.5G网线水晶头接触不良换个思路如果短距离直连对端 2.5G 设备还是只有千兆那就重点查驱动和供电。宽带到底能跑多少用 iperf3 实测最直观。对端也装好 iperf3 后# 服务端 iperf3 -s # 本机客户端 iperf3 -c 192.168.10.1 -t 30 -P 4好的 RTL8125 好的网线TCP 吞吐一般在 1.8~2.3Gbps 之间。低于 1Gbps 就说明哪里没对齐用ethtool -S enp3s0看有没有大量 CRC 错误。5.5 关于散热和稳定性的一句话RTL8125 这卡跑满 2.5G 的时候发热量比 Intel 网卡大一些尤其是持续大流量的场景。物理机如果散热设计一般建议注意一下机箱风道。这个不算致命问题但长期高负载传输遇到偶发断流优先查的不是驱动是温度。最后分享两个小习惯r8125 这套流程我前前后后跑了十几台机器现在基本形成了肌肉记忆。最后分享两个真正省过命的小习惯。第一个U 盘里永远放一个r8125-9.011.00.tar.bz2的原始源码包不管用不用。因为 Realtek 官网的下载链接经常失效今天能下载的地址下周可能就打不开了。源码包这种小体积、高价值的东西值得在每个装机 U 盘里常驻一份。第二个每次给物理机装完驱动顺手把内核版本、驱动版本、网卡 PCI ID 记到/root/README里。乍看多此一举但半年后你回来处理这台机器的网络问题时这段记录直接帮你省掉三分之一排查时间。人脑对细节的记忆是靠不住的但文件系统记得住。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门