Skip to content

Fehlersuche beim Linux-Kernel (Bootprobleme)

Vor nicht allzu langer Zeit sass ich entspannt bei einem Kaffee und wollte meinen Rechner starten. Einschaltknopf gedrückt und der Bildschirm lächelte mich mit einer Fehlermeldung an:

error: unexpectedly disconnected from boot status daemon
Begin: Waiting for root file system ...

grml, warum muss das ausgerechnet jetzt passieren? Sehr schnell war klar, dass ich an dieser Stelle nicht weiter komme. Also bootete ich einen alten, funktionierenden Kernel und änderte meine grub-Einstellungen entsprechend. Damit lebte ich einige Zeit gut, bis mir mal wieder der Workaround auffiel. Jetzt wollte ich das Problem mal genauer angehen.

Beispielansicht eines Plymouth-Bootscreen

Die Fehlermeldung, die irgendwas von dem Boot Status Daemon erzählte, schien auf plymouth hinzudeuten. Der Sinn der Software ist es, den Bootprozess zu verschönern. Das heißt, es macht schicke Bildchen anstatt der Kernelmeldungen.

Der Bugtracker von Debian hatte einen Eintrag zu meiner Meldung. Die in dem Bugreport genannten Einstellungen änderten bei mir nichts am Problem. In meinem nächstem Versuch wollte ich plymouth deinstallieren. Aber da gab es eine winzige Abhängigkeit zu mountall(8). Der Zufall führte mich zu einem angepasstem Paket, mit dem plymouth deinstalliert werden kann. In freudiger Erwartung startete ich den Rechner neu. Aber es wäre nur zu schön gewesen, wenn sich das Problem so leicht lösen ließe.

Zu diesem Zeitpunkt kam mir in den Sinn, die Bootoptionen quiet und splash zu entfernen. Siehe da, ein wenig mehr kam zum Vorschein:

Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Waiting for root file system ...

Warten, warten und nochmal warten. Oh, nun noch eine BusyBox-Shell:

(initramfs) Gave up waiting for root device. Common problems:
...
ALERT! /dev/disk/by-uuid/.... does not exist. Dropping to a shell!

Nebenbei stellte ich dann fest, dass die Meldung mit dem Boot Status Daemon nur bei einer speziellen Kernelversion auftrat. Die Meldung oben konnte ich mit jeder Standard-Ubuntu-Kernelversion größer als 2.6.32-20 erzeugen. Für mich wäre es viel wichtiger zu erfahren, woher denn diese Meldung stammt!

Ein Hinweis brachte mich dann zu den Mainline-Builds. Das sind spezielle Pakete des Ubuntu Kernelteams, die recht nahe am Original-Kernel sind. Ich versuchte wieder diverse Versionen. Alle brachten mir die Fehlermeldung. Na gut, dann baue ich eben einen eigenen Kernel.

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
cp /boot/config-2.6.32-24-generic /usr/src/linux-2.6/.config
make oldnoconfig
make deb-pkg
dpkg -i ../linux*.deb
reboot

Beim ersten Reboot startete der Kernel tatsächlich korrekt. Sollte Ubuntu wirklich einen Bug in den eigenen Kernel eingebaut haben? Plötzlich fiel mir ein, dass die Zeile im grub einen kleinen, aber feinen Unterschied zu den restlichen Einträgen aufwies. Ich hatte root=/dev/sda1 angegeben. Alle anderen Einträge trugen root=UUID=.... Also versuchte ich die Änderung bei den anderen Kerneln und es klappte. Jede Kernelversion bootete mit dieser Änderung.

Jetzt muss ich nur noch herausfinden, warum das nicht klappt und ich bin wieder ein glücklicher Mensch. :-)

Das Bild stammt vom Blog Linux und ich

Neue Schrift fürs Terminal

Das Wagnis startete heute nachmittag. Nach diversen Backup-Orgien war es an der Zeit, das Ubuntu auf die aktuelle Variante 10.04 zu upgraden. Ich wollte mal testen, ob das weitgehend klappt und hatte mich innerlich auf eine Neuinstallation eingerichtet. Doch, oh Wunder, bislang konnte ich kaum Probleme feststellen. Eines, was sofort auffiel, war die Schrift. Die ist bislang noch sehr ungenügend hier muss ich eine Lösung finden. Das zweite Problem war der Spamfilter CRM114. Das wurde aber schon während der Installation angekündigt, dass es Probleme geben kann. Bei der Suche nach der korrekten Schriftart stieß ich u.a. auch auf Comic Sans. Das wäre doch die beste Wahl:

GNOME Terminal in Comic Sans

Applet für den NetworkManager ist verschwunden

Auswahlliste mit

