[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Debian]:Kernel-Uhr spinnt



Hallo Andreas,

Am 22.05.00 schrieb Andreas ~:

> Habe auch ein Problem mit der Uhr:
> 
> Aus Bequemlichkeitsgruenden holt sich bei mir der Windows-Client
> bei jedem Start vom Samba-Server (slink) die Uhrzeit mittels
> 'net time \\max /set /yes' (max ist der Linux-Server), so dass die
> Zeit nur auf dem Server gestellt werden muss (Sommer/Winter).
> Der Server läuft rund um die Uhr, doch leider geht die Uhr pro Tag
> etwa 4 Minuten vor.
> AFAIK holt sich Linux beim Bootvorgang die Uhrzeit aus dem
> CMOS und danach übernimmt der Kernel die Berechnung der Uhr-
> zeit, weil das wohl genauer wäre (wie in irgendeinem FAQ zu
> lesen ist). Die CMOS-Uhr selbst läuft halbwegs genau, wie
> ein Drei-Tage-DOS-Test gezeigt hat. Wie kann ich dem System
> (dem Kernel?) beibringen, dass die Uhr langsamer zu laufen
> hat? Mir ist schon in den Sinn gekommen, mittels CRON einmal
> am Tag die Uhr um 4 Minuten zurückzusetzen, doch das ist
> wohl eher ein "Dirty-Hack". Kennt jemand eine andere Lösung?

Gleiches Problem ist bei mit auch "in Arbeit", scheint's ich bin einen
Schritt weiter: Dazu ein Auszug aus dem Linux-Anwender-Handbuch: 



"Systemuhr und CMOS-Uhr 

  

Der Timer-Chip, mit dem die Systemzeit gemessen wird, ist bei abgeschaltetem
Rechner außer Betrieb. Damit die Systemzeit beim nächsten Einschalten wieder
aktuell ist, haben alle PCs eine batteriegepufferte Uhr, die das Datum und
die Uhrzeit auch ohne Netzspannung weiterzählt. 

Diese Uhr wird gelegentlich als Echtzeituhr bezeichnet. Weil sie im gleichen
Baustein wie das CMOS-RAM (Non-Volatile-RAM) untergebracht ist und die Zeit
in dessen Speicherbereich schreibt, wird sie in diesem Buch durchgängig als
CMOS-Uhr bezeichnet. 

Der Kernel liest gleich zu Beginn der zweiten Initialisierungsphase, noch
vor der Initialisierung der Geräte, die Zeit aus der CMOS-Uhr und stellt die
Systemzeit
entsprechend ein. Dabei wartet der Kernel beim Auslesen der Uhr genau den
Zeitpunkt ab, an dem das im Sekundentakt stattfindende Update der CMOS-Zeit
abgeschlossen ist, also gerade eine neue Sekunde beginnt. Auf diese Weise
kann der Kernel die Systemzeit, mit einer Abweichung im Bereich von
Mikrosekunden,
genau auf die CMOS-Uhr synchronisieren, obwohl diese Uhr die Zeit nur mit
einer Auflösung von ganzen Sekunden anzeigen kann. 

Diese Methode zum Stellen der Systemzeit führt nur dann zu einer korrekten
Einstellung, wenn die CMOS-Uhr auf Universal Time Coordinated (oder auch
Greenwich Mean Time) eingestellt ist. Wenn Sie die CMOS-Uhr aus
irgendwelchen Gründen auf die lokale Zonenzeit eingestellt lassen müssen,
können Sie die
Systemzeit in einem der Initialisierungsscripts mit dem Programm clock
erneut stellen und dabei die Zeitzone berücksichtgen.  

   Wenn Sie Wert auf eine exakte Systemzeit legen, aber über keine externe
Zeitreferenz verfügen, sind Sie auf die CMOS-Uhr angewiesen. Da der
Hersteller
Ihres PC mit Sicherheit keinen temperaturstabilisierten, geeichten
Qualitätsquarz als Taktgeber für die CMOS-Uhr eingebaut hat, müssen Sie mit
einem Fehler
von einigen Sekunden pro Tag rechnen. Durch Beobachtung über mehrere Tage
können Sie diesen Fehler auch ohne aufwendige Messgeräte sehr gut bestimmen.
Das Systemprogramm clock ermöglicht es Ihnen, den so bestimmten Fehler zu
korrigieren. 

