dmesg中出现“link is not ready”或“link down”表明网卡物理链路协商失败,常见于驱动初始化或热插拔后,需结合ethtool、journalctl及物理层检查综合诊断。

看 dmesg 里有没有 “link is not ready” 或 “link down” 类报错
网卡物理链路协商失败,dmesg 通常不会直接说“协商失败”,而是暴露结果:链路起不来。最常见的是内核打印出类似 igb 0000:01:00.0: link is not ready 或 e1000e 0000:02:00.0: NIC Link is Down 的日志。这类信息一般出现在网卡驱动初始化或热插拔后几秒内,不是持续刷屏,得抓紧时间查。
实操建议:
- 插上网线后立刻执行
dmesg -T | tail -n 50(带时间戳更易定位) - 用
dmesg -T | grep -i "link.*down\|not ready\|autoneg\|speed.*duplex"过滤关键线索 - 如果系统启用了
systemd-journald,也可查journalctl -k -S "1 minute ago" | grep -i link,避免日志被刷掉
重点盯住 autoneg 和 speed/duplex 相关字段
协商失败的根因往往藏在驱动打印的协商参数里。比如 e1000e 驱动会输出类似 Advertised auto-negotation: 1, Advertised speeds: 1000baseT/Full, 100baseTx/Full, 10baseT/Full;而对端(交换机或另一台设备)若强制设为 1000baseT/Full 且关闭 auto-neg,本端又启用了 auto-neg,就可能卡在协商阶段,最终 link 不 up。
实操建议:
- 确认网卡是否被强制设速:
ethtool eth0 | grep -E "(Speed|Duplex|Auto-negotiation)" - 对比两端配置:交换机端是否禁用了 auto-neg?Linux 端是否误用了
ethtool -s eth0 speed 1000 duplex full autoneg off? -
autoneg off在光纤模块或老旧交换机上容易出问题,除非明确知道对端也关了 auto-neg,否则不建议关
dmesg 没报错但 link 仍不通?可能是 PHY 初始化失败或固件问题
有些网卡(尤其是 Realtek RTL8168、某些 Marvell 88E6xxx PHY)在内核启动早期 PHY 没识别成功,dmesg 只会安静地跳过,不报错也不 up link。典型表现是 ip link show eth0 显示 state DOWN,但 dmesg 里连驱动名都搜不到。
实操建议:
- 检查驱动是否加载:
lspci -k -s $(lspci | grep Ethernet | head -n1 | awk '{print $1}'),看Kernel driver in use是否为空 - 某些 Realtek 卡需要额外固件,缺了就静默失败;查
dmesg | grep -i firmware,留意Failed to load firmware提示 - 尝试手动重载驱动:
modprobe -r r8169 && modprobe r8169(注意 r8169 是通用驱动,部分 RTL8168 实际要用r8168专驱)
别只盯着 dmesg —— 物理层问题必须交叉验证
dmesg 只反映内核视角的链路状态,它看不到网线断了、RJ45 插歪了、交换机端口 shutdown 了、或者 SFP 模块供电异常。很多“协商失败”本质是物理连接压根没建立。
实操建议:
- 先看网卡指示灯:Link 灯不亮?那
dmesg再多信息也没用 - 换根已知好用的网线,直连另一台 Linux 主机,用
ethtool两边同时查协商结果 - 用
mii-tool -v eth0(旧卡)或ethtool -m eth0(支持 SFP 的卡)读取 PHY 原始寄存器,看Basic status是否含Link status: No
真正难啃的 case 往往是:dmesg 有报错,但和实际物理状态对不上——比如显示 auto-neg 成功却 link down,这时候得怀疑 PHY 寄存器被锁死、主板 PCIe 通道异常,或者 BIOS 里网卡被设成了 “Disabled when no cable detected”。这些点,dmesg 不会主动告诉你。











