Date création : 30-03-2008 15:20:37
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section8 - Administration système]
HWCLOCK
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- OPTIONS
- NOTES
- Horloges dans un système Linux
- Comment hwclock accède à l'horloge machine
- La fonction d'ajustement
- Synchronisation automatique de l'horloge machine par le noyau
- Valeur du siècle de l'horloge machine ISA
- VARIABLES D'ENVIRONNEMENT
- FICHIERS
- VOIR AUSSI
- AUTEURS
- TRADUCTION
NOM
hwclock - Interrogation et ajustement de l'horloge machine (RTC)
SYNOPSIS
hwclock -r ou hwclock --show
hwclock -w ou hwclock --systohc
hwclock -s ou hwclock --hctosys
hwclock -a ou hwclock --adjust
hwclock -v ou hwclock --version
hwclock --set --date=nouvelle_date
hwclock --getepoch
hwclock --setepoch --epoch=année
autres options :
[-u|--utc] --localtime --noadjfile --directisa --test [-D|--debug]
et les options obscures pour DEC Alpha :
[-A|--arc] [-J|--jensen] [-S|--srm] [-F|--funky-toy]
Les abréviations minimales et uniques de toutes les options sont
acceptables.
-h affiche un message d'aide.
DESCRIPTION
hwclock permet d'accéder à l'horloge machine. Vous pouvez afficher
l'heure machine actuelle, modifier l'heure de l'horloge machine, mettre
l'horloge machine à l'heure système et mettre l'heure système à l'heure de
l'horloge machine.
Vous pouvez également exécuter hwclock périodiquement afin d'ajouter ou
de retirer du temps à l'horloge machine pour compenser la dérive
systématique (l'horloge perd ou gagne systématiquement du temps à une
certaine vitesse)
OPTIONS
Vous avez besoin exactement d'une des options suivantes pour indiquer à
hwclock ce que vous souhaitez faire :
- --show
-
Lit l'heure machine et l'affiche sur la sortie standard. L'heure affichée
est toujours en heure locale, même si votre horloge machine est en temps
universel. Voir l'option --utc.
- --set
-
Met l'horloge machine à l'heure donnée par l'option --date
- --hctosys
-
Met l'heure système à l'heure de l'horloge machine.
Ajuste également le fuseau horaire du noyau au fuseau horaire local comme
indiqué dans la variable d'environnement TZ et/ou /usr/share/zoneinfo, de
la même manière que tzset(3) l'interpréterait. Le champ obsolète
tz_dsttime du noyau est mis à DST_NONE. (Pour plus de détails sur ce que ce
champs signifiait, voir settimeofday(2).)
C'est une option particulièrement utile dans un des scripts de démarrage.
- --systohc
-
Met l'horloge machine à l'heure système.
- --adjust
-
Ajoute ou retire du temps à l'horloge machine pour tenir compte de la dérive
systématique depuis la dernière fois où l'horloge à été ajustée. Voir la
discussion plus loin.
- --getepoch
-
Affiche la valeur de l'époque de l'horloge machine sur la sortie
standard. C'est le nombre d'années qui correspond à la valeur zéro du champ
année de l'horloge machine. Par exemple, si vous utilisez la convention que
le champ année de l'horloge machine contient le nombre d'années depuis 1952,
la valeur de l'époque de l'horloge machine pour le noyau doit être 1952.
La valeur de l'époque est utilisée à chaque fois qu'hwclock lit ou ajuste
l'horloge machine.
- --setepoch
-
Ajuste la valeur de l'époque de l'horloge machine pour le noyau à la valeur
spécifié par l'option --epoch. Veuillez vous référer à l'option
--getepoch pour plus de détails.
- --version
-
Affiche la version d'hwclock sur la sortie standard.
- --date=chaine_date
-
Cette option est nécessaire uniquement avec l'option --set. Sinon, elle
est ignorée. Elle spécifie l'heure à laquelle l'horloge machine sera
initialisée. La valeur de cette option est un argument du programme
date(1). Par exemple,
hwclock --set --date="9/22/96 16:45:05"
L'argument est en heure locale, même si votre horloge machine est en temps
universel. Voir l'option --utc.
- --epoch=année
-
Spécifie l'année qui sera le début de l'époque de l'horloge
machine. C'est-à-dire, le nombre d'années qui correspond à la valeur zéro du
champ année de l'horloge machine. C'est utilisé avec l'option --setepoch
pour permettre au noyau de connaître l'époque de l'horloge machine, ou sinon
pour spécifier l'époque à utiliser lors des accès ISA directs.
Par exemple, sur une machine Digital Unix :
hwclock --setepoch --epoch=1952
Les options suivantes s'appliquent à la plupart des options.
- --utc
-
- --localtime
-
Indique que l'horloge machine est à l'heure universelle, ou respectivement à
l'heure locale. C'est votre choix d'avoir l'horloge machine à l'heure locale
ou universelle (UTC), mais rien n'indique ce choix dans l'horloge. C'est
pourquoi cette option permet de donner cette information à hwclock.
Si vous spécifiez la mauvaise option parmi celles qui suivent (ou si vous
n'en spécifiez pas et que la valeur par défaut est fausse), la modification
et l'interrogation de l'horloge machine ne fonctionnera pas correctement.
Si vous ne spécifiez ni --utc ni --localtime, la valeur par défaut est
la valeur utilisée la dernière fois qu'hwclock a mis l'horloge à l'heure
(i.e. l'exécution de hwclock avec l'option --set, --systohc, ou
--adjust qui s'est terminée avec succès), comme sauvegardé dans le
fichier d'ajustement (/etc/adjtime). Si le fichier d'ajustement n'existe
pas, l'option locale est choisie.
- --noadjfile
-
Ne pas tenir compte de /etc/adjtime. hwclock ne lira ni n'écrira pas
dans ce fichier. L'option --utc ou --localtime doit obligatoirement
être spécifiée avec cette option.
- --directisa
-
Cette option est significative seulement sur une machine ISA ou Alpha (qui
implémente suffisamment le standard ISA pour être une machine ISA d'un point
de vue d'hwclock). Pour les autres machines, cela n'a pas d'impact. Cette
option indique à hwclock d'utiliser des instructions I/O explicites pour
accéder à l'horloge machine. Sans cette option, hwclock essaiera
d'utiliser /dev/rtc (ce qui suppose d'utiliser le pilote rtc). S'il est
incapable de l'ouvrir (en lecture), il utilisera de toute manière des
instructions I/O explicites.
Le pilote rtc a été introduit dans la version 2 de Linux.
- --badyear
-
Indique que l'horloge machine est incapable de stocker les années qui ne
sont pas comprises entre 1994 et 1999. C'est un problème lié à certains BIOS
(quasiment tous les « Award BIOS » fabriqués entre le 26/04/94 et le
31/05/95) qui sont incapables de gérer les années supérieures à 1999. Si on
essaie d'affecter une année inférieure à 94 (ou 95 dans certains cas), la
valeur réellement affectée est 94 (ou 95). Donc, si vous possédez une de ces
machines, hwclock ne peut pas affecter une année supérieure à 1999 et ne
peut donc pas utiliser la valeur de l'horloge comme une valeur normale.
Afin de compenser cela (sans mettre à jour votre BIOS, ce qui est pourtant
préférable), vous devez toujours utiliser --badyear si vous possédez une
de ces machines. Quand hwclock sait que l'horloge est endommagée, il
ignore la valeur de l'année de l'horloge machine, et essaie de deviner
l'année grâce à la date de dernière calibration sauvegardée dans le fichier
d'ajustement, en supposant que cette date est une date de l'année
précédente. Pour que cela fonctionne, vous feriez mieux d'exécuter hwclock
--set ou hwclock --systohc au moins une fois par an !
Bien qu'hwclock ignore l'année lorsqu'il lit l'horloge machine, il
modifie l'année lorsqu'il met l'horloge à l'heure. Il met alors l'année à
1995, 1996, 1997, ou 1998, celle qui a la même position dans le cycle des
années bissextile que la véritable année. De cette façon, l'horloge machine
insère les jours des années bissextiles où il faut. À nouveau, si vous
n'ajustez pas l'horloge machine pendant plus d'une année, cela ne marchera
pas et peut conduire à la perte d'un jour.
hwclock vous avertit que vous avez probablement besoin de --badyear
quand l'année de l'horloge machine est 1994 ou 1995.
- --srm
-
Cette option est équivalente à --epoch=1900 et est utilisée pour
spécifier l'époque standard sur les machines Alphas avec une console SRM.
- --arc
-
Cette option est équivalente à --epoch=1980 et est utilisée pour
spécifier l'époque standard sur les machines Alphas disposant d'une console
ARC (l'époque des machines Ruffians est 1900).
- --jensen
-
- --funky-toy
-
Ces deux options indiquent de quel type est votre machine Alpha. Elles sont
invalides si vous ne disposez pas d'une machine Alpha et sont généralement
inutiles si vous en avez une puisque hwclock devrait être capable de le
déterminer tout seul, du moins lorsque /proc est monté. (Si vous vous
rendez compte qu'une de ces options est nécessaire afin de faire fonctionner
hwclock, veuillez contacter le responsable afin de voir si le programme
peut être amélioré pour détecter automatiquement votre système. Les sorties
de `hwclock --debug` et `cat /proc/cpuinfo` peuvent se révéler
intéressantes.)
--jensen signifie que vous utilisez le modèle Jensen.
--funky-toy signifie que sur votre machine, on doit utiliser le bit UF au
lieu du bit UIP pour détecter les transitions de l'horloge machine. « Toy »
dans le nom de l'option fait référence à la structure temps de l'année
(« Time Of Year ») de votre machine.
- --test
-
Fait tout ce qui est supposé faire à l'exception de mettre l'horloge machine
réellement à jour. C'est utile lorsqu'on l'utilise avec l'option --debug
pour connaître le fonctionnement de hwclock.
- --debug
-
Affiche beaucoup d'informations sur ce qu'hwclock est en train de
faire. Certaines de ses fonctions sont complexes et cette sortie peut vous
aider à comprendre ce que le programme fait.
NOTES
Horloges dans un système Linux
Il y a deux horloges principales dans un système Linux :
L'horloge machine : Il s'agit de l'horloge qui s'exécute d'une manière
indépendante des programmes et même lorsque la machine est éteinte.
Sur un système ISA, l'horloge est spécifiée dans le standard ISA. Le
programme de contrôle peut lire ou ajuster l'heure à la seconde, mais il
peut également détecter les tics de l'horloge, de ce fait, l'horloge a
virtuellement une précision infinie.
Cette horloge est communément appelée l'horloge machine (« hardware
clock »), l'heure temps réelle (« real time clock »), le RTC, l'horloge BIOS
ou l'horloge CMOS. La désignation Horloge Machine à été inventée pour être
utilisée avec hwclock afin d'éviter les confusions induites par les
autres noms.
L'horloge système : C'est l'horloge gérée par le noyau Linux et contrôlée
par un timer. (Sur une machine ISA, les interruptions du timer font parties
du standard ISA). Cela a uniquement un sens lorsque Linux fonctionne sur la
machine. L'heure système est le nombre de secondes écoulées depuis le 1er
janvier 1970 00:00:00 UTC (ou plus succinctement, le nombre de secondes
depuis 1969). L'heure système n'est pas un entier. Il a virtuellement une
précision infinie.
L'heure système est l'heure importante. Le but essentiel de l'horloge
machine dans un système Linux est de garder l'heure lorsque Linux ne
fonctionne pas. L'heure système est initialisée avec la valeur de l'horloge
machine au démarrage de Linux, l'horloge machine n'est ensuite plus
utilisée. Il est important de remarquer qu'avec DOS, pour lequel ISA a été
conçu, l'horloge machine est la seule horloge temps réel.
C'est important que l'Heure Système n'ait aucune discontinuités telles
qu'elles arriveraient si vous utilisez le programme date(1L) afin de la
modifier pendant le fonctionnement du système. Vous pouvez cependant, faire
tout ce que vous voulez sur l'Horloge Machine pendant le fonctionnement, la
prochaine fois que Linux démarrera, il prendra en compte la nouvelle heure
de l'Horloge Machine. Vous pouvez également utiliser le programme
adjtimex(8) pour ajuster doucement l'Heure Système pendant le
fonctionnement du système.
Un noyau Linux possède un concept de fuseau horaire pour le système. Mais ne
vous trompez pas -- pratiquement personne ne se préoccupe du fuseau horaire
maintenu par le noyau. Les programmes qui ont besoin d'utiliser les fuseaux
horaires (parce qu'ils souhaitent afficher l'heure locale) utilisent presque
toujours une méthode plus traditionnelle afin de le déterminer. Ils
utilisent la variable d'environnement TZ et/ou le répertoire
/usr/share/zoneinfo, comme expliqué dans la page de manuel de
tzset(3). Cependant, certains programmes et certaines parties du noyau
Linux comme les systèmes de fichier utilisent la valeur du noyau. Un exemple
est le système de fichier vfat. Si la valeur dans le noyau est fausse, le
système de fichiers vfat lira et modifiera d'une manière erronée la date des
fichiers.
hwclock ajuste le fuseau horaire du noyau à la valeur indiquée par TZ
et/ou /usr/share/zoneinfo quand vous modifiez l'heure système via
l'option --hctosys.
Le fuseau horaire est composé de deux parties : 1) un champ tz_minuteswest
indiquant le nombre de secondes (non ajusté pour DST) de retard par rapport
au temps UTC ; 2) un champ tz_dsttime indiquant le type de convention
« Daylight Savings Time » (DST) utilisée dans la localité à l'heure
actuelle. Ce second champ n'est jamais utilisé sous Linux. (Voir également
settimeofday(2).)
Comment hwclock accède à l'horloge machine
hwclock utilise de nombreuses manières pour lire et modifier l'Horloge
Machine. La manière la plus classique consiste en une opération
d'entrée/sortie sur le fichier spécial /dev/rtc, qui est supposé être
contrôlé par le pilote rtc. Cependant cette méthode n'est pas toujours
possible parce que le pilote rtc est relativement récent. Les vieux systèmes
ne l'ont pas. Ainsi, bien qu'il existe des versions du pilote rtc qui
fonctionne sur les DEC Alphas, il existe beaucoup de systèmes Alphas sur
lesquels le pilote rtc ne fonctionne pas (un symptôme courant est le blocage
d'hwclock).
Sur les vieux systèmes, la méthode d'accès à l'horloge machine dépends de la
machine.
Sur un système ISA, hwclock peut directement accéder aux registres de la
mémoire du CMOS qui constituent l'horloge, en effectuant des opérations
d'E/S sur les ports 0x70 et 0x71. Il effectue cela avec des véritables
instructions d'E/S, et doit donc être exécuté avec des droits de
superutilisateur. (Pour les Jensen Alpha, il n'y a aucun moyen pour
hwclock d'exécuter ces instructions, il utilise à la place le
périphérique /dev/port, qui procure une interface d'au moins aussi bas
niveau au sous-système d'E/S).
C'est vraiment une mauvaise méthode pour accéder à l'horloge, notamment
parce que les programmes de l'espace utilisateur ne sont généralement pas
supposés effectuer directement des opérations d'E/S et désactiver les
interruptions. hwclock fournit cette méthode uniquement parce que c'est
la seule méthode disponible sur les systèmes ISA et Alpha ne disposant pas
de pilotes pour le périphérique rtc.
Sur un système m68k, hwclock peut accéder à l'horloge soit via la
console, soit via le fichier spécial /dev/tty1.
hwclock essaye d'utiliser /dev/rtc. Si le noyau n'est pas compilé avec ce
support, ou qu'il est incapable d'ouvrir /dev/rtc, hwclock utilisera une
autre méthode disponible. Sur une machine ISA ou Alpha, vous pouvez forcer
hwclock à utiliser la manipulation direct des registres du CMOS, sans
même essayer d'utiliser /dev/rtc/, en spécifiant l'option --directisa.
La fonction d'ajustement
L'horloge machine n'est généralement pas très précise. Cependant, la plupart
de ces imprécisions sont prévisibles. Elle gagne ou perd la même durée de
temps chaque jour. Il s'agit de la dérive systématique. La fonction
d'ajustement de hwclock vous permet de faire des corrections
systématiques afin de corriger cette dérive.
Cela fonctionne comme ceci : hwclock garde un fichier, /etc/adjtime,
qui conserve des informations historiques. Il s'agit du fichier d'ajustement
(« adjtime »).
Supposons que vous démarrez sans fichier d'ajustement. Vous exécutez
hwclock --set afin de régler l'horloge machine à la bonne
heure. Hwclock crée le fichier d'ajustement et y sauvegarde l'heure
actuelle en tant que dernière calibration. Cinq jours plus tard, l'horloge a
gagné 10 secondes, vous réexécutez donc hwclock --set pour la
réajuster. Hwclock met à jour le fichier d'ajustement afin que l'heure
actuelle y soit connue comme dernière calibration, et enregistre une dérive
systématique de 2 secondes par jour. 24 heures passent, vous exécutez
hwclock --adjust. Hwclock consulte le fichier d'ajustement et remarque
que l'horloge gagne deux secondes par jour lorsque rien n'est fait et que
rien n'a été fait pendant un jour. Par conséquent, 2 secondes sont enlevées
de l'horloge machine. Il sauvegarde ensuite l'heure actuelle en tant que
dernière heure de calibration. 24 heures après, vous réexécutez hwclock
--adjust qui effectue exactement la même opération.
Chaque fois que vous calibrez (modifiez) l'horloge (en utilisant --set ou
--systohc), hwclock recalcule le taux de dérive systématique basé sur
la durée depuis la dernière calibration, la durée du dernier ajustement, les
différents taux utilisés dans les précédents ajustements, et la valeur
manquante à l'horloge actuellement.
Une petite erreur est introduite chaque fois que hwclock ajuste
l'horloge, donc il s'abstient de faire un ajustement de moins d'une
seconde. Plus tard, quand vous redemanderez un ajustement, la dérive
accumulée sera supérieure à une seconde et hwclock fera l'ajustement.
Il est bon d'exécuter hwclock --adjust avant d'utiliser hwclock
--hctosys au démarrage du système, et peut-être périodiquement lorsque le
système fonctionne via cron.
Le fichier adjtime, nommé ainsi pour des raisons historiques, contient en
fait d'autres informations utilisées par hwclock pour se souvenir
d'informations d'un appel à l'autre.
Le format du fichier d'ajustement est, en ASCII :
Ligne 1 : 3 nombres, séparés par des espaces : 1)Taux de dérive systématique
en secondes par jour, nombre décimal flottant ; 2) Nombre de secondes
écoulées depuis 1969 UTC et la date de la dernière calibration, entier
décimal ; 3) zéro (pour une compatibilité avec clock(8)) en tant
qu'entier décimal.
Ligne 2 : 1 nombre : Nombre de secondes depuis 1969 UTC de la dernière
calibration. Zéro s'il n'y a pas eu de calibration ou si une des dernières
calibrations est discutable (par exemple, si l'horloge machine, depuis cette
calibration, est erronée). C'est un entier décimal.
Ligne 3 : "UTC" ou "LOCAL". Indique si l'horloge machine est à l'heure
universelle ou à l'heure locale. Vous pouvez toujours surcharger cette
valeur par des options sur la ligne de commande de hwclock.
Vous pouvez utiliser un fichier d'ajustement (« adjtime ») précédemment
utilisé avec le programme clock(8) avec hwclock.
Synchronisation automatique de l'horloge machine par le noyau
Vous devez être au courant d'un autre moyen utilisé pour garder l'horloge
machine synchronisée sur certains systèmes. Le noyau Linux possède un mode
qui copie l'heure système vers l'horloge machine toutes les 11
minutes. C'est une bonne idée de l'utiliser lorsque vous utilisez un moyen
sophistiqué comme ntp pour garder votre heure système à jour. (ntp est un
moyen de synchroniser l'heure système avec soit un serveur de temps situé
quelque part sur le réseau, soit une horloge radio en duplex avec votre
système. Voir RFC 1305).
Ce mode (on l'appellera le « mode 11 minutes ») est inactif jusqu'à ce que
quelque chose l'active. Le démon ntp xntpd est une chose qui l'active. Vous
pouvez le désactiver en exécutant n'importe quoi, hwclock --hctosys
inclus, qui ajuste l'heure système d'une manière classique.
Pour voir son état, actif ou inactif, il faut utiliser la commande
adjtimex --print et chercher la valeur de « status ». Si le bit « 64 » de
ce nombre (exprimé en binaire) est 0, le mode 11 minutes est actif. Dans le
cas contraire, il est inactif.
Si sur votre système le mode 11 minutes est actif, n'utilisez pas hwclock
--adjust ou hwclock --hctosys. Vous ne créeriez qu'une confusion. Il est
convenable d'utiliser hwclock --hctosys au démarrage afin d'avoir une
heure système raisonnable, jusqu'au moment où votre système est capable de
l'ajuster d'une source extérieure et de démarrer le mode 11 minutes.
Valeur du siècle de l'horloge machine ISA
Il y a une sorte de standard qui définit l'octet 50 de la mémoire du CMOS
sur une machine ISA comme un indicateur du siècle. Hwclock ne l'utilise
ni le modifie car certaines machines ne définissent pas l'octet de cette
manière, et ce n'est vraiment pas nécessaire puisque l'année du siècle
constitue un bon moyen de connaître le siècle.
Si vous pensez à un usage possible de l'octet du siècle CMOS (« CMOS century
byte »), contactez le responsable de hwclock, une option peut être
adéquate.
Notez que cette section est pertinente uniquement si vous utilisez un accès
ISA direct à l'horloge machine.
VARIABLES D'ENVIRONNEMENT
TZ
FICHIERS
/etc/adjtime /usr/share/zoneinfo/ /dev/rtc /dev/port
/dev/tty1 /proc/cpuinfo
VOIR AUSSI
adjtimex(8), date(1), gettimeofday(2), settimeofday(2),
crontab(1), tzset(3) /etc/init.d/hwclock.sh,
/usr/share/doc/util-linux/README.Debian.hwclock
AUTEURS
Écrit par Bryan Henderson, septembre 1996 (bryanh@giraffe-data.com), basé
sur le travail effectué sur le programme clock par Charles Hedrick, Rob
Hooft et Harald Koening. Veuillez vous référer au code source pour une
histoire complète et les crédits.
TRADUCTION
Cette page de manuel a été traduite et est maintenue par
Sylvain Archenault <sylvain DOT archenault AT laposte DOT net>
et les membres de la liste
<debian-l10n-french AT lists DOT debian DOT org>.
Veuillez signaler toute erreur de traduction par un rapport de bogue sur
le paquet manpages-fr-extra.
|