Gestern hatte ich einen Patienten in der Notaufnahme meines Linux-Krankenhauses. Der Laptop litt an WLAN-Abstinenz, genauer gesagt, war das Applet für den GNOME NetworkManager aus dem Panel verschwunden. Ich versuchte also zuerst, das Applet dem Panel wieder hinzuzufügen. Dies misslang, da es in der Auswahlliste keinen Eintrag für den NetworkManager gab. Auf der Konsole brachte weder der Aufruf von nm-applet noch der Neustart des NetworkManagers den gewünschten Erfolg. Schließlich fand ich in irgendwelchen Foren die Lösung. Das Applet gibt es nicht direkt in der Auswahlliste der Applets, sondern das ist mit im Benachrichtigungsfeld enthalten. Fügt man dieses dem Panel hinzu, schon ist auch der NetworkManager wieder da. Der Patient konnte damit wieder geheilt entlassen werden und ich habe auch wieder was dazu gelernt. :-)

Vergleich der Bootzeiten zwischen Windows und Ubuntu

Die Webseite Tuxradar hat einen Test der Bootzeiten zwischen verschiedenen Betriebssystemen gemacht. Auf einem 64-Bit-Rechner wurde Windows Vista, Windows 7, Ubuntu 9.04 und Ubuntu 9.10 installiert und der Bootvorgang aufgezeichnet. Dabei sind alle Systeme so eingestellt, dass sie sich automatisch einloggen und eine Webseite anzeigen. Das Ergebnis sieht so aus:

Ubuntu und ext4

Das Dateisystem ext4 ist einer der neuen Stars am Linuxhimmel. Es ist der Nachfolger von ext2/3 und wird seit 2006 entwickelt. Da ich letzte einen Laptop neu installieren wollte, kam ich auf die Idee ext4 zu probieren. Also bei der Installation von Ubuntu 9.04 die Partition mit der entsprechenden Option formatiert und losgelegt. Für vernünftiges Arbeiten brauche ich die Inhalte verschiedener git- bzw. Subversion-Repositorys. Subversion nutze ich dabei mittels git-svn. Während der Rechner dabei ist, verschiedene neue Pakete zu installieren, Repositorys zu clonen etc., bleibt er plötzlich stehen. Keine Reaktion auf Tasten oder auf die Magic SysRq (Magische S-Abf-Taste). Bei der Suche nach dem Fehler war es ganz klar, dass es am Befehl git-svn in Verbindung mit dem Dateisystem ext4 lag. Die Suche in diversen Bug-Datenbanken brachte mich nicht viel weiter. Also fragte ich direkt bei den ext4-Entwicklern. Theodore Tso antwortete mir:

This sounds like the classic Ubuntu Jaunty’s default kernel freezes when deleting large numbers of files. It didn’t occur with stock mainline 2.6.28, nor with stock mainline 2.6.29, and it bisected to one of Ubuntu’s ext4 patch backports. No one was able to debug it further, and I was never able to replicate it on my test systems, so we ultimately just told people to use a mainstream kernel or a Karmic beta kernel for people who wanted to use ext4 with Ubuntu Jaunty.

In der Tat seit dem Upgrade auf Kernelversion 2.6.31 gibt es keine Probleme. Solltest du also ähnliches erfahren, versuche einen Upgrade und alles wird gut. ;-)

Shellfenster in Ubuntu öffnen

Bei einer Durchsicht der Sucheinträge dieses Monats stellte ich fest, dass einige Leute wissen wollen, wie man unter Ubuntu ein Shellfenster öffnet. Ich will das unten kurz beschreiben. Dabei gehe ich von der GNOME-Oberfläche aus.

Zwei Wege führen in der Regel nach Rom (oder zu einem Terminal :-)). Der vielleicht naheliegende geht über das Menü. Mittels der Folge Anwendungen->Zubehör->Terminal öffnest du ein Terminal aka Shellfenster. Wenn du jedoch häufig ein Terminal benötigst, kann es etwas umständlich sein, jedesmal sich durch die Menus zu klicken. Daher kannst du dir auch eine Tastenkombination anlegen. Hierzu gehst du auf System->Einstellungen->Tastenkombinationen, Darauf öffnet sich ein Fenster, indem du verschiedene Kombinationen festlegen kannst. Im Abschnitt “Desktop” ist der Eintrag “Ein Terminal starten”. Klicke den an und drücke danach die Tastenkombination, mit der du später das Terminal aufrufen willst. Bei mir liegt das auf Strg+Alt+T. Das Ergebnis deiner Eingabe steht danach rechts. Falls das deinem Wunsch entspricht, kannst du das Fenster schließen und hernach immer mit der gewählten Tastenkombination ein Shellfenster öffnen.

cronjob