Skip to main content

Linux Kernel aufräumen

Einleitung

Aktuell verwende ich zwei verschiedene Kernel auf meinem Fedora 44 System. Den Standard Kernel, der von Fedora ausgeliefert wird und zusätzlich, weil ich mit dem System auch viel spiele, den an Fedora angepassten CachyOS Kernel (den bekommt man hier: https://github.com/CachyOS/copr-linux-cachyos).

Dadurch wird es auf der /boot Partition manchmal etwas eng (ja, ich weiß ... mach sie doch größer oder sag DNF einfach, es soll nicht so viele Kernel aufbewahren) und man sollte ab und an mal "durch wischen" um die alten Kernel aufzuräumen, damit es keinen Fehler beim nächsten Update gibt.

Kernel Versionen auflisten

Also erstes sollte man mal schauen, welche Kernel Versionen auf dem System aktuell überhaupt installiert sind:

uname -r

rpm -q kernel-core --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort -V

# Wenn man wie ich einen CachyOS Kernel im Einsatz hat!
# Mit dem 7.1er Kernel hat der Maintainer den Namen des Kernel an den Standard Kernel angepasst, 
# so dass diese Zeile eigentlich obsolet ist, ich lass sie aber mal zur Dokumentation drin.
rpm -q kernel-cachyos-core --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort -V

Kernel Versionen

CachyOS Kernel

Zusätzlich prüfen, welcher Kernel aktuell verwendet wird:

sudo grubby --default-kernel

default kernel

Einen bestimmten Kernel definiert entfernen

Als Beispiel entfernen wir hier jetzt den Kernel 7.0.11-cachyos1.fc44.x86_64 den hab ich extra für das Wiki noch drauf gelassen.

 Alle zugehörigen Pakete anzeigen lassen (KVER an den entsprechenden Kernel anpassen):

KVER='7.0.11-cachyos1.fc44.x86_64'

#Bei nicht CachyOS Kerneln:
rpm -qa | grep -E "^(kernel|kernel-core|kernel-modules|kernel-modules-core|kernel-modules-extra|kernel-devel|kernel-devel-matched)-${KVER}(\.|$)" | sort

#Bei CachyOS Kerneln:
rpm -qa | grep -E "^(kernel-cachyos|kernel-cachyos-core|kernel-cachyos-modules|kernel-cachyos-modules-core|kernel-cachyos-modules-extra|kernel-cachyos-devel|kernel-cachyos-devel-matched)-${KVER}(\.|$)" | sort

CachyOS Kernel Module

Da sieht nach den erwarteten Paketen aus. Nun kann man diese Pakete aus dem System entfernen:

KVER='7.0.11-cachyos1.fc44.x86_64'

# Für den Standard Kernel
mapfile -t KERNEL_PKGS < <(
  rpm -qa | grep -E "^(kernel|kernel-core|kernel-modules|kernel-modules-core|kernel-modules-extra|kernel-devel|kernel-devel-matched)-${KVER}(\.|$)"
)

# Für CachyOS Kernel
mapfile -t KERNEL_PKGS < <(
  rpm -qa | grep -E "^(kernel-cachyos|kernel-cachyos-core|kernel-cachyos-modules|kernel-cachyos-modules-core|kernel-cachyos-modules-extra|kernel-cachyos-devel|kernel-cachyos-devel-matched)-${KVER}(\.|$)"
)

printf '%s\n' "${KERNEL_PKGS[@]}"

if (( ${#KERNEL_PKGS[@]} > 0 )); then
    sudo dnf5 remove "${KERNEL_PKGS[@]}"
else
    echo "Keine Pakete für Kernel ${KVER} gefunden."
fi

grafik.png

Das kann man nun für alle zu entfernenden Kernel wiederholen um damit sauber einzelne Kernel aus dem System zu entfernen.

Vorsorgemaßnahmen

Man kann natürlich auch vorher sicherstellen, dass DNF nicht zu viele Kernel aufbewahrt (in meinem Fall möchte ich aber gerne für Tests auch mal mehr als eine Version zurück, daher war das erst mal keine Option und ich mache das eben "von Hand").

sudo vi /etc/dnf/dnf.conf

[...]
[main]
# Bei einem Limit von 2 werden von allen "Install Only" Paketen, zu denen auch die Kernel gehören, nur zwei Versionen beibehalten. 
# Kleiner sollte man nicht gehen, damit man immer einen Rescue Kernel hat, wenn man einem Update etwas nicht funktioniert.
installonly_limit=2
[...]

Das geht auch auf der shell als einmalige Aktion:

sudo dnf5 remove --oldinstallonly --limit=2