ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

新硬件装Ubuntu 20.04网卡消失?从只有lo到全通的救砖指南

新硬件装Ubuntu 20.04网卡消失?从只有lo到全通的救砖指南 先说结论2025年顶配主机想装Ubuntu 20.04开机后看到ip link里只有lo有线网卡、无线网卡全部“人间蒸发”这不是什么玄学而是4年硬件迭代与5.4内核之间必然出现的“代差”。我这次从“只有lo”一路修到有线无线全通中间试过USB网卡、手机USB共享、离线deb、chroot救砖折腾了一整个晚上。这篇文章就是把这条完整路线记录下来给那些因为各种原因必须在新硬件上跑旧系统的人一个可以直接抄作业的参考。这篇内容适合谁来读如果你手上有2024/2025年的主板或笔记本却因为公司软件、工业控制环境、ROS版本、客户指定的运行环境等原因必须装Ubuntu 20.04或者你机器装完系统之后网卡完全不认、系统一片死寂那你就是这篇博文的目标读者。我会尽量把原理讲明白步骤写到可以直接复制执行的程度顺带把那些特别容易让人误判的报错信息也一并拆掉。1. 起因复盘为什么2025年的机器还会卡在“只有lo”1.1 抱着“生产环境不能乱升级”的心态选了20.04先说这台机器的背景。朋友的实验室进了一批2025年的高配整机Z890芯片组、Intel 13/14代处理器、板载2.5G有线、Intel AX211无线网卡配的还是一块新出的N卡。按道理这种机器装Ubuntu 24.04甚至25.04才是最省心的但实验室里有套老旧的工业控制软件官方只认证了Ubuntu 20.04 LTS内核超过5.15就可能出现时序错误所以他们硬性要求必须在20.04底下跑。这就是问题的根源。Ubuntu 20.04 LTS首发于2020年4月初始内核是5.4。到了2025年换个说法就是你的操作系统还停留在“WiFi 6刚起步、2.5G网卡还属于高端外设”的时代而你的硬件已经跑到了“WiFi 7标配、2.5G板载起步”的版本。内核不认识网卡自然不会创建对应的网络接口于是ip link里只剩一个lo。如果你不理解为什么“内核不认识网卡”会导致没有网络接口可以打个比方网卡驱动是钥匙内核是锁芯硬件是那扇门。系统启动的时候孵化器会扫描所有PCI设备找到网卡之后尝试给设备装驱动。如果驱动不存在设备就处于“裸奔”状态内核不会为它创建一个叫eth0或wlan0的虚拟接口。lo是回环地址属于内核自带的虚拟设备不需要任何硬件驱动所以它永远都在。看到只有lo基本可以断定是“设备没被驱动起来”而不是简单的网络配置问题。1.2 症状定义别把“没有网卡”和“网线没插好”混为一谈很多人遇到断网第一反应是插拔网线、重启路由器、检查网卡是不是被禁用。但在这种新硬件装旧系统的情况下问题不在链路而在设备本身。判断起来其实很简单ip link show如果输出里只有lo其他什么都没有那说明系统根本没有识别到你的物理网卡。这时候你疯狂插拔网线、调DHCP、重启NetworkManager全是白费功夫。正确的思路只有一个让内核“看见”这块网卡。那怎么让内核看见呢无非三条路换一个认识这块网卡的内核升级内核/HWE给现有内核补上对应的驱动模块离线装驱动deb或DKMS让这块网卡“伪装”成内核认识的设备外接一个老款USB网卡绕开问题这三种办法后面我都会详细讲它们不是互斥关系而是递进关系。实际救砖过程中我建议从第三条开始因为它最快能立刻给你一个有网络的系统然后再去慢慢解决原生网卡的问题。1.3 2025年常见的“消失网卡”阵容先给你一张我在各个群和论坛里观察到的“新硬件旧系统断网”常见清单方便你提前对号入座网卡型号常见于内核支持情况简述Intel I225-V / I226-V中高端主板板载2.5GI225从5.4后陆续完善I226部分型号需要5.17Realtek RTL8125BG / RTL8126入门级主板板载2.5GRTL8125在较新内核里用r8169驱动老内核兼容一般RTL8126更晚Intel AX210 / AX211笔记本/主板WiFi 6E需要5.10内核且linux-firmware要够新Intel BE200新平台WiFi 7需要6.4内核20.04的5.4/5.15都搞不定Mediatek MT7925部分笔记本WiFi 7同样要6.6内核Realtek RTL8156 USB 2.5GUSB外置网卡老内核支持不完整容易频繁掉线如果你拿lspci -nnk | grep -i net查出来的网卡型号命中上面任何一行那基本不用再怀疑是系统配置问题了老老实实往“换内核/换驱动”的方向走。2. 排障前半场先搞清楚是驱动、固件、还是配置问题2.1 三步定位法lspci、dmesg、nmcli救砖最忌讳的事情就是瞎试。我见过有人连系统都没看清就开始重装、换源、禁用NetworkManager结果越搞越乱。正确的排障顺序应该是先把信息收集全。第一步确认设备是否存在lspci -nnk | grep -i -A3 net如果输出里能看到类似Ethernet controller [0200]: Intel Corporation Device [8086:125c]这样的内容那说明PCI设备是存在的只是后面Kernel driver in use那行显示的是空白或者Kernel modules那一栏没有任何模块这就是“设备在但驱动没绑定”的典型状态。第二步看内核日志dmesg | grep -iE firmware|eth|wifi|igc|r8169|iwl|mt7925|error这里最关键的三个信息有没有 “Direct firmware load for ... failed” 这类固件加载失败提示有没有 “No device found” 或 “operation not supported” 的驱动报错有没有网卡检测到了但初始化失败。固件加载失败和驱动缺失是两种完全不同的坑修法完全不一样。第三步看网络管理工具视角nmcli deviceNetworkManager的视角有时和内核不一样。内核已经创造了接口但NetworkManager没托管和内核压根没创造接口在nmcli device里是两种表现。前者说明设备已经驱动了问题在配置层后者说明还要回到内核层面处理。这三步跑完你基本就能确定自己属于哪一类。我在那台2025新机器上跑lspci的时候网卡设备能查到但Kernel driver in use是空的dmesg里也没有明显报错。说白了就是内核版本太老连这个设备的驱动模块都没有编译进去当然更谈不上绑定。2.2 看驱动还是看固件missing firmware 是最常被忽略的一环很多人以为“有驱动”就等于“能上网”其实中间还隔着一个关键环节固件。网卡芯片出厂后很多驱动不是把每一个硬件状态都写在代码里的而是需要从操作系统加载一个数据文件告诉芯片怎么初始化。这个数据文件一般放在/lib/firmware下面由linux-firmware包管理。在老内核上装新网卡经常出现的情况是这样的驱动模块已经存在也能把设备认出来但在初始化最后一步去/lib/firmware下找对应固件文件发现版本太老、没有这个型号的文件于是整个设备初始化失败接口还是不会出现。怎么判断是不是固件问题很简单就看dmesg里面有没有failed和firmware同时出现的行。比如iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-so-a0-hr-b0-89.ucode failed with error -2这一行已经说得很明白了驱动找到了但固件文件不存在。解法就不是换内核而是更新linux-firmware包或者手动把新版固件文件拷到/lib/firmware下。固件文件一般也是从更新版本的系统里提取本质上是数据文件拷贝过来之后重载模块或者重启即可。2.3 小心被无关报错带偏sourcemap 报错与浏览器打不开网页排障过程中最容易让人心烦的其实是那些毫无相关性的噪音报错。我在救砖时桌面环境里弹出一个崩溃上报窗口里面有一条日志error when using sourcemap for reporting an error: cant resolve original lo第一眼我还以为系统在提示“lo无法解析”吓得以为回环接口都出问题了。后来仔细一看这是崩溃采集工具自身的SourceMap映射错误跟网卡、跟lo接口没有半毛钱关系。这类日志常见于那些用Electron/Web技术栈写的系统工具里。遇到这种报错最简单的处理方式就是忽略它别让它干扰诊断方向。类似的迷惑现象还有“网页打不开但视频App可以看”。有人会觉得这也是断网了急着去重装驱动。实际上视频App往往走的是独立CDN或自建协议对DNS解析的依赖没那么强而浏览器打开网页需要完整的DNS解析、TCP建连、HTTP代理链路。你看到的现象是“网页不行、视频可以”反而说明物理链路和网卡是通的大概率问题出在DNS、MTU或代理配置上。这跟“只有lo”完全是两个维度的故障千万别混为一谈。3. 救砖技术路线离线、临时网、换内核的三层递进3.1 最低成本方案USB外接有线网卡和手机USB共享拿到一台“只有lo”的机器我做的第一件事不是折腾内核而是先想办法给它一条临时网络通道。只要有了网络剩下的事就好办多了。最省事的是找一个USB外接有线网卡注意要找那种老芯片的比如RTL8153、AX88179。这两个芯片在Linux内核里支持得非常早5.4内核就能直接驱动。插上去之后大概率会出现一个新的网络接口。如果系统是Desktop版NetworkManager一般会自动把它配置成DHCP如果是Server版可能需要手动跑一下sudo dhclient enx00e04c123456enx开头的接口名是根据网卡MAC地址自动生成的USB网卡接口名你可以用ip link先确认一下实际接口名。这种方式最快五分钟就能让机器联网后面不管是用apt装驱动还是安装新的HWE内核都有了基础。如果手边没有老款USB网卡还有一个几乎人人都有的大杀器安卓手机USB共享网络。手机插上USB线打开“USB网络共享”Ubuntu通常会把手机识别成一个RNDIS或CDC以太网设备生成类似usb0或enp0s20u1的接口。这个功能依赖usbnet和cdc_ether模块它们在默认内核里都是编进去的不太容易缺。我这次就靠一台旧安卓手机给机器续了命之后才去慢慢装驱动。3.2 中间方案在另一台机器上下载deb包离线安装临时网络只解决“能不能动”的问题真正让板载网卡工作还是要给系统装对应驱动或换内核。如果临时网络因为某些原因用不了或者你想一步到位离线处理可以在另一台同样架构的Ubuntu机器上提前下载好deb包通过U盘带过去装。比如你要升级到20.04 HWE的内核5.15可以在另一台联网的20.04机器上执行apt download linux-image-5.15.0-119-generic linux-modules-5.15.0-119-generic linux-modules-extra-5.15.0-119-generic linux-headers-5.15.0-119-generic然后把所有.deb文件放到U盘拿到目标机器上sudo dpkg -i *.deb这里有几个坑要提醒你。第一linux-modules-extra这个包特别大而且不同版本号必须和内核版本严格对应下载时要看清版本。第二如果目标机器没有initramfs-tools或者版本太老装内核包时可能会报post-install脚本错误这时先别慌等临时网络有了之后跑一遍sudo apt -f install就能修好。第三下载deb时最好在同一系列的发行版上做比如都是20.04、都是amd64不然容易出现依赖库版本不匹配的问题。如果你需要的驱动不在发行版的软件源里比如某些Realtek网卡必须用官方提供的r8168-dkms、r8125-dkms源码包那就把这个dkms包的deb也一起下载带过去。装完之后记得跑一下sudo modprobe r8168然后看dmesg确认模块有没有正常加载。DKMS的好处是将来升级内核时模块会自动重新编译比手动insmod编译出来的模块稳定得多。3.3 终极方案用新版Live USB chroot救砖如果你的机器连系统都启动不到桌面或者你不想在目标机器上反复试错那我强烈推荐用“新版Live USB chroot”的方式救砖。道理很简单用Ubuntu 24.04的Live系统启动这个新内核能完美识别你2025年的网卡然后我们通过chroot进入到原本20.04的系统里在里面装好新内核再退出重启。具体步骤如下。先用Ubuntu 24.04的安装U盘启动选择“试用(Try Ubuntu)”。进入Live桌面后打开终端先看一下系统磁盘分区lsblk假设你的Linux根分区是/dev/nvme0n1p2EFI引导分区是/dev/nvme0n1p1那就把根分区挂到/mnt然后把引导分区也挂进去sudo mount /dev/nvme0n1p2 /mnt sudo mkdir -p /mnt/boot/efi sudo mount /dev/nvme0n1p1 /mnt/boot/efi接着把Live系统里的/dev、/proc、/sys这些虚拟文件系统绑定到chroot环境里不然chroot进去之后很多命令会失灵sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys现在进入这个环境sudo chroot /mnt /bin/bash进去之后你先确认一下当前内核版本和软件源结构uname -r cat /etc/os-release然后直接用apt安装HWE内核apt update apt install linux-generic-hwe-20.04装完之后重建引导菜单update-grub update-initramfs -u exit reboot拔掉U盘重启用新内核进入系统。这一步看起来简单但确实是几乎所有“救砖”场景的通用底牌。不光适用网卡不认也适用显卡黑屏、引导损坏等各种情况。你可以在chroot里做很多事情重装grub、删除坏驱动、恢复被改坏的配置文件相当于给系统做了一次“外科手术”。当年我在恩山论坛看那些路由器盒子救砖教程思路也是一样的先找一个能启动的最小环境再进去把系统分区里损坏的东西修好。只不过桌面Linux的“最小环境”是Live系统“进去修”的方式是chroot而已。3.4 关于Secure Boot和BIOS设置的“隐藏闸门”救砖路上还有一类坑跟软件无关却在硬件层直接把设备禁掉了。比如有些主板的BIOS里默认开启“Wake on LAN”或“ErP Ready”关机状态下网卡供电会被完全切断还有Intel VMD、SR-IOV这些选项会影响设备枚举方式。最典型的是Secure Boot开启状态下Linux内核只能加载有签名认证的模块你从网上下载的、自己编译的驱动模块根本没签名就算装上了也会被拒绝加载。怎么判断是不是Secure Boot拦的很简单执行mokutil --sb-state显示SecureBoot enabled就说明处于开启状态。对于离线编译的驱动要么去BIOS里关掉Secure Boot要么用mokutil --import导入自己生成的密钥并签名但后者步骤繁琐大多数人直接关掉了。我这台机器一开始没关Secure Boot结果装完HWE内核重启后居然还是只有lo查了半天才发现新版内核模块因为签名问题被拒载了。这个坑特别容易出现在“驱动装好了但网卡还是不亮”的场景里后面我会专门再讲。4. 实战记录一台2025顶配机的完整修复流水账4.1 现场信息收集真实命令输出示例下面是我在这台机器上跑到的实际信息给你一个直观参照。进入20.04系统后ip link show输出1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00没有任何物理接口。再看PCI设备lspci -nnk | grep -i -A3 net输出05:00.0 Ethernet controller [0200]: Intel Corporation Device [8086:125c] (rev 04) Subsystem: ASUSTeK Computer Inc. Device [1043:87c7] Kernel driver in use: (none) Kernel modules: igc关键信息很清楚设备是Intel的Subsystem显示是华硕主板板载Kernel driver in use是空的但内核里面其实已经编译了igc模块只是这个版本的igc模块不认识这个新硬件ID。这种情况不需要联网下载源码只需要一个更新版本的igc驱动而它已经在5.15 HWE内核里了。4.2 下载与安装HWE内核确认是Intel I226-V网卡之后我的路线就很明确了把20.04的内核从5.4升到5.15 HWE。前面提到我已经用手机USB共享让机器临时联网了所以直接执行sudo apt update sudo apt install linux-generic-hwe-20.04这条命令会把5.15版本的kernel image、modules、headers全部装好。如果你的机器是NVIDIA显卡注意一下当前安装的驱动是不是DKMS版本因为换内核之后NVIDIA的驱动模块需要重新编译一次。新版NVIDIA驱动比如你搜索NVIDIA 520 Linux 64-bit Ubuntu 20.04时看到的那种对内核版本很敏感old kernel和new kernel之间的DKMS编译成功率并不高建议换完内核后重新跑一遍驱动安装器。装完后我特意看了下grub有没有把新内核设为默认grep menuentry /boot/grub/grub.cfg | head然后重启。进系统后再看ip link show这次出来了enp5s0接口虽然还没配置IP但设备已经被内核认出来了。这一步完成了整个救砖过程的90%。4.3 更新固件与重启验证网卡接口出现之后还有一个潜在隐患固件太旧。虽然Intel的igc驱动不太依赖linux-firmware但无线网卡不是这样。如果无线网卡也指望不上建议顺手把linux-firmware也更新一下sudo apt install linux-firmwareUbuntu 20.04 LTS的更新源里其实会持续发布linux-firmware的更新版本不一定非要跳到24.04去拿。装完固件包之后最好重新生成一下initramfs确保系统启动早期就能加载到新固件sudo update-initramfs -u重启之后验证网络配置。如果是Desktop版本NetworkManager会自动接管有线网卡可以看nmcli device status或者直接看IPip addr show我这次重启之后有线网卡拿到了正常的IP马上apt update测试源连通性随后再把软件源切到国内清华镜像速度立刻回到了正常水平。这个过程中我最大的体会是新硬件装旧系统最怕的不是没网而是你把时间和精力花在错误的排查方向上。4.4 网络恢复后的系统加固网络通了不代表万事大吉。我建议做这几件加固动作避免下次重启又“玄学断网”。第一确认开机自动加载的模块没有留给系统猜。可以把对应驱动写进模块加载列表echo igc | sudo tee /etc/modules-load.d/igc.conf第二把默认内核固定为刚装的HWE内核不然以后apt autoremove可能把老内核清理掉导致回退风险。可以在/etc/default/grub里通过GRUB_DEFAULT指定或者干脆在系统里装一个linux-image-5.15-generic这种虚拟包让它跟着HWE长期版本走。第三如果你的无线网卡也依赖新固件把/lib/firmware里那些新出现的固件文件备份一下。以后万一有人误更新了linux-firmware导致回退你可以快速恢复。5. 常见问题与避坑清单5.1 驱动明明装上了为什么网卡还是不亮这可能是排障中最让人崩溃的剧情。模块加载成功、lspci也显示驱动绑定正常但接口还是没有。这时候要从三个方向排查。首先看Secure Boot。前面说过了内核模块如果没有合法签名在Secure Boot开启时会被静默拒绝加载。虽然lspci显示Kernel driver in use是模块名但模块是绑定了还是被拦截了要看dmesg里的实际行为。如果出现Lockdown: insmod: ... is restricted或模块签名相关的错误那基本就是Secure Boot的问题。其次看固件。驱动绑定了但firmware加载失败设备初始化会中止。这种情形dmesg里通常有很明确的Direct firmware load for ... failed提示把对应的.ucode或.bin文件放到/lib/firmware对应目录即可。最后检查NetworkManager或netplan的托管状态。接口存在、有IP地址但NM没托管也会让你感觉“网卡没起来”。执行nmcli device connect enp5s0手动托管一次就能验证。5.2 为什么下载的deb包会缺依赖离线装驱动最头疼的问题就是依赖链。你以为只缺一个包装的时候告诉你需要两个装完这两个又告诉你还需要三个循环往复。我的经验是两条路。第一如果临时网络已经通了就直接apt install让系统自动解决依赖离线下载只是一个备选方案。第二确实只能离线时用另一台同版本机器执行apt-rdepends把依赖列表拉出来或者更简单粗暴一点直接把linux-modules-extra这个包带上很多网卡固件和辅助模块都藏在里面。另外对于dkms驱动的源码包依赖通常只有dkms、build-essential、linux-headers-$(uname -r)这几个包在装了HWE内核后一定要保证版本匹配。dpkg -i报依赖错误时先别加--force-all硬装容易把dpkg数据库搞乱正确姿势是先把缺失的依赖补齐。5.3 网页打不开、视频能看算不算断网这个问题看起来很简单但放在“救砖”这个语境里很多人真的会判断错。设备有IP、能ping通网关、DNS也能解析但浏览器里就是弹出断网小恐龙这种情况通常不是网卡问题而是HTTP代理、DNS或MTU的问题。分辨方法很简单先ping 223.5.5.5通不通再ping www.baidu.com如果IP能通而域名不通那就是DNS问题。如果域名也通但浏览器打不开看看系统代理设置。如果是公司局域网里出现网页打不开、视频App能看的情况还要考虑802.1X认证、透明代理和防火墙策略。这个现象和文章主题“只有lo”不是同一个故障层面但也算救砖场景里常见的干扰项列出来帮你少走弯路。5.4 救砖思路可以跨领域复用最后聊点通用的东西。你可能注意到恩山论坛上那些路由器、电视盒子的救砖教程和我们这次桌面Linux的chroot救砖在底层逻辑上惊人地一致先想办法进到一个可用的最小系统再操作文件系统层面的修复最后恢复启动引导。我自己看别人给EC6108V9C或小米路由器4C救砖时学到的是“不要慌、不要重刷一遍乱试先把当前状态完整的备份”这个习惯放到Ubuntu里同样适用救砖之前至少要把/etc、/boot和dpkg状态备份一下出了任何意外都能倒回去。之所以叫救砖“全纪实”是因为这个过程里真的有很多看起来像玄学、其实全是硬逻辑的瞬间。比如你以为装个驱动就好结果被Secure Boot拦了一小时你以为内核升级完网络就通结果卡在无线网卡固件上。但只要按“设备是否存在 → 驱动是否绑定 → 固件是否加载 → 接口是否配置”这条主线走再怪的故障也能找到出口。我个人在实际操作中的体会是遇到“2025新硬件 2020旧系统”这种组合最快、最稳的做法不是去补旧内核的驱动而是直接上一个新版Live USB借助新系统的内核把硬件认全然后chroot进去做系统层面的升级。这比在一台半残系统里瞎折腾高效太多了。最后再分享一个小技巧救砖那台机器的手机USB共享在Ubuntu里其实是非常好用的“保命通道”以后遇到任何系统级问题先把这根线插上手机打开USB共享你就已经赢了一半。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进