Um die CMOS-Uhr zu `justieren'', werden in der Datei /etc/adjtime die
tägliche Abweichung und das Datum der letzten Korrektur eingetragen. Jedes
Mal,
wenn das Programm clock zum Justieren der CMOS-Uhr aufgerufen wird,
errechnet es aus dem Datum der letzten Korrektur und dem Fehlerfaktor die
aktuelle
Abweichung und korrigiert sowohl die Systemzeit als auch die CMOS-Uhr,
sobald der Fehler mehr als eine Sekunde beträgt. Außerdem wird in der Datei
/etc/adjtime die Zeitmarke der letzten Korrektur aktualisiert und der nicht
korrigierte Rest zur vollen Sekunde als dritter Wert eingetragen. 

Wenn Sie zum Beispiel festgestellt haben, daß die CMOS-Uhr Ihres Rechners
innerhalb von zwei Tagen um 23 Sekunden vorgeht, können Sie das System zur
Korrektur folgendermaßen installieren: 

[01] # echo "0.0 0 0.0" > /etc/adjtime
[02] # clock -au
[03] # date -s "Thu Aug 29 15:59:00 MET DST 1996"
Thu Aug 29 15:59:00 MET DST 1996
[04] # clock -wu
[05] # cat /etc/adjtime
0.000000 841345408 0.000000
[06] # echo "-11.500000 841345408 0.000000" > /etc/adjtime
[07] # _

Mit dem ersten Kommando wird die Datei /etc/adjtime neu erzeugt, durch das
zweite Kommando wird der aktuelle Zeitstempel in die soeben erzeugte Datei
eingetragen. Im dritten Kommando wird die Systemzeit `von Hand'' mit der
höchsten Genauigkeit gestellt. Durch das vierte Kommando wird die CMOS-Uhr
mit
der gerade eingestellten Systemzeit synchronisiert. 

Für die Beispielrechnung beträgt der Fehler 23 Sekunden in zwei Tagen, das
sind 11,5 Sekunden pro Tag. Das sechste Kommando zeigt, wie dieser
Korrekturfaktor in die Datei adjtime eingetragen werden kann. Es ist
wichtig, die beim zweiten Kommando erzeugte Zeitmarke (im Beispiel
841345408)
dabei nicht zu verändern. 

Wenn Sie jetzt das zweite Kommando oben in einem Initialisierungsscript beim
Booten aufrufen, werden CMOS-Uhr und Systemzeit automatisch bei jedem
Systemstart korrigiert. 

Wenn die Systemuhr mit einer externen Zeitreferenz synchronisiert ist, wird
die CMOS-Uhr automatisch alle 11 Minuten nachgestellt. Wenn Sie den während
der Betriebspause aufgelaufenen Fehler beim Booten durch die oben
beschriebene Methode korrigieren möchten, müssen Sie beim Shutdown dafür
sorgen, daß die
Zeitmarke in /etc/adjtime in etwa mit dem Datum des letzten Update der
CMOS-Uhr vor dem Herunterfahren des Systems übereinstimmt." [LAH 7.A ,
S. 322ff, 1997, LunetIX]

Das Problem ist nur 'clock' gibt es bei mir nicht.

Es gibt für slink ein tool 'ajtimex' welches die Datei /etc/adjtime
auswertet und den Fehler zwischen Hardware-Uhr und CMOS-Uhr, sowie die
Abweichung der CMOS-Uhr korregiert. Ich les mich gerade ein. Das Paket heißt
adjtimex.deb.   

Gruß Wolfgang

--
\  /\  /\   Wolfgang			fonto:  0631 7501713
 \/  \/. \. Arnsberg			faxto:  0631 7501714

------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie
bitte eine E-Mail an majordomo@jfl.de die im Body
"unsubscribe debian-user-de <deine emailadresse>"
enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@jfl.de
------------------------------------------------
Anzahl der eingetragenen Mitglieder:     733


Reply to: