Uhr korrekt einrichten und
automatisch stellen mit ntpdate
 

Unter Linux muss man prinzipiell zwischen zwei Uhren unterscheiden:

Software-Uhr: das ist die Zeit innerhalb des Linux-Kernels. Sie ist für alle Benutzer und das Betriebssystem selbst von Bedeutung und definiert im laufenden Betrieb die für alle Programme gültige Systemzeit. Sie wird auch manchmal als Betriebssystem-Uhr oder System-Uhr bezeichnet.

Hardware-Uhr: diese Uhr (auch Echtzeituhr, batteriegepufferte Uhr, real time clock (RTC), BIOS clock oder CMOS clock genannt) ist eine Uhr, die unabhängig von allen anderen Komponenten läuft, selbst wenn der Computer heruntergefahren wurde. Im ausgeschalteten Zustand läuft sie weiter und wird beim Systemstart zum Abgleich der Software-Uhr verwendet.

Systemzeit

Die Systemzeit lässt sich mit folgendem Befehl im Terminal anzeigen:
# date
während man die Hardware-Uhr im BIOS mit folgendem Befehl anzeigen lassen kann:
# hwclock --show
--show zeigt den Stand der Hardware-Uhr in lokaler Zeitzone (auch wenn die Hardware-Uhr nach UTC läuft).
--set --date="9/22/96 16:45:05" stellt die Hardware-Uhr auf den 22.9.1996 16:45:05 Lokalzeit.
--hctosys stellt die Systemzeit nach der Hardware-Uhr.
--systohc stellt die Hardware-Uhr nach der momentanen Systemzeit.

Dabei gibt es einen kleinen Stolperstein, denn man muß sich entscheiden, ob man die Hardware-Uhr in UTC oder in Local-Time laufen läßt. Benutzt man nur Linux auf einem Rechner ist UTC die bessere Wahl, bei einem Dual-Boot System mit Windows allerdings ist Local die bessere Wahl, da Windows mit einer Hardware-Uhr in UTC Probleme hat, bzw. keine Einstellung für UTC hat, also immer die lokale Zeit verwendet, was dazu führt, daß bei Sommerzeit die Uhr zwei Stunden in der Vergangenheit läuft. Sehr hilfreich dabei ist der Befehl:
# hwclock --debug
hwclock from util-linux 2.25.2
Using the /dev interface to the clock.
Last drift adjustment done at 1463431755 seconds after 1969
Last calibration done at 1463431755 seconds after 1969
Hardware clock is on local time
Assuming hardware clock is kept in local time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2016/05/16 23:39:39
Hw clock time : 2016/05/16 23:39:39 = 1463434779 seconds since 1969
Mo 16 Mai 2016 23:39:39 CEST -0.516411 seconds

Er gibt Informationen über die letzte Korrektur der Hardware-Uhr und ob sie in UTC oder Local läuft.

Möchte man nun die Hardware-Uhr von UTC auf Local umstellen, kann man dazu zwei Wege wählen: Entweder ändert man in der Datei /etc/adjtime die dritte Zeile von UTC auf LOCAL und stellt mittels
# hwclock --systohc
die Hardware-Uhr nach der Systemuhr oder man löscht die Datei /etc/adjtime und übergibt den Parameter für UTC oder LOCAL beim setzen der Hardware-Uhr mit:
# hwclock --systohc --localtime
Läßt man die Angabe --localtime oder --utc weg und es existiert keine /etc/adjtime, wird die Hardware-Uhr per Default mit UTC registriert.

Welchen Weg man wählt bleibt jedem selbst überlassen, aber meine Empfehlung für ein absolut korrektes stellen der Uhr unter Linux auf einem Dual-Boot System mit Windows ist:

1. Die Datei /etc/adjtime löschen.

2. Die System-Uhr mittels
     # ntpdate de.pool.ntp.org de.pool.ntp.org de.pool.ntp.org
      (mehr zu ntpdate im nächsten Abschnitt) korrekt setzen.

3. Die Hardware Uhr korrekt aus der Systemzeit mittels
     # hwclock --systohc --localtime
      auf die lokale Zeit setzen.

Anschließend wird die Datei /etc/adjtime automatisch vom System neu erstellt. Anhand der 3. Zeile kann man erkennen, ob die BIOS-Uhr als UTC-Zeit oder als LOCAL-Zeit im System registriert ist, je nachdem ob in der Zeile UTC oder LOCAL steht.


ntpdate

Alle halbe Jahre ist es mal wieder soweit und man muß die Uhr um eine Stunde vor oder zurück passend für Sommer oder Winterzeit korrigieren. Wer sich dieses alte Relikt ein wenig einfacher gestalten will, installiert das Paket ntpdate oder wer´s noch genauer mag ntpd. Ersteres Programm ist lediglich ein client der sich mit einem angegebenen Zeitserver im Internet verbindet und über diesen die Uhrzeit korrekt einstellt. Das zweite Programm, ntpd ist ein richtiger Dämon mit Server und Client. Da ich einen Zeitserver für einen privaten Computer zu Hause zu betreiben ein wenig übertrieben finde, gehe ich hier nur auf das Programm ntpdate ein, welches wirklich sehr simpel ist. Zuerst installiert man es mit

# apt-get install ntpdate

Danach ruft man das Programm mit einer dreifachen Serverangabe auf. Dreifach deswegen, weil ntpdate in der Lage ist, drei Server miteinander zu vergleichen und so die Uhrzeit möglichst korrekt einzustellen. Wer das für übertrieben hält gibt einfach dreimal denselben Server an:

# ntpdate de.pool.ntp.org de.pool.ntp.org de.pool.ntp.org

Es dauert allerdings ein paar Sekündchen, aber dann zeigt die Uhrzeit die korrekte Zeit an. Möchte man immer wieder mal das ntpdate die Uhrzeit korrigiert, kann man das ganze auch in einen Cronjob packen oder ein Skript erstellen, was bei jedem Start die Uhrzeit überprüft.

Noch ein Hinweis:

ntpdate hat Probleme mit der Einstellung des Tages-Datums wenn der Tag in der Zukunft ist. Abhilfe schafft ein schrittweises Verstellen der Zeit mittels:

# ntpdate -b de.pool.ntp.org