Netdate / Ntpdate. Zeit des eigenen Rechners korrigieren bzw. synchronisieren


By rakekniven - Posted on 10 August 2005

Zeit des eigenen Rechners korrigieren bzw. synchronisieren

Man kennt es. Ein Rechner ist ein paar Monate am Laufen und die Uhr passt nicht mehr.
Manuelles nachstellen ist nötig, aber unkewl ;-)

Im Internet gibt es viele Rechner die einen time-service anbieten

Zeitserver :

time.fu-berlin.de
wrzx03.rz.uni-wuerzburg.de

Mit dem Programm NETDATE, sollte bei jeder Distri dabei sein, kann man so mühelos seine Uhr einstellen.

Man muss root für diese Sachen sein.

smaug:~ # /usr/sbin/netdate -v time.fu-berlin.de

Auch die Hardware-Clock auf Deinem Mainborad kann synchronisiert werden

smaug:~ # /sbin/hwclock --systohc

Ich habe diese Sache mit cron automatisiert, so dass einmal die Woche die Uhrzeit synchronisiert wird.
(be root)

smaug:~ # crontab -e
0 1 * * 6 /usr/bin/netdate -v time.fu-berlin.de ; /sbin/hwclock --systohc
Ein Usenet-artikel zu diesem Thema, ausführlicher und interessant.

Frage : Probleme mit uhrzeit

Wo muss ich meinen netdate Eintrag zum Uhrzeit synchronisieren machen, der nachdem eine Internet-Verbindung aufgebaut worden ist, ausgeführt werden soll?

Lösung :

Probleme gibt es immer wieder mit der Unterschiedlichen Behandlung der Uhrzeit auf deinem Motherboard, man spricht von der real time clock (rtc), durch das jeweilige Betriebssystem.
Dabei wird von Betriebssystemen aus dem Evil Empire beim booten diese Zeit einfach ausgelesen und als die Systemzeit des
Betriebssystemes übernommen.
Also: rtc Zeit = systime
Damit bestimmt die rtc-time auch die Zeitzone in der Du dich befindest.
Man schaut also einfach auf seine Armbanduhr und trägt diese Zeit im BIOS Setup ein.

Früher musste man dann bei jeder Sommer/Winterzeit Umstellung die Zeit wieder neu einstellen, reichlich nervig. Mittlerweile können W9x , NT, W2k/XP und Konsorten selber eine Umstellung nach Winter/Sommerzeit. Dazu verwenden sie Tabellen in denen die Umstellungen vorgegeben werden.

Auf vernünftigen Betriebssystemen wird das schon seit ewigen Zeiten anders gehandhabt. Wir nehmen einmal ein Unix System *grins*
Die rtc, wir wissen damit ist die Hardware Clock auf dem Board gemeint, wird auf UTC (früher nannte man das GMT) eingestellt. Im Betriebssystem wird die Zeitzone definiert, in der sich der Rechner gerade befindet. Also in unserem Fall Europe/Berlin oder UTC+1. UTC+1 ist unsere normale Zeitzone also MEZ.

Wie wird die Zeit jetzt aber von einem Unix System interpretiert?
Das wird etwas komplexer und weitaus pfiffiger als auf der Systemen aus dem Evil Empire ausgewertet.

Das System bootet und holt sich die Zeit aus der rtc. Nun wir die feste Spanne für die lokale Zeit hinzugefügt, normalerweise eine Stunde. Diese Informationen und die Informationen über Umstellungen während des Jahres wie die Sommer/Winterzeit Umstellung ist hinterlegt in der Datei /usr/share/zoneinfo/Europe/Berlin.

---nur falls interessiert
Im Verzeichnis /usr/share/zoneinfo werden daneben auch noch eine Datei mit den ISO 3166 2-letter country codes , definiert z.B. das DE für Deutschland, iso3166.tab und eine Datei mit Angaben zu Längen und Breitengraden einiger Städte wie Berlin , zone.tab
---ende

Damit wird schon einmal die aktuelle Zeitdifferenz zur rtc grob vorgegeben, jetzt wird das noch genauer eingegrenzt.
Die Board Uhren gelten als nicht sehr genau, alle gehen mehr oder minder vor oder nach, man spricht vom sogenannten time-shift. Um auch noch diese Ungenauigkeiten zu eleminieren gibt es die Datei /etc/adjtime dort wird ein Korrekturfaktor für Deine rtc angegeben. Allerdings nur, wenn Du sie irgendwann einmal nachgestellt haben solltest und das auch nur dann wenn Du es mit hwclock gemacht hast.
Aber dazu etwas später.
Solch eine Datei kann folgendermassen aussehen:

-3.127072 1018601965 0.000000
1018601965
UTC
---/etc/adjtime---

Und damit kann auch eine kleinere Ungenauigkeit der rtc bei jedem booten des Systemes wieder korrigiert werden.
Die so bestimmte Systemzeit gilt jetzt als das "Mass aller Dinge" bis zum nächsten boot Vorgang des Systemes und das kann ewig dauern.

Kurz gefasst:
Booten - rtc auslesen - Timezone auslesen - timeshift auslesen - Unix Systemzeit ermitteln

Soviel zur Zeit eines Unix Systemes oder Systemzeit.

Jetzt zum Nachstellen der Zeit von einem Zeitserver aus dem Internet:
Es gibt von der Physikalisch technischen Bundesanstalt in Braunschweig einige Zeitserver die Ihre Urzeit wieder aus der/?den?
Atomuhren der PTB beziehen. Mit einer Genauigkeit von Sekunde/Jahrmillion soweit ich mich erinnern kann.
Die kann man z.B. bei jeder Verbindung, die man mit dem Modem aufbaut automatisch zur korrektur der Systemzeit und auch der rtc heranziehen.
Dazu wird eine eigene Datei /etc/ppp/ip-up.local erstellt in der folgende Zeilen einzutragen sind:

---/etc/ppp/ip-up.local--- 
# Timeserver aufruf, ptba Braunschweig 
echo "Netdate aufgerufen" 1> /dev/xconsole 
netdate -l 1 tcp ptbtime1.ptb.de ptbtime2.ptb.de 127.0.0.1 1> /dev/xconsole

hwclock --systohc 
---/etc/ppp/ip-up.local--- 

Mit netdate wird einer der Zeitserver ermittelt der ausgelesen wird.
Die 127.0.0.1 sollte man unbedingt einfÜgen damit es keinen Ärger gibt. Falls die Zeitserver mal nicht erreichbar sind wird deine eigene Zeit genommen.

Mit

hwclock --systohc

wird die rtc auf die systime neu gestellt und dabei wird auch ein eintrag in die Datei /etc/adjtime geschrieben.
Dazu braucht man allerdings rootrechte.