BEZEICHNUNG
hwclock - Zeituhren-HilfswerkzeugÜBERSICHT
hwclock [Funktion] [Option …]BESCHREIBUNG
hwclock ist ein Administrationswerkzeug für die verschiedenen Uhren. Es kann die aktuelle Hardware-Uhrzeit anzeigen, die Hardware-Uhr auf eine angegebene Zeit stellen, die Hardware-Uhr nach der Systemzeit stellen oder umgekehrt, eine Hardware-Uhr-Abweichung ausgleichen, die Zeitskala der Systemuhr korrigieren, die Zeitzone des Kernels, die NTP-Zeitskala und die Epoche (nur Alpha) setzen und zukünftige Hardware-Uhrwerte, basierend auf der Abweichungsrate, vorhersagen.FUNKTIONEN
Die folgenden Funktionen schließen sich gegenseitig aus, nur eine kann ausgewählt werden. Die Vorgabe ist --show, falls keine angegeben wurde.fügt Zeit zur Hardware-Uhr hinzu oder
zieht diese ab, um eine systematische Abweichung seit dem letzten Setzen oder
Anpassen der Hardware-Uhr auszugleichen. Siehe die nachfolgende
Erklärungen unter Die Adjust-Funktion.
Diese Funktionen sind nur für
Alpha-Maschinen. Sie sind nur durch den Linux-Kernel-RTC-Treiber
verfügbar.
Sie werden verwendet, um den Kernel-Wert der Hardware-Uhr-Epoche zu lesen und zu
setzen. Epoche ist das Jahr, auf dass sich der Nullwert der Hardware-Uhr
bezieht. Wenn das BIOS der Maschine zum Beispiel die Konvention verwenden,
dass die Jahreszählung in der Hardware-Uhr die Anzahl der vollen Jahre
seit 1952 enthält, dann muss der Epochenwert der Hardware-Uhr des
Kernels auf 1952 gesetzt werden.
Die Funktion --setepoch benötigt die Option --epoch, um das
Jahr festzulegen. Beispiel:
hwclock --setepoch --epoch=1952
Der RTC-Treiber versucht, den korrekten Wert der Epoche zu raten, daher kann es
nicht notwendig sein, ihn anzugeben.
Dieser Epochenwert wird verwendet, wenn hwclock die Hardware-Uhr auf
einer Alpha-Maschine ausliest oder stellt. Für ISA-Maschinen verwendet
der Kernel die feste Hardware-Uhr-Epoche 1900.
liest und setzt die Parameter der Echtzeituhr
(RTC). Dies dient beispielsweise der Ermittlung der verfügbaren
Funktionen der Echtzeituhr oder dem Setzen des »Backup Switchover
Mode«.
Der Parameter ist entweder ein numerischer RTC-Parameterwert (siehe die
Kernel-Datei include/uapi/linux/rtc.h) oder ein Alias. Mit
--help erhalten Sie eine Liste gültiger Aliase. Wenn dem
Parameter und dem Wert 0x vorangestellt ist, werden diese als
hexadezimal interpretiert, ansonsten als dezimal.
sagt basierend auf der mit der Option
--date angegebene Zeit und der Information in /etc/adjtime
vorher, was die Hardware-Uhr in der Zukunft anzeigen wird. Dies ist zum
Beispiel nützlich, um Abweichungen zu berücksichtigen, wenn das
Hardware-Uhr-Aufwachen (d.h. ein Alarm) eingerichtet wird. Siehe
rtcwake(8).
Verwenden Sie diese Funktion nicht, falls die Hardware-Uhr durch irgendetwas
anderes als den Befehl hwclock des aktuellen Betriebssystems
verändert wird, wie dem »11-Minuten-Modus« oder durch das
Starten eines anderen Betriebssystems.
liest die Hardware-Uhr und schreibt ihre Zeit
in die Standardausgabe im ISO 8601-Format. Die angezeigte Zeit ist
stets die lokale Zeit, selbst wenn Sie die Hardware-Uhr auf die Weltzeit (UTC)
eingestellt haben, siehe die Option --localtime.
Die Anzeige der Hardware-Uhrzeit ist die Vorgabe, falls keine Funktion angegeben
ist.
Die Funktion --get wendet auch Korrekturen für die Abweichung auf
die eingelesene Zeit an, basierend auf Informationen aus /etc/adjtime.
Verwenden Sie diese Funktion nicht, falls die Hardware-Uhr von irgendetwas
anderem außer dem Befehl hwclock des aktuellen Betriebssystems
verändert wird, wie dem »11-Minuten-Modus« oder vom
Dualstarten eines anderen Betriebssystems.
stellt die Systemuhr aus der Hardware-Uhr. Die
aus der Hardware-Uhr eingelesene Zeit wird bezüglich der systematischen
Abweichung ausgeglichen, bevor die Systemuhr gestellt wird. Lesen Sie die
Diskussion weiter unten, unter Die Adjust-Funktion.
Die Systemzeit muss in der UTC-Zeitskala gehalten werden, damit Anwendungen im
Zusammenhang mit der für das System konfigurierten Zeitzone arbeiten.
Falls die Hardware-Uhr in der lokalen Zeit gehalten wird, dann muss die daraus
gelesene Zeit in die UTC-Zeitskala verschoben werden, bevor sie zum Setzen der
Systemuhr verwandt wird. Die Funktion --hctosys erledigt dies basierend
auf den Informationen in der Datei /etc/adjtime oder aus den
Befehlszeilenargumenten --localtime und --utc. Hinweis: Es wird
keine Sommerzeitanpassung durchgeführt. Siehe die Diskussion weiter
unten unter LOKAL vs. UTC.
Der Kernel hält auch einen Zeitzonenwert, die Funktion --hctosys
setzt ihn auf den für das System konfigurierten Wert. Die
Systemzeitzone wird durch die TZ-Umgebungsvariable oder die Datei
/etc/localtime konfiguriert, wie tzset(3) sie interpretieren
würde. Das veraltete Feld tz_dsttime des Kernel-Zeitzonenwerts
wird auf Null gesetzt. Details zur ehemaligen Bedeutung dieses Feldes finden
Sie in settimeofday(2).
Wird die Funktion --hctosys durch Verwendung in einem Systemstartskript
der erste Aufrufer von settimeofday(2), dann wird über die
Kernelvariable persistent_clock_is_local der
NTP-»11-Minuten-Modus« gesetzt. Falls die
Hardware-Uhr-Zeitskalenkonfiguration geändert wird, ist ein
Systemneustart notwendig, um den Kernel zu informieren. Lesen Sie die
Diskussion weiter unten unter Automatischer Abgleich der Hardware-Uhr durch
den Kernel.
Dies ist eine gute Funktion für die Ausführung in einem der
Startskripte des Systems bevor die Dateisysteme im Lese-/Schreibmodus
eingehängt werden.
Diese Funktion sollte niemals auf einem laufenden System verwandt werden.
Springende Systemzeit führt zu Problemen, wie fehlerhaften
Dateisystemzeitstempeln. Falls auch etwas die Hardware-Uhr geändert
hat, wie NTPs »11-Minuten-Modus«, dann wird --hctosys die
Zeit durch Berücksichtigung der Abweichungsausgleichung inkorrekt
einstellen.
Die Abweichungsausgleichung kann durch Setzen des Abweichungsfaktors in
/etc/adjtime auf Null unterdrückt werden. Diese Einstellung ist
dauerhaft, solange wie die Option --update-drift nicht zusammen mit
--systohc beim Herunterfahren des Systems (oder irgendwann sonst)
verwandt wird. Eine andere Möglichkeit, dies zu unterdrücken
besteht durch die Option --noadjfile beim Einsatz der Funktion
--hctosys. Eine dritte Methode besteht im Löschen der Datei
/etc/adjtime. Hwclock wird dann standardmäßig die
UTC-Zeitskala für die Hardware-Uhr verwenden. Falls die Hardware-Uhr in
lokaler Zeit läuft, muss das in dieser Datei definiert werden. Dies
kann durch Aufruf von hwclock --localtime --adjust erfolgen. Wenn die
Datei nicht vorhanden ist, wird dieser Befehl nicht wirklich die Uhr anpassen
sondern wird die Datei mit der konfigurierten lokalen Zeit und einem
Abweichungsfaktor von Null anlegen.
Eine Bedingung, unter der die Abweichungskorrektur von hwclock verhindert
werden sollte, könnte beim Dualstart von mehreren Betriebssystemen
vorliegen. Falls, während diese Instanz von Linux angehalten ist, ein
anderes Betriebssystem die Hardware-Uhr stellt, dann wird die
Abweichungskorrektur nach dem Start dieser Instanz bei der Anwendung inkorrekt
sein.
Damit die Abweichungskorrektur von hwclock korrekt funktioniert, ist es
zwingend, dass nichts die Hardware-Uhr ändert, während die
Linux-Instanz nicht läuft.
setzt die Hardware-Uhr auf die durch die
Option --date angegebene Zeit und aktualisiert die Zeitstempel in
/etc/adjtime. Mit der Option --update-drift wird der
Abweichungsfaktor (neu) berechnet. Versuchen Sie, die Option wegzulassen,
falls --set fehlschlägt. Siehe --update-drift
unten.
Dies ist eine Alternative zu der Funktion
--hctosys, die nicht die Hardware-Uhr liest und nicht die Systemzeit
setzt. Entsprechend gibt es auch keine Korrektur der Abweichung. Sie ist
für Hochfahrskripte auf Systemen mit Kerneln höher als 2.6
gedacht, bei denen Sie wissen, dass die Systemuhr bereits vom Kernel
während des Systemstarts aus der Hardware-Uhr gesetzt wurde.
Dies führt die folgenden Dinge aus, die weiter oben in der Funktion
--hctosys beschrieben sind:
•Korrigiert die Systemuhrzeitskala auf
UTC wie benötigt. Anstatt aber dies durch Setzen der Systemuhr zu
erreichen, informiert hwclock einfach den Kernel und der kümmert
sich um die Änderung.
•Setzt die NTP
»11-Minuten-Modus«-Zeitskala des Kernels.
•Setzt die Zeitzone des Kernels
setzt die Hardware-Uhr aus der Systemuhr und
aktualisiert die Zeitstempel in /etc/adjtime. Mit der Option
--update-drift wird auch der Abweichungsfaktor (neu) berechnet.
Versuchen Sie es ohne die Option, falls --systohc fehlschlägt.
Siehe --update-drift weiter unten.
zeigt einen Hilfetext an und beendet das
Programm.
zeigt die Versionsnummer an und beendet das
Programm.
OPTIONEN
--adjfile=Dateinamesetzt den vorgegebenen Dateipfad
/etc/adjtime außer Kraft.
Diese Option muss zusammen mit den Funktionen
--set oder --predict verwandt werden, andernfalls wird sie
ignoriert.
hwclock --set --date='16:45'
hwclock --predict --date='2525-08-14 07:11:05'
Das Argument muss in lokaler Zeit sein, selbst wenn Sie Ihre Hardware-Uhr in UTC
halten. Siehe die Option --localtime. Daher sollte das Argument keine
Zeitzoneninformationen enthalten. Es sollte auch keine relative Zeit wie
»+5 minutes« sein, da hwclocks Genauigkeit von dem
Zusammenhang zwischen dem Wert des Arguments und dem Zeitpunkt, zu dem die
Eingabetaste gedrückt wird, abhängt. Sekundenbruchteile werden
ohne Rückmeldung abgeschnitten. Diese Option kann viele Zeit- und
Datumsformate erkennen, aber die vorhergehenden Parameter sollten beachtet
werden.
Diese Option erlaubt es, die intern verwandte
Verzögerung beim Setzen der Uhrzeit zu ändern. Die Vorgabe ist
0.5 (500 ms) für rtc_cmos, für andere RTC-Typen ist die
Verzögerung 0. Falls der RTC-Typ nicht (aus Sysfs) bestimmt werden
kann, dann ist die Vorgabe aufgrund der
Rückwärtskompatibilität auch 0.5.
Die Standardverzögerung von 500 ms basiert auf der häufig
verwandten, MC146818A-kompatiblen (X86-)Hardwareuhr. Die Hardwareuhr kann nur
auf ganzzahlige Zeiten plus eine halbe Sekunde gesetzt werden. Die
Ganzzahlzeit ist notwendig, da es keine Schnittstelle gibt, um
Sekundenbruchteile zu setzen oder abzufragen. Die zusätzliche halbe
Sekunde Verzögerung erfolgt, da die Hardwareuhr sich auf die folgende
Sekunde genau 500 ms nach dem Setzen der neuen Zeit aktualisiert.
Unglücklicherweise ist dieses Verhalten hardwareabhängig und in
einigen Fällen wird eine andere Verzögerung
benötigt.
Verwenden Sie --verbose. Die Option
--debug ist veraltet und kann in einer zukünftigen
Veröffentlichung einer neuen Verwendung zugeführt oder entfernt
werden.
Diese Option ist auf ISA-kompatiblen Maschinen
(einschließlich X86 und X86_64 von Bedeutung. Auf anderen Maschinen hat
sie keine Auswirkungen. Diese Option weist hwclock explizit an,
E/A-Anweisungen für den Zugriff auf die Hardware-Uhr vorzunehmen. Ohne
diese Option versucht hwclock, die RTC-Gerätdatei zu verwenden,
wobei angenommen wird, dass diese mit dem Linux-RTC-Gerätetreiber
läuft. Seit v2.26 wird er nicht mehr automatisch directisa verwenden,
wenn der RTC-Treiber nicht verfügbar ist. Dies führte zu
unsicheren Bedingungen, die es erlaubten, dass zwei Prozesse auf die
Hardware-Uhr gleichzeitig zugreifen konnten. Direkter Hardware-Zugriff aus dem
Benutzerraum sollte nur zum Testen, zur Fehlersuche und als letzte Rettung,
wenn alle anderen Methoden fehlschlagen, verwandt werden. Siehe die Option
--rtc.
Diese Option ist notwendig, wenn die Funktion
--setepoch verwandt wird. Das minimale Jahr ist 1900. Das
maximale ist systemabhängig ( ULONG_MAX - 1).
Setzt den Vorgabe-RTC-Dateinamen von
hwclock außer Kraft. Andernfalls wird der erste aus der
folgenden Liste (in dieser Reihenfolge) verwendet: /dev/rtc0,
/dev/rtc, /dev/misc/rtc. Für IA-64:
/dev/efirtc /dev/misc/efirtc
zeigt an, auf welche Zeitskala die
Hardware-Uhr gesetzt ist.
Die Hardware-Uhr kann konfiguriert sein, entweder UTC oder die lokale Zeitskala
zu verwenden, allerdings gibt es nichts in der Uhr, das angibt, welche der
Varianten gewählt wurde. Die Optionen --localtime und
--utc übergeben diese Information an den Befehl hwclock.
Falls Sie das Falsche angeben (oder keines angeben und die falsche
Voreinstellung nehmen), werden sowohl das Setzen als auch das Lesen der
Hardware-Uhr inkorrekt sein.
Falls Sie weder --utc noch --localtime angeben, dann wird die
zuletzt mit der Setzen-Funktion ( --set, --systohc oder
--adjust) verwendete benutzt, wie dies in /etc/adjtime
aufgezeichnet ist. Falls die adjtime-Datei nicht existiert, wird UTC als
Vorgabe verwendet.
Hinweis: Zeitübergangs-Änderungen können inkonsistent sein,
falls die Hardware-Uhr in lokaler Zeit betrieben wird. Lesen Sie die
Diskussion weiter unten unter LOKAL vs. UTC.
deaktiviert die von /etc/adjtime
bereitgestellten Leistungen. hwclock liest oder schreibt nicht in diese
Datei, wenn diese Option angegeben ist. Entweder --utc oder
--localtime müssen mit dieser Option angegeben werden.
ändert tatsächlich nichts am
System, d.h. die Uhren oder /etc/adjtime (diese Option impliziert
--verbose).
aktualisiert den Abweichungsfaktor der
Hardware-Uhr in /etc/adjtime. Sie kann nur zusammen mit --set
oder --systohc verwendet werden.
Zwischen Einstellungen ist minimal ein Abstand von vier Stunden notwendig. Damit
werden ungültige Berechnungen vermieden. Je länger die Periode,
desto präziser wird der sich ergebende Abweichungsfaktor sein.
Diese Option wurde in v2.26 hinzugefügt, da typischerweise auf Systemen
beim Herunterfahren hwclock --systohc aufgerufen wird. Mit dem alten
Verhalten würde dabei automatisch der Abweichungsfaktor (neu) berechnet
werden, wodurch mehrere Probleme entstanden:
•Wird NTP mit einem
»11-Minuten-Modus«-Kernel verwandt, würde der
Abweichungsfaktor auf fast Null verfremdet.
•Es würde nicht die Verwendung
von »kalter«-Abweichungskorrektur erlauben. Bei den meisten
Konfigurationen führt die »kalte« Abweichungskorrektur zu
besseren Ergebnissen. Kalt bedeutet, wenn die Maschine ausgeschaltet ist, was
eine wesentliche Auswirkung auf den Abweichungsfaktor haben kann.
•(Neu-)Berechnung des
Abweichungsfaktors bei jedem Herunterfahren führt zu suboptimalen
Ergebnissen. Führen beispielsweise kurzzeitige Bedingungen dazu, dass
die Maschine ungewöhnlich heiß wird, wäre die
Abweichungsfaktorberechnung außerhalb des
Gültigkeitsbereichs.
•Signifikant erhöhte
System-Runterfahrzeiten (bei v2.31 wird die RTC nicht gelesen, wenn
--update-drift nicht verwendet wird).
zeigt mehr Details über die internen
Vorgänge von hwclock an.
ANMERKUNGEN
Uhren in einem Linux-System
Es gibt zwei Arten von Datum-Zeit-Uhren:Zugriffsmethoden auf Hardware-Uhren
hwclock verwendet viele verschiedene Arten, die Hardware-Uhr-Werte zu ermitteln und zu setzen. Der normale Weg besteht in E/A zu der besondere Datei des RTC-Geräts. Dabei wird angenommen, dass diese vom RTC-Treiber betrieben wird. Auch sind Linux-Systeme, die das RTC-Konzept mit Udev verwenden, in der Lage, mehrere Hardware-Uhren zu unterstützen. Damit könnte die Notwendigkeit entstehen, das Vorgabe-RTC-Gerät mit der Option --rtc außer Kraft zu setzen.Die Adjust-Funktion
Die Hardware-Uhr ist üblicherweise nicht sehr genau. Jedoch lässt sich die Genauigkeit recht gut vorhersagen – sie geht jeden Tag die gleiche Zeit vor oder nach. Dies nennt man die Systemabweichung. Mit der Funktion --adjust von hwclock können Sie die Systemabweichung der Hardware-Uhr korrigieren.Die Datei Adjtime
Sie wurde wegen ihres früheren ausschließlichen Zwecks der Steuerung des Abgleichs so benannt und enthält außerdem Informationen, die hwclock für spätere Aufrufe speichert.Automatischer Abgleich der Hardware-Uhr durch den Kernel
Es gibt auf einigen Systemen einen weiteren Weg, die Hardware-Uhr synchron zu halten. Der Linux-Kernel verfügt über einen Modus, in dem in Abständen von 11 Minuten die Systemzeit in die Hardware-Uhr kopiert wird. Dieser Modus wird beim Kompilieren ausgewählt, daher werden nicht alle Kernel über diese Fähigkeit verfügen. Dieser Modus ist sinnvoll, wenn Sie etwas Fortschrittliches wie NTP verwenden, um die Systemuhr synchron zu halten. (NTP bezeichnet die Synchronisation der Systemzeit entweder über einen Zeitserver im Netzwerk oder über eine an Ihrem System angeschlossene Funkuhr, siehe RFC 1305.)Jahrhundertwert der ISA-Hardware-Uhr
Es gibt eine Art von Standard, der das CMOS-Speicherbyte 50 auf einer ISA-Maschine als Anzeiger für das aktuelle Jahrhundert verwendet. hwclock nutzt oder setzt dieses Byte nicht, da es einige Maschinen gibt, die das Byte nicht auf diese Weise definieren und es sowieso unnötig ist. Das year-of-century leistet gute Arbeit beim Ermitteln des aktuellen Jahrhunderts.DATUM-ZEIT-KONFIGURATION
Zeit ohne externe Synchronisation erhalten
Diese Diskussion basiert auf den folgenden Annahmen:•Es läuft nichts, das die
Echtzeituhren ändert, wie ein NTP-Daemon oder ein Cron-Job.
•Die Systemzeitzone ist für die
korrekte lokale Zeit konfiguriert. Siehe unten unter POSIX kontra
»KORREKT«.
•Früh während des
Systemstarts wird Folgendes in dieser Reihenfolge aufgerufen: adjtimex
--tick Wert --frequency Wert hwclock
--hctosys
•Während des Herunterfahrens
wird Folgendes aufgerufen: hwclock --systohc
•Systeme ohne adjtimex
können ntptime verwenden.
Stellen Sie sicher, dass kein NTP-Daemon
beim Systemstart gestartet wird.
Beim Herunterfahren muss die Zeit der
Systemuhr korrekt sein!
Fahren Sie das System herunter.
Lassen Sie eine ausgedehnte Zeit vergehen,
ohne die Hardware-Uhr zu ändern.
Starten Sie das System.
Verwenden Sie sofort hwclock, um die
korrekte Zeit zu setzen, fügen Sie dabei die Option
--update-drift hinzu.
LOKAL vs. UTC
Wird die Hardware-Uhr in der lokalen Zeitskala betrieben, führt dies zu inkonsistenten Sommerzeitergebnissen:•Falls Linux während des
Sommer-/Winterzeitwechsels läuft, wird die in die Hardware-Uhr
geschriebene Zeit für die Änderung angepasst.
•Falls Linux NICHT während des
Sommer-/Winterzeitwechsels läuft, wird die von der Hardware-Uhr
gelesene Zeit NICHT für die Änderung angepasst werden.
POSIX kontra »KORREKT«
Eine Diskussion der Datum/Zeit-Konfiguration wäre allerdings unvollständig, ohne Zeitzonen zu behandeln. Dies wird gut in tzset(3) abgedeckt. Ein Punkt, für den es keine Dokumentation gibt, ist das »korrekte« Verzeichnis der Zeitzonendatenbank, manchmal auch tz oder Zoneinfo genannt.EXIT-STATUS
Eine der folgenden Rückgabewerte wird zurückgeliefert:Erfolgreiche Programmausführung.
Die Aktion ist fehlgeschlagen oder die
Befehlssyntax war ungültig.
UMGEBUNGSVARIABLEN
TZFalls diese Variable gesetzt ist, hat ihr Wert
gegenüber der im System konfigurierten Zeitzone Vorrang.
Falls diese Variable gesetzt ist, hat ihr Wert
gegenüber dem im System konfigurierten
Zeitzonendatenbankverzeichnispfad Vorrang.
DATEIEN
/etc/adjtimeDie Konfiguration und die Zustandsdateien
für hwclock. Siehe auch adjtime_config(5).
Die Systemzeitzonendatei
Das
System-Zeitzonen-Datenbankverzeichnis
SIEHE AUCH
date(1), adjtime_config(5), adjtimex(8), gettimeofday(2), settimeofday(2), crontab(1p), tzset(3)AUTOREN
Geschrieben von Bryan <[email protected]>Henderson September 1996, basierend auf dem Programm clock(8) von Charles Hedrick, Rob Hooft und Harald Koenig. Im Quellcode finden Sie die vollständige Geschichte einschließlich der Danksagungen.FEHLER MELDEN
Verwenden Sie zum Melden von Fehlern das Fehlererfassungssystem auf <https://github.com/util-linux/util-linux/issues>.VERFÜGBARKEIT
Der Befehl hwclock ist Teil des Pakets util-linux, welches heruntergeladen werden kann von: Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann <[email protected]>, Dr. Tobias Quathamer <[email protected]> und Helge Kreutzmann <[email protected]> erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer11. Mai 2022 | util-linux 2.38.1 |