dmesg是排查网卡驱动异常和硬件链路故障的首要工具,可捕获启动初期、驱动加载、热插拔等关键内核日志;通过多维度grep过滤、iso时间戳增强及典型错误模式识别,精准定位firmware缺失、phy超时、固件致命错误、irq冲突等问题,并需结合ethtool、lspci交叉验证。

直接用 dmesg 查网卡驱动日志,关键不是“全看”,而是“精准捕获+上下文还原”。它记录的是内核刚见到网卡、加载驱动、建立链路那一瞬间的真实反应,比 ip link 或 ethtool 更早、更底层。
快速过滤出真正相关的网卡日志
别只搜 eth0 或 error,容易漏掉关键线索。推荐组合过滤:
-
dmesg | grep -i "eno\|ens\|enp\|em\|ib\|net\|link\|phy\|firmware\|timeout\|reset\|failed"——覆盖主流命名(如eno1、ens3f0)和典型故障词 -
dmesg | grep -A2 -B2 -i "e1000e\|igb\|ixgbe\|i40e\|mlx5_core\|r8169"——针对具体驱动名,前后两行一起看,避免断章取义(比如错误在第三行,但驱动名在第一行) -
dmesg --time-format=iso | grep -i "link.*up\|link.*down\|carrier lost\|no carrier"——用稳定时间戳定位链路震荡时刻,比-T更准
重点识别这几类典型报错信号
驱动没加载成功,dmesg 不会说“驱动坏了”,而是暴露 probe 阶段失败的具体表现:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
e1000e: eth0: Failed to load firmware→ 缺固件,装firmware-e1000e包,再modprobe -r e1000e && modprobe e1000e -
igb: eth0: Cannot get PHY settings, err=-110→-110是超时,检查网线、SFP 模块供电或交换机端口是否关闭 -
mlx5_core 0000:02:00.0: firmware fatal error→ 需升级网卡固件,用mstflint或厂商工具 -
r8169: eth0: rtl8169_interrupt: no IRQ or wrong IRQ→ Realtek 经典 IRQ 冲突,换r8168驱动更稳
配合时间与上下文判断真实问题
单看一行报错容易误判,要结合时间、设备地址和现象交叉验证:
- 用
dmesg --time-format=iso | tail -30看最近动作,确认是不是你刚插网线/重启服务后触发的 - 看到
Link is Down和Link is Up频繁交替 → 物理层不稳,优先查水晶头松动、光纤弯曲、SFP 型号不匹配(单模/多模混用) - 报错里带 PCI 地址(如
0000:02:00.0)→ 立刻执行lspci -vv -s 0000:02:00.0看设备状态和能力,确认是否被 BIOS 屏蔽(如 SR-IOV、PXE 开关冲突) - 如果
ifconfig显示 up 但ethtool eno1显示Link detected: no→ 说明驱动加载了,但物理链路没通,dmesg里大概率有PHY status changed: link=0
避免常见陷阱:日志丢了、时间不准、权限不够
不是没报错,是没看到:
- 缓冲区太小,新日志刷掉旧的 → 插设备前先运行
dmesg -c清空,再操作 - 非 root 用户看不到完整字段(如寄存器值、地址)→ 临时放开:
echo 'kernel.dmesg_restrict = 0' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p -
dmesg -T时间不准(尤其虚拟机/NTP 同步后)→ 改用dmesg --time-format=iso,输出稳定 ISO 时间 - 想持续观察热插拔?用
dmesg -w --time-format=iso,Ctrl+C 退出










