Zusammenspiel von Hardware- und Software-Uhr

Die Hardware-Uhr und die Software-Uhr laufen normalerweise völlig unabhängig voneinander. Für beide Uhren gibt es auch separate tools, um darauf zuzugreifen.

Die im kernel implementierte Software-Uhr läßt sich mit dem Kommando date(1) auslesen und setzen (letzteres natürlich nur vom super user).

Für den Zugriff auf die Hardware-Uhr existiert hwclock(8), das nur vom super user benutzt werden kann. Sie kann mit

hwclock --show und hwclock --set --date=...
ausgelesen bzw. gesetzt werden. Typischer für die Verwendung von hwclock ist jedoch das Setzen der Software-Uhr mit der Zeit aus der Hardware-Uhr oder umgekehrt.

Mit

	hwclock --systohc [--utc]
wird die Systemzeit aus der Software-Uhr im kernel ausgelesen und nach der Umrechnung in Jahr, Monat, ..., Minuten und Sekunden in die Hardware-Uhr geschrieben. Umgekehrt wird mit
	hwclock --hctosys [--utc]
die Hardware-Uhr ausgelesen, in die Darstellung der Systemzeit konvertiert (d.h. in einen time_t umgerechnet) und in die Software-Uhr geschrieben.

Bei beiden Varianten kann zusätzlich zu --systohc bzw. --hctosys noch die Option --utc angegeben werden. In diesem Fall wird die Zeit in der Hardware-Uhr als UTC interpretiert bzw. als UTC in die Hardware-Uhr geschrieben. Anderenfalls wird lokale Zeitrepräsentation angenommen, was eine korrekte Einstellung der lokalen Zeitzone erfordert.

Die erste Variante kann z.B. sinnvoll sein, wenn die Systemzeit der Software-Uhr durch Synchronisation mit Rechnern im Netz auf der richtigen Zeit gehalten wird, und man die Hardware-Uhr anpassen möchte, z.B. kurz vor einem reboot, damit der Rechner gleich wieder mit der richtigen Zeit weiterläft.

Die zweite Variante findet man häfig in den boot scripts, falls die Hardware-Uhr aus irgendeinem Grund nicht auf UTC gestellt werden soll. Der Unix kernel liest bei jedem Booten von sich aus die Hardware-Uhr, interpretiert ihren Inhalt als UTC, berechnet einen passenden time_t und setzt seine Software-Uhr entsprechend. Steht die Hardware-Uhr aber auf lokaler Zeitrepräsentation, ist die Software-Uhr damit nicht richtig gesetzt. In diesem Fall muß man in den boot scripts die Software-Uhr nochmal nachträglich richtig setzen mit

	hwclock --hctosys
ohne --utc. Bei SuSE Linux passiert dies z.B., wenn man in der Konfiguration angibt, daß die Hardware-Uhr nicht auf UTC gesetzt ist.