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

dmesg 是 Linux 内核环形缓冲区的日志快照,是排查网卡驱动异常和底层硬件链路问题的第一手线索。它不经过 syslog,能捕获系统启动初期、驱动加载、热插拔、链路状态突变等关键瞬间的内核级输出,尤其适合定位“ping 不通但 ifconfig 显示 up”、“网卡频繁 down/up”、“收发包为 0”等典型故障。
快速定位网卡相关内核报错
执行以下命令可过滤出与网卡(包括驱动名、PCI 设备、MAC 地址、链路事件)强相关的日志:
- dmesg | grep -i "eth\|enp\|em\|eno\|ens\|ib\|net\|link\|phy\|firmware\|timeout\|reset\|failed\|error\|warn" —— 覆盖主流网卡命名(如 eno1、ens3f0)及常见关键词
- dmesg | grep -A2 -B2 "e1000e\|igb\|ixgbe\|i40e\|mlx5_core\|r8169\|virtio_net" —— 针对具体驱动(如 Intel e1000e、Mellanox mlx5)前后两行上下文,避免断章取义
- dmesg -T | grep "link.*down\|link.*up\|carrier lost\|no carrier" —— 加 -T 显示可读时间戳,精准捕捉链路震荡时刻
识别典型驱动层报错模式
以下错误多由驱动兼容性、固件缺失或参数配置不当引发:
- “e1000e: eth0: Failed to load firmware”:需安装对应固件包(如 firmware-e1000e),重启或重载驱动(modprobe -r e1000e && modprobe e1000e)
- “igb: eth0: Cannot get PHY settings, err=-110”:-110 表示 ETIMEDOUT,常见于 PHY 通信失败,检查网线、SFP 模块供电或交换机端口是否关闭
- “mlx5_core 0000:02:00.0: firmware fatal error”:需升级网卡固件(使用 mstflint 或厂商工具)并确认内核模块版本匹配
- “r8169: eth0: rtl8169_interrupt: no IRQ or wrong IRQ”:Realtek 网卡经典问题,建议换用开源 r8168 驱动
发现硬件链路层异常信号
物理层问题常表现为周期性、低层级日志,需结合现象交叉判断:
- “Link is Down”, “Link is Up - 1000/Full” 频繁交替:检查网线水晶头松动、光纤弯曲/污染、SFP 模块型号不匹配(如单模/多模混用)、交换机端口 flapping
- “PHY status changed: link=0, speed=0, duplex=0”:PHY 层未建立连接,优先排除物理连通性,再查网卡 BIOS 设置(如 PXE、SR-IOV 是否冲突)
- “TX hang”, “RX queue stuck”, “watchdog timeout”:非软件死锁即硬件收发器异常,可尝试禁用 LRO/GRO(ethtool -K eth0 lro off gro off)验证
- PCI 相关错误如 “Uncorrectable error (Non-Fatal)” 或 “AER: Multiple correctable errors”:指向主板 PCIe 插槽、网卡金手指氧化或供电不稳,可换插槽或清理测试
配合其他工具交叉验证
dmesg 提供的是“发生了什么”,还需结合以下命令确认“现在怎么样”:
- ethtool eth0:查看 Link detected、Speed、Duplex、driver/firmware 版本、NIC 统计(tx/rx_errors、rx_missed_errors)
- lspci -vv -s $(lspci | grep Ethernet | head -n1 | awk '{print $1}'):检查 PCI 配置空间是否正常(如 Capabilities、MSI-X、Power Management)
- cat /sys/class/net/eth0/device/{uevent,resource}:确认设备绑定状态与内存/IO 资源分配
- journalctl -k | grep -i "eth0\|net":补充 systemd 管理的内核日志(部分发行版 dmesg 缓冲可能被覆盖)











