Mein Server hatte ja eine gewisse Downtime und die hatte einen ziemlich unangenehmen Hintergrund.
Das Problem
Nachdem ich Ubuntu neu Installiert hatte, bzw auch bei den Live-CDs, frohr das System nach einiger Zeit ein. Und zwar sehr genau immer an der gleichen Stelle im Bootprozess ohne allerdings irgend einen Logeintrag oder eine Fehlermeldung zu hinterlassen. Und das System frohr wirklich komplett ein, da rührte sich gar nichts mehr.
Ich habe so ziemlich alles durchprobiert: Ubuntu 8.04, 8.10, 9.04, 9.10, 10.04 und 10.10 jeweils als Desktop, Server oder Alternativ-Variante. Das Interessante: ich hatte da 8.04 bereits mal am laufen. Auch das aktuelle Debian ging nicht. Allerdings funktionierte Knoppix und DamnSmallLinux. Die Hardware hatte also keinen Schaden.
Nach endlosen Stunden und immerhin einem guten halben Jahr Downtime bin ich durch Zufall über einen Foreneintrag gestolpert, worin die Probleme ziemlich genau beschrieben wurden.
Die Ursache
Schuld ist das Startscript /etc/init.d/ondemand welches folgende Zeile ausführt echo -n ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Die Lösung
Die Lösung ist simpel. aber nicht immer leicht zu machen. Eine Installation per Live-CD ist nicht möglich, da das Script schon dort beim Booten verwendet wird. Und die Live-CD auspacken, die Daten suchen und verändern, darauf hatte ich keine Lust. Während der Installation geht es folgendermaßen:
Mit der Alternativ-CD bzw. ich habe es mit der Server-CD gemacht, wird das beim Booten der CD nicht aufgerufen. Man kann die Installation komplett durchlaufen, muss dann aber am Ende der Installation via STRG + ALT + F2 in eine der anderen Konsolen wechseln, und per vi /target/etc/init.d/ondemand und dort unterhalb der ersten Zeile exit 1 einfügen. Alternativ kann man auch einfach sudo update-rc.d -f ondemand remove benutzen und das Script wird dann nicht mehr aufgerufen. Dann einfach die Installation beenden und den Rechner neu starten und alles funktioniert.
Für den Fall, das es nach einem Dist-Upgrade passiert, hilft nur noch der Start mit einer Rettungs-Distribution und dann das Script eben auf der Systemplatte entsprechend per vi wie oben beschrieben deaktivieren.
Hintergrund
Mit dem Script bzw. dem oben erwähnten Echo-Befehl, wird ein Verwaler für die Prozessor-Taktung (SpeedStepping) aktiviert. Standardmäßig läuft der Prozessor auf voller Geschwindigkeit, aber um Strom zu sparen und ihn kühl zu halten kann er langsamer laufen.
Seit der Ubuntu-Version 8.04 gibt es im Kernel einen Fehler, der sich bei Via-Prozessoren auswirkt. Wird irgend ein anderer als der volle Prozessor-Takt verwendet, hält das System einfach an. Das passiert nicht nur, wenn der Wert auf ondemand gesetzt wird, sondern auch jede andere Option hat diese Wirkung. Außer das standardmäßige performance, das funktioniert.
Mit der oben beschriebenen Lösung bleibt der Prozessor also immer auf voller Taktung und verbraucht dadurch ggf. mehr Strom. In meinem Fall, einem VIA C3 Nehemia mit 800 MHz, macht das irgendwas unter 3 Watt Mehrverbrauch aus. Genau kann ich das aber nicht sagen. Ein bisschen Wärmer ist er dadurch auf alle Fälle. Derzeit sind es ca 56°C, vorher waren es im Schnitt um die 50°C.
Die Gemeinheit daran
…war, dass das Ganze mit einer Verzögerung von 60 Sekunden ab aufruf des Scriptes gemacht wird. Dadurch ergibt sich diese charakteristische, immer gleiche Zeitspanne bis zum Systemtot. Außerdem erklärt das auch die nicht im Zusammenhang mit dem Einfrieren stehenden Logeinträge des Bootvorganges, denn er brach immer beim USB-Host-Init ab, weswegen ich an der Stelle ewig rumgesucht hab .. natürlich ohne Erfolg.
Und da Ubuntu8.04 ja mal lief trieb mich das richtig in den Wahnsinn. Das wurde alllerdings per DistUpgrade gemacht und hat anscheinend irgend etwas bei diesem Dienst noch auf dem alten Stand gelassen. Anders kann ich es mir nicht erklären.
Ich war so kurz davor aufzugeben und mir wieder einen Hoster zu suchen :/