L'horloge gérée par le noyau Linux n'est pas la même que l'horloge matérielle.
L'horloge matérielle fonctionne même lorsque vous éteignez votre système.
L'horloge matérielle est également appelée horloge BIOS. Vous pouvez modifier la date et l'heure de l'horloge matérielle à partir du BIOS.
Cependant, lorsque le système est opérationnel, vous pouvez toujours afficher et définir la date et l'heure du matériel à l'aide de la commande Linux hwclock, comme expliqué dans ce didacticiel.
1. Afficher la date et l'heure de l'horloge matérielle
Tapez simplement hwclock, qui affichera la date et l'heure de l'horloge matérielle de votre système. Il s'agit de la même date et heure que vous verrez sur l'écran du BIOS. Vous pouvez également utiliser l'option -r ou –show pour afficher la date et l'heure.
# 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
Remarque :La sortie de la commande date peut être la même que la sortie de la commande hwclock (en fait, elle devrait être la même). Mais, la commande date obtient la date et l'heure de l'horloge gérée à partir du noyau Linux. Ceci par exemple, il y a environ 10 minutes de différence entre eux.
# date Sat Aug 10 08:11:21 PDT 2013
2. Copier l'heure système sur l'heure matérielle
Vous voulez vraiment vous assurer que votre horloge matérielle a la même date et heure que l'horloge système.
Comme vous le voyez actuellement, il y a une différence entre l'horloge système et l'heure de l'horloge matérielle.
# date Sat Aug 10 08:16:17 PDT 2013 # hwclock Sat 10 Aug 2013 08:26:53 AM PDT -0.687841 seconds
Utilisez donc la commande hwclock comme indiqué ci-dessous pour régler l'horloge matérielle de la même manière que l'horloge système. C'est l'utilisation typique de la commande 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
Remarque :Les options -w et –systohc font la même chose. J'aime utiliser –systohc car il est facile à retenir. –systohc signifie « horloge système vers matériel », qui copie l'heure du système vers l'horloge matérielle.
# hwclock --systohc
3. Définir manuellement la date et l'heure de l'horloge matérielle
Au lieu de copier la date et l'heure du système sur l'horloge matérielle, vous pouvez également définir manuellement la valeur à l'aide de l'option –set et –date, comme indiqué ci-dessous.
Ce qui suit fixera la date au 11 août 2013. Veuillez noter que si vous ne spécifiez pas l'heure, elle sera fixée à 12:00:00 AM.
# hwclock --set --date 8/11/2013 # hwclock Sun 11 Aug 2013 12:00:04 AM PDT -0.703489 seconds
Vous pouvez également régler la date et l'heure en même temps, comme indiqué ci-dessous. Veuillez noter qu'il utilisera l'heure locale par défaut.
# hwclock --set --date "8/11/2013 23:10:45" # hwclock Sun 11 Aug 2013 11:10:48 PM PDT -0.562862 seconds
Vous pouvez également prendre la sortie de la commande date et la transmettre à l'option –set et –date comme indiqué ci-dessous.
# 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. Copier l'heure du matériel dans l'heure du système
Lorsque votre horloge matérielle affiche la date et l'heure correctes, mais pas votre horloge système, vous pouvez utiliser l'option -s comme indiqué ci-dessous pour copier l'heure matérielle dans l'heure système, comme indiqué ci-dessous.
# 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
Remarque :Les options -s et –hctosys font la même chose. J'aime utiliser –hctosys car il est facile à retenir. –hctosys signifie « horloge matérielle vers système », qui copie l'heure de l'horloge matérielle vers l'horloge système.
# hwclock -hctosys
Lors du test, si vous avez altéré l'heure de votre système, vous pouvez utiliser les exemples de commande de date pour la régler sur la date et l'heure correctes.
5. Mode de débogage hwclock
Lorsque vous passez l'option –debug au hwclock, il affiche des informations de débogage, qui montrent exactement ce que fait la commande hwclock.
Ce qui suit montre exactement ce qu'il fait lorsque nous copions l'heure système sur l'heure matérielle.
# 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.
Ce qui suit montre exactement ce qu'il fait lorsque nous copions l'heure du matériel sur l'heure du système.
# 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
Remarque :sur les machines alpha, vous pouvez utiliser getepoch pour afficher l'époque, setepoch pour définir l'époque. Lorsque vous essayez de l'exécuter sur une machine Alpha, vous obtenez la machine d'erreur suivante.
# 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. Ajuster l'horloge matérielle
Lorsque le système démarre, il prend l'heure de l'horloge matérielle. Le fichier /etc/adjtime est utilisé par l'option hwclock –adjust pour contrôler l'ajustement.
# hwclock --adjust
Le fichier /etc/adjtime comporte les trois lignes suivantes.
# cat /etc/adjtime -3.019877 1375975224 0.000000 1375975224 UTC
- Les trois valeurs de la 1ère ligne représentent 1) le taux de dérive systématique en secondes par jour, 2) le nombre de secondes depuis 1969 UTC de l'ajustement récent 3) juste 0
- La ligne 2 est la même valeur que celle que vous voyez dans la 1ère ligne, 2ème valeur. c'est-à-dire le nombre de secondes depuis 1969 UTC d'ajustement récent
- La ligne 3 indiquera UTC ou LOCAL
7. Mode test hwclock
Lorsque vous modifiez des éléments à l'aide de hwclock, en utilisant l'option –test, vous pouvez exécuter la commande sans vraiment apporter de modifications.
L'option –systz modifiera le fuseau horaire du système en conséquence. Mais, puisque nous avons donné -test, cela ne fera pas vraiment le changement, mais il exécutera toujours la commande sans aucun problème.
# hwclock --systz --test Not setting system clock because running in test mode.
La meilleure utilisation du mode test est lorsque vous le combinez avec l'option de débogage. C'est-à-dire lorsque vous voulez voir ce que fait la commande hwclock, mais sans apporter de modifications.
# 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.
Ce qui suit montre exactement ce que fait l'option –adjust sans vraiment faire d'ajustement.
# 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.