Die vom Linux-Kernel verwaltete Uhr ist nicht die gleiche wie die Hardware-Uhr.
Die Hardware-Uhr läuft auch dann, wenn Sie Ihr System herunterfahren.
Die Hardware-Uhr wird auch als BIOS-Uhr bezeichnet. Sie können das Datum und die Uhrzeit der Hardware-Uhr im BIOS ändern.
Wenn das System jedoch betriebsbereit ist, können Sie das Datum und die Uhrzeit der Hardware weiterhin mit dem Linux-Befehl hwclock anzeigen und einstellen, wie in diesem Tutorial erläutert.
1. Datum und Uhrzeit der Hardwareuhr anzeigen
Geben Sie einfach hwclock ein, das Datum und Uhrzeit der Hardwareuhr Ihres Systems anzeigt. Dies ist das gleiche Datum und die gleiche Uhrzeit, die Sie auf dem BIOS-Bildschirm sehen. Sie können auch die Option -r oder –show verwenden, um das Datum und die Uhrzeit anzuzeigen.
# hwclock Sat 10 Aug 2013 08:26:12 AM PDT -0.312862 seconds # hwclock -r Sat 10 Aug 2013 08:20:54 AM PDT -0.109748 seconds # hwclock --show Sat 10 Aug 2013 08:21:12 AM PDT -0.640982 seconds
Hinweis:Die Ausgabe des date-Befehls kann mit der Ausgabe des hwclock-Befehls identisch sein (eigentlich sollte sie identisch sein). Der Datumsbefehl ruft jedoch das Datum und die Uhrzeit von der Uhr ab, die vom Linux-Kernel verwaltet wird. In diesem Beispiel gibt es einen Unterschied von etwa 10 Minuten zwischen ihnen.
# date Sat Aug 10 08:11:21 PDT 2013
2. Systemzeit in Hardwarezeit kopieren
Sie möchten wirklich sicherstellen, dass Ihre Hardwareuhr dasselbe Datum und dieselbe Uhrzeit wie die Systemuhr hat.
Wie Sie derzeit sehen, gibt es einen Unterschied zwischen der Systemuhr und der Hardwareuhrzeit.
# date Sat Aug 10 08:16:17 PDT 2013 # hwclock Sat 10 Aug 2013 08:26:53 AM PDT -0.687841 seconds
Verwenden Sie also den Befehl hwclock wie unten gezeigt, um die Hardwareuhr auf die gleiche wie die Systemuhr einzustellen. Dies ist die typische Verwendung des hwclock-Befehls.
# hwclock -w # hwclock Sat 10 Aug 2013 08:16:27 AM PDT -0.625382 seconds # date Sat Aug 10 08:16:28 PDT 2013
Hinweis:Sowohl die Optionen -w als auch –systohc bewirken dasselbe. Ich verwende gerne –systohc, da es leicht zu merken ist. –systohc steht für „System to Hardware Clock“, die die Zeit von der System- zur Hardware-Uhr kopiert.
# hwclock --systohc
3. Datum und Uhrzeit der Hardwareuhr manuell einstellen
Anstatt das Systemdatum und die Uhrzeit auf die Hardwareuhr zu kopieren, können Sie den Wert auch manuell mit den Optionen –set und –date wie unten gezeigt einstellen.
Im Folgenden wird das Datum auf den 11. August 2013 eingestellt. Bitte beachten Sie, dass es auf 00:00:00 Uhr eingestellt wird, wenn Sie die Uhrzeit nicht angeben.
# hwclock --set --date 8/11/2013 # hwclock Sun 11 Aug 2013 12:00:04 AM PDT -0.703489 seconds
Sie können Datum und Uhrzeit auch gleichzeitig einstellen, wie unten gezeigt. Bitte beachten Sie, dass standardmäßig die Ortszeit verwendet wird.
# hwclock --set --date "8/11/2013 23:10:45" # hwclock Sun 11 Aug 2013 11:10:48 PM PDT -0.562862 seconds
Sie können auch die Ausgabe des date-Befehls nehmen und wie unten gezeigt an die Optionen –set und –date übergeben.
# hwclock --set --date "Sat Aug 10 08:31:24 PDT 2013" # hwclock Sat 10 Aug 2013 08:31:28 AM PDT -0.594118 seconds
4. Hardwarezeit in Systemzeit kopieren
Wenn Ihre Hardwareuhr das richtige Datum und die richtige Uhrzeit anzeigt, aber nicht Ihre Systemuhr, können Sie die Option -s wie unten gezeigt verwenden, um die Hardwarezeit wie unten gezeigt in die Systemzeit zu kopieren.
# hwclock Sat 10 Aug 2013 08:20:28 AM PDT -0.687872 seconds # date Sat Aug 10 08:34:48 PDT 2013 # hwclock -s # date Sat Aug 10 08:20:55 PDT 2013
Hinweis:Sowohl die Optionen -s als auch –hctosys bewirken dasselbe. Ich verwende gerne –hctosys, da es leicht zu merken ist. –hctosys steht für „Hardware Clock to System“, wodurch die Uhrzeit von der Hardware-Uhr auf die Systemuhr kopiert wird.
# hwclock -hctosys
Wenn Sie beim Testen Ihre Systemzeit durcheinander gebracht haben, können Sie die Datumsbefehlsbeispiele verwenden, um sie auf das richtige Datum und die richtige Uhrzeit einzustellen.
5. hwclock Debug-Modus
Wenn Sie die Option –debug an hwclock übergeben, zeigt sie einige Debug-Informationen an, die genau zeigen, was der Befehl hwclock tut.
Das Folgende zeigt genau, was es tut, wenn wir die Systemzeit in die Hardwarezeit kopieren.
# hwclock --systohc --debug hwclock from util-linux-ng 2.17.2 Using /dev interface to clock. Last drift adjustment done at 1375974983 seconds after 1969 Last calibration done at 1375974983 seconds after 1969 Hardware clock is on UTC time Assuming hardware clock is kept in UTC time. Waiting for clock tick... ...got clock tick Time read from Hardware Clock: 2013/08/10 15:16:37 Hw clock time : 2013/08/10 15:16:37 = 1375974997 seconds since 1969 Time elapsed since reference time has been 0.009002 seconds. Delaying further to reach the new time. Setting Hardware Clock to 15:16:37 = 1375974997 seconds since 1969 ioctl(RTC_SET_TIME) was successful. Not adjusting drift factor because it has been less than a day since the last calibration.
Das Folgende zeigt genau, was es tut, wenn wir die Hardwarezeit in die Systemzeit kopieren.
# hwclock -hctosys --debug hwclock from util-linux-ng 2.17.2 Using /dev interface to clock. Last drift adjustment done at 1375975224 seconds after 1969 Last calibration done at 1375975224 seconds after 1969 Hardware clock is on UTC time Assuming hardware clock is kept in UTC time. Waiting for clock tick... ...got clock tick Time read from Hardware Clock: 2013/08/10 15:23:20 Hw clock time : 2013/08/10 15:23:20 = 1375975400 seconds since 1969 Calling settimeofday: tv.tv_sec = 1375975400, tv.tv_usec = 0 tz.tz_minuteswest = 420
Hinweis:Auf Alpha-Maschinen können Sie getepoch verwenden, um die Epoche anzuzeigen, setepoch, um die Epoche einzustellen. Wenn Sie versuchen, dies auf einer Alpha-Maschine auszuführen, erhalten Sie die folgende Fehlermaschine.
# hwclock --setepoch --epoch=1952 The kernel keeps an epoch value for the Hardware Clock only on an Alpha machine. This copy of hwclock was built for a machine other than Alpha (and thus is presumably not running on an Alpha now). No action taken.
6. Stellen Sie die Hardware-Uhr ein
Wenn das System startet, nimmt es die Zeit von der Hardware-Uhr. Die Datei /etc/adjtime wird von der Option hwclock –adjust verwendet, um die Anpassung zu steuern.
# hwclock --adjust
Die Datei /etc/adjtime hat die folgenden drei Zeilen.
# cat /etc/adjtime -3.019877 1375975224 0.000000 1375975224 UTC
- Die drei Werte in der ersten Zeile repräsentieren 1) die systematische Driftrate in Sekunden pro Tag, 2) die Anzahl der Sekunden seit 1969 UTC der letzten Anpassung, 3) nur 0
- Zeile 2 ist derselbe Wert, den Sie in der 1. Zeile sehen, 2. Wert. d.h. Anzahl der Sekunden seit 1969 UTC der letzten Anpassung
- Zeile 3 sagt entweder UTC oder LOCAL
7. hwclock-Testmodus
Wenn Sie Dinge mit hwclock ändern, können Sie mit der Option –test den Befehl ausführen, ohne wirklich Änderungen vorzunehmen.
Die Option –systz ändert die Systemzeitzone entsprechend. Aber da wir –test gegeben haben, wird es die Änderung nicht wirklich vornehmen, aber es wird den Befehl trotzdem ohne Probleme ausführen.
# hwclock --systz --test Not setting system clock because running in test mode.
Die beste Verwendung des Testmodus ist, wenn Sie ihn mit der Debug-Option kombinieren. Das heißt, wenn Sie sehen möchten, was der Befehl hwclock macht, aber keine Änderungen vornehmen.
# hwclock --systz --test --debug hwclock from util-linux-ng 2.17.2 Last drift adjustment done at 1375975224 seconds after 1969 Last calibration done at 1375975224 seconds after 1969 Hardware clock is on UTC time Assuming hardware clock is kept in UTC time. Current system time: 1375975586 = 2013/08/10 15:26:26 Calling settimeofday: UTC: 2013/08/10 15:26:26 tv.tv_sec = 1375975586, tv.tv_usec = 556277 tz.tz_minuteswest = 420 Not setting system clock because running in test mode.
Das Folgende zeigt genau, was die Option –adjust macht, ohne wirklich eine Anpassung vorzunehmen.
# hwclock --adjust --test --debug hwclock from util-linux-ng 2.17.2 Using /dev interface to clock. Last drift adjustment done at 1375975224 seconds after 1969 Last calibration done at 1375975224 seconds after 1969 Hardware clock is on UTC time Assuming hardware clock is kept in UTC time. Waiting for clock tick... ...got clock tick Time read from Hardware Clock: 2013/08/10 15:30:35 Hw clock time : 2013/08/10 15:30:35 = 1375975835 seconds since 1969 Time since last adjustment is 611 seconds Need to insert -1 seconds and refer time back 0.978644 seconds ago Needed adjustment is less than one second, so not setting clock.