Using journalctl to Track Down the Hidden ‘eth0’ Carrier Lost Messages That Cause Network Flaps After a Kernel Upgrade

When a kernel upgrade silently breaks your network

Kernel upgrades are usually painless, but on a few systems they can trigger a cascade of “carrier lost” messages that make the interface drop and come back up repeatedly. The messages are buried deep in the system journal, so you may not notice them until the network flaps start causing outages. This post shows how to locate those hidden messages with journalctl, correlate them with real‑world symptoms, and apply a fix that keeps the interface stable.


Why the logs are hidden

Systemd’s journal stores kernel, system, and application logs in a binary format. By default, journalctl shows only the most recent entries, and the kernel’s “carrier lost” notifications are logged at the warning level. If you run journalctl without filters, the output is flooded with other kernel activity, making the carrier messages hard to spot.

The kernel emits a line similar to:

[  123.456789] eth0: link down
[  123.456790] eth0: link up

When a kernel upgrade changes the driver or the way it reports link status, these messages can become frequent, even if the interface is still operational. The system may keep sending “carrier lost” events, which can trigger networkd’s retry logic and cause intermittent connectivity.


Reproducing the issue

  1. Upgrade the kernel (e.g., apt upgrade linux-image-6.6.0-26-generic on Debian/Ubuntu, yum update kernel on RHEL, or zypper patch kernel-default on openSUSE).
  2. Reboot into the new kernel.
  3. Verify the interface: ip link show eth0. It should be state UP.
  4. Trigger a network flap: ping -c 4 8.8.8.8. If you see intermittent failures or a sudden drop, the kernel is probably emitting carrier lost messages.

Using journalctl to hunt

The first step is to isolate the kernel messages that mention the interface. The following command shows only kernel entries for the current boot:

journalctl -b -k

Add a filter for the interface name:

journalctl -b -k | grep -i eth0

If you want to see the exact priority level, use -p:

journalctl -b -k -p warning | grep -i eth0

The -p warning flag limits the output to warning‑level messages, which includes the “carrier lost” lines you’re hunting for.


Fixing the problem

Once you’ve confirmed that the kernel is spamming the carrier messages, the real trick is to stop the chatter without disabling the network stack. Most of the time the culprit is a buggy driver or firmware mismatch. Here’s a pragmatic playbook:

  1. Check for firmware updates – many NICs ship with a separate firmware package that the kernel loads at boot. On Debian/Ubuntu you can run:

    sudo apt install linux-firmware
    

    On RHEL-based systems the firmware lives in the linux-firmware package as well. After installing, reboot and see if the flapping stops.

  2. Force the driver to ignore carrier loss – some drivers expose a sysfs knob. For Intel NICs, for example:

    echo 1 | sudo tee /sys/class/net/eth0/device/driver/unbind
    sudo modprobe -r e1000e
    sudo modprobe e1000e
    

    This resets the driver. If the flaps stop, you know the kernel was the issue.

  3. Use ethtool to tweak link settings – disabling auto‑negotiation or forcing a speed/duplex combo can sidestep the buggy status reporting:

    sudo ethtool -s eth0 speed 1000 duplex full autoneg off
    

    After that, monitor the logs again. If the carrier lost messages disappear, the driver was mis‑reporting the link state.

  4. Tell systemd‑networkd to be more forgiving – add a tiny override in /etc/systemd/network/10-eth0.network:

    [Link]
    IgnoreCarrierLoss=yes
    

    Then restart networkd:

    sudo systemctl restart systemd-networkd
    

    This is a last‑resort hack; it masks the symptom but keeps the interface up.

  5. If all else fails, pin the kernel – roll back to the previous version that worked. Use apt list --installed | grep linux-image to see what you have, then sudo apt install linux-image-<old-version> and reboot.


What to look for in the logs

After you’ve applied a fix, keep an eye on the journal for a few minutes:

journalctl -f -k -p warning | grep -i eth0

If you see no more “link down/up” churn, you’re good. If the warnings persist but the interface stays up, the network stack is probably handling the noise gracefully.


Final thoughts

Kernel upgrades are a necessary evil. They bring new features, security patches, and sometimes, subtle regressions that only show up under specific hardware. By learning how to dig into journalctl and isolate the noisy messages, you can quickly determine whether it’s a driver bug, firmware mismatch, or a misbehaving network service. And once you’ve identified the root cause, the fix is often as simple as updating firmware, tweaking driver settings, or adding a small config override.


See also