Uhrzeit Korrektur

Aus Linupedia
Wechseln zu: Navigation, Suche

Uhrzeit Korrektur

Problem  : ungenaue oder falsche Linuxzeit

Die Uhrzeit bildet besonders bei neu hinzugekommenen Linuxnutzern immer wieder mal Anlass zur Verärgerung. Es scheint so, als ob die Uhr in Linux immer wieder falsch geht, und je mehr man die Uhrzeit korrigiert, um so schlimmer wird das Problem. Bei anderen Systemen, die sich auf dem selben Rechner befinden, tritt dieses Problem nicht auf.

Weder Hard- noch Softwarefehler

In den meisten Fällen handelt es sich weder um einen Hard- noch um einen Softwarefehler, sondern schlicht darum, dass die Funktion von Automatismen zur Uhrzeitkorrektur innerhalb von Linux nicht bekannt sind und man mit dem wiederholten manuellen Verstellen der Uhrzeit eine immer größer werdende Zeitdrift anstößt.


Das Grundprinzip der Uhr

Zwei Arten der Zeitangabe

Es gibt auf einem Rechner zwei Arten der Zeitangabe und wir müssen dem Rechner mitteilen, welche wir benutzen wollen. Vom Prinzip ist es LINUX egal, wie wir uns entscheiden, zu bevorzugen ist aber auf reinen Linux-Systemen die UTC-Zeit im BIOS. Sollten sich weitere Systeme auf dem Rechner befinden, sollten wir uns an deren Einstellung der Zeitangabe anschließen.

UTC(GMT) 
Koordinierte Weltzeit(UTC) (früher Greenwich Mean Time (GMT)) hier wird die Systemuhr auf die Zeit der mittleren Sonnenzeit durch Greenwich (Großbritannien - nullter Längengrad) gestellt. Die Zeitanzeige setzen sich dann zusammen aus dieser Uhr und der Zeitverschiebung die wir in Form der Zeitzone gemacht haben. Auch von eventuelle Sommer- und Winterzeit wird aus der Zeitzonenangabe automatisch gewonnen und fließt mit in die Zeitanzeige ein.

UTC ist im Sommer zwei Stunden hinter der deutschen Zeit, im Winter eine Stunde zurück. Die Zeit im BIOS ist also entsprechend 'falsch' zu setzen.

Ortszeit oder Localtime 
Hier wird die Uhr auf die aktuelle Zeit am Ort eingestellt und auch so angezeigt. In unseren Breiten also MEZ/MESZ. Um die Zeit mit anderen Rechnern oder Zeiten zu vergleichen, wird dann eingestellte Zeitzone mit herangezogen.
die Zoneninformationen 
stehen im Verzeichnis /usr/share/zoneinfo und die von uns eingestellte Zone wird durch die Datei /etc/timezone oder /etc/localtime bestimmt. Daraus gewinnt der Rechner die Informationen über den Zeitversatz gegenüber UTC und die Angaben über die Sommer/Winterzeitregeln.
Links

Zwei Uhren auf jedem Rechner

  • Auf jedem Rechner befindet sich auf dem Motherboard eine Hardware- oder CMOS-Uhr. Diese wird durch einen kleinen Akku betrieben, der auch die Daten des BIOS stützt. Diese Uhr läuft unabhängig vom Zustand des Rechners, also auch wenn der Rechner ausgeschaltet und gar von der Stromversorgung getrennt ist, kontinuierlich weiter. Diese CMOS-Uhren sind meistens nicht besonders genau.
  • Wenn Linux gestartet wird, dann wird im Linuxkern eine Systemuhr gestartet, sie errechnet den Zeittakt aus einer internen Prozessortaktung. Alle Zeitangaben bezieht Linux während des Betriebes nur aus der Systemuhr. Diese Systemuhr wird beim booten des Rechners nach der internen CMOS-Uhr gestellt. Beim herunterfahren des Rechners wird die CMOS-Uhr dann auf die aktuelle Zeit der Systemuhr gestellt. Verantwortlich für das Einstellen der Systemuhr beim Booten und das Stellen der CMOS-Uhr beim Beenden ist in einem SuSE Linux das Boot-Script /etc/rc.d/boot.clock


Befehle zum anzeigen und stellen der Uhr

date 
Anzeigen oder stellen der Linux Systemuhr siehe man date
hwclock 
Anzeigen oder stellen der CMOS-Uhr siehe man hwclock

Die Korrektur der Zeitdrift

Da sowohl die CMOS- als auch die Kernel-Uhr keinen 100%igen Anspruch auf Ganggenauigkeit haben, es aber gerade in Zusammenarbeit mit anderen Rechnern im Netz auf möglichste Genauigkeit ankommen kann, ist im LINUX-Uhrensystem eine Methode eingebaut, die Genauigkeit der Uhr weiter zu erhöhen.
Es wird dabei eine Driftfile benutzt, /etc/adjtime in dieser Datei werden Zeitkorrekturen registriert und die Daten in dieser Datei werden dazu genutzt, um die Kernel-Uhr ein wenig schneller oder langsamer laufen zu lassen. Damit wird verhindert, dass es zu ungewollten Zeispüngen kommt, also das verstellen der Uhr um ganze Sekunden oder Minuten oder Stunden, in denen dann z. B. zeitgeplante Jobs doppelt oder gar nicht ausgeführt werden könnten. Sollte also die Systemuhr des Rechner nach 1 Woche 5 Minuten falsch laufen, und diese Zeit dann manuell korrigiert werden, dann wird Linux sich in Zukunft darum bemühen diese Korrektur durch bremsen oder beschleunigen der Systemuhr selbst durchzuführen. Wenn nach einem Monat dann noch einmal einige Sekunden korrigiert werden, wird LINUX das mit einfließen lassen. Damit sollte die Uhr jetzt eine für viele Anwendungen ausreichende Genauigkeit haben.


Zeitkorrektur nach größeren Abweichungen

Die automatische Zeitkorrektur über die Datei /etc/adjtime bringt bei sehr großen Zeitkorrekturen oder mehrfachen Zeitkorrekturen innerhalb kurzer Zeit die Systemuhr aus dem Takt. Sollte also die Systemuhr in Linux einmal vollkommen falsch gehen, oder größere Korrekturen vorgenommen werden müssen, ist immer die /etc/adjtime mit zu löschen. ( Sie wird automatisch von Linux wieder angelegt)<br\>

Dann wie folgt vorgehen nach einem HOWTO von Luxus

  • Als root einloggen.
  • Die Datei /etc/adjtime löschen
rm /etc/adjtime
  • Mit dem Programm hwclock die Hardware-Uhr (RTC-Uhr) stellen
hwclock --set --date="[monat]/[tag]/[jahr] [stunde]:[min]:[sek]" --utc

(Die Option --utc steht für Universalzeit; so wird automatisch die Sommerzeit berücksichtigt.)

  • Die Systemuhr nach der Hardware-Uhr stellen
hwclock --hctosys
  • Die System Uhr überprüfen und kleine Korrekturen nach einiger Zeit ausgleichen.
  • Die System Uhr soll man nach einiger Zeit (frühestens einer Woche) nochmal korrigieren

weitere Infos