Wenn Kernelmeldungen die Konsole überfluten …

Irgendwie macht es keinen Spaß auf der Konsole zu arbeiten, wenn diese ständig mit Kernelmeldungen überflutet wird. Dazu kann es kommen, wenn der Loglevel für die Konsole sehr sensibel eingestellt ist und z.B. eine eingerichtete Firewall sehr protokollierfreudig nach /var/log/kern.log schreibt.

Auf einem Server Debian Lenny [UPDATE: funktioniert auch mit Squeeze] machte die Menge an Meldungen ein sauberes Arbeiten schlichtweg unmöglich und ich suchte eine Möglichkeit, diese Meldungen abzustellen, ohne gleich alle Meldungen komplett zu unterdrücken.

Zunächst ein Blick in die Datei /proc/sys/kernel/printk eines Debian Lenny:

cat /proc/sys/kernel/printk
7 4 1 7

Die erste Zahl (7) legt dabei den Loglevel für Meldungen auf die Konsole fest (Bedeutung aller vier Zahlen). Ein kurzer Auszug aus der Manpage (man 2 syslog) zeigt uns was die verschiedenen Loglevel bedeuten:

man 2syslog ubuntu sysctl.conf sysctl printk lucid lynx log linux lenny kernel firewall debian admin /proc

Auf die Konsole geschrieben werden im obigen Beispiel also alle Meldung die den Loglevel 7 oder geringer haben – sprich: alle Kernelmeldungen. Auch ein eingestöpselter USB-Stick wird auf die Konsole geloggt. Den Loglevel auf 4 zu ändern, scheint also eine angebrachte Lösung zu sein. So ist das z.B. auch auf Ubuntu Lucid Lynx (Desktop) Standard.

Eine Lösung wäre der Befehl sysctl (siehe man sysctl). Dieser kann Kernelparameter zur Laufzeit ändern. Damit die Änderungen auch einen Neustart überleben, kann man auch direkt die Datei /etc/sysctl.conf (siehe: man sysctl.conf) editieren, indem man folgende Zeile auskommentiert (erfordert erneutes Einlesen der Datei bzw. Neustart nach der Änderung):

sysctl conf ubuntu sysctl.conf sysctl printk lucid lynx log linux lenny kernel firewall debian admin /proc

Und so liest man die Datei /etc/sysctl.conf neu ein:

sysctl -p /etc/sysctl.conf

Das erneute Einlesen bzw. ein Neustart ändern die Konfiguration dauerhaft.  Eine andere Option ist es, folgenden Befehl z.B. an den Anfang des Firewallskripts zu stellen …

echo "4 4 1 7" > /proc/sys/kernel/printk

…oder diesen Befehl während der Laufzeit abzusetzen, um die Wirkung temporär zu testen. Nachdem ich den Loglevel für die Konsolenmeldungen von 7 auf 4 geändert habe, bin ich jedenfalls mein Problem los. Alle kritischen Meldungen (oder gar schlimmer) werden weiterhin auf die Konsolen geschrieben.