L'orologio gestito dal kernel Linux non è lo stesso dell'orologio hardware.
L'orologio hardware funziona anche quando spegni il sistema.
L'orologio hardware è anche chiamato orologio BIOS. È possibile modificare la data e l'ora dell'orologio hardware dal BIOS.
Tuttavia, quando il sistema è attivo e funzionante, puoi comunque visualizzare e impostare la data e l'ora dell'hardware utilizzando il comando hwclock di Linux, come spiegato in questo tutorial.
1. Visualizza la data e l'ora dell'orologio hardware
Digita semplicemente hwclock, che visualizzerà la data e l'ora dell'orologio hardware del tuo sistema. Questa è la stessa data e ora che vedrai dalla schermata del BIOS. Puoi anche usare l'opzione -r o –show per visualizzare la data e l'ora.
# 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
Nota:l'output del comando date potrebbe essere lo stesso dell'output del comando hwclock (in realtà dovrebbe essere lo stesso). Tuttavia, il comando date ottiene la data e l'ora dall'orologio gestito dal kernel Linux. Ad esempio, ci sono circa 10 minuti di differenza tra loro.
# date Sat Aug 10 08:11:21 PDT 2013
2. Copia l'ora del sistema nell'ora dell'hardware
Vuoi davvero assicurarti che il tuo orologio hardware abbia la stessa data e ora dell'orologio di sistema.
Come puoi vedere attualmente c'è una differenza tra l'orologio di sistema e l'ora dell'orologio hardware.
# date Sat Aug 10 08:16:17 PDT 2013 # hwclock Sat 10 Aug 2013 08:26:53 AM PDT -0.687841 seconds
Quindi, utilizzare il comando hwclock come mostrato di seguito per impostare l'orologio hardware come l'orologio di sistema. Questo è l'uso tipico del comando hwclock.
# hwclock -w # hwclock Sat 10 Aug 2013 08:16:27 AM PDT -0.625382 seconds # date Sat Aug 10 08:16:28 PDT 2013
Nota:entrambe le opzioni -w e –systohc fanno lo stesso. Mi piace usare –systohc perché è facile da ricordare. –systohc sta per "orologio dal sistema all'hardware", che copia l'ora dal sistema all'orologio hardware.
# hwclock --systohc
3. Imposta manualmente data e ora dell'orologio hardware
Invece di copiare la data e l'ora del sistema sull'orologio hardware, puoi anche impostare manualmente il valore usando l'opzione –set e –date come mostrato di seguito.
Quanto segue imposterà la data all'11 agosto 2013. Tieni presente che se non specifichi l'ora, sarà impostata alle 00:00:00.
# hwclock --set --date 8/11/2013 # hwclock Sun 11 Aug 2013 12:00:04 AM PDT -0.703489 seconds
È inoltre possibile impostare sia la data che l'ora contemporaneamente, come mostrato di seguito. Tieni presente che utilizzerà l'ora locale per impostazione predefinita.
# hwclock --set --date "8/11/2013 23:10:45" # hwclock Sun 11 Aug 2013 11:10:48 PM PDT -0.562862 seconds
Puoi anche prendere l'output del comando date e passarlo all'opzione –set e –date come mostrato di seguito.
# 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. Copia l'ora dell'hardware nell'ora di sistema
Quando l'orologio hardware mostra la data e l'ora corrette, ma non l'orologio di sistema, puoi utilizzare l'opzione -s come mostrato di seguito per copiare l'ora hardware nell'ora di sistema come mostrato di seguito.
# 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
Nota:entrambe le opzioni -s e –hctosys fanno lo stesso. Mi piace usare –hctosys perché è facile da ricordare. –hctosys sta per "orologio hardware al sistema", che copia l'ora dall'orologio hardware all'orologio di sistema.
# hwclock -hctosys
Durante il test, se hai incasinato l'ora del tuo sistema, puoi utilizzare gli esempi del comando date per impostarlo in modo che la data e l'ora siano corrette.
5. Modalità di debug hwclock
Quando si passa l'opzione –debug a hwclock, vengono visualizzate alcune informazioni di debug, che mostrano esattamente cosa fa il comando hwclock.
Quanto segue mostra esattamente cosa fa quando copiamo l'ora del sistema nell'ora dell'hardware.
# 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.
Quanto segue mostra esattamente cosa fa quando copiamo l'ora dell'hardware nell'ora del sistema.
# 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
Nota:sulle macchine alfa puoi usare getepoch per visualizzare l'epoca, setepoch per impostare l'epoca. Quando provi a eseguirlo su una macchina Alpha, otterrai la seguente macchina di errore.
# 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. Regola l'orologio hardware
Quando il sistema si avvia, prende l'ora dall'orologio hardware. Il file /etc/adjtime viene utilizzato dall'opzione hwclock –adjust per controllare la regolazione.
# hwclock --adjust
Il file /etc/adjtime ha le seguenti tre righe.
# cat /etc/adjtime -3.019877 1375975224 0.000000 1375975224 UTC
- I tre valori nella prima riga rappresentano 1) tasso di deriva sistematico in secondi al giorno, 2) numero di secondi dal 1969 UTC di recente adeguamento 3) solo 0
- La riga 2 è lo stesso valore che vedi nella prima riga, il secondo valore. ovvero il numero di secondi trascorsi dal 1969 UTC di recente adeguamento
- La riga 3 indicherà UTC o LOCAL
7. Modalità test hwclock
Quando modifichi le cose usando hwclock, usando l'opzione –test, puoi eseguire il comando senza apportare modifiche.
L'opzione –systz cambierà il fuso orario del sistema di conseguenza. Ma, dal momento che abbiamo dato –test, non apporterà davvero la modifica, ma eseguirà comunque il comando senza problemi.
# hwclock --systz --test Not setting system clock because running in test mode.
Il miglior uso della modalità test è quando la combini con l'opzione di debug. Cioè quando vuoi vedere cosa fa il comando hwclock, ma senza apportare modifiche.
# 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.
Quanto segue mostra esattamente cosa fa l'opzione –adjust senza effettuare alcuna regolazione.
# 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.