NOM
hwclock - Interrogation et ajustement de l’horloge machine (RTC)
SYNOPSIS
hwclock [fonctions] [options]
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)
FONCTIONS
Vous avez besoin exactement d’une des options suivantes pour indiquer à
hwclock ce que vous souhaitez faire :
-r, --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
-s, --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.
-w, --systohc
Met l’horloge machine à l’heure système.
--systz
Restaurer l’heure système au fuseau horaire actuel
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 un option alternative à --hctosys qui ne lit pas l’heure
matériel et qui peut être utilisée dans les scripts
d’initialisation avec des noyaux 2.6 récents ou l’on sait que
l’heure système contient l’heure matériel.
--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.
-v, --version
Affiche la version d’hwclock sur la sortie standard.
--date=chane 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=anne
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
OPTIONS
Les options suivantes s’appliquent à la plupart des options.
-u, --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 (p. ex. 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. Si le fichier
d’ajustement n’existe pas, le temps local est choisi.
--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.
--adjfile=fichier
Surcharge le fichier par défaut /etc/adjtime.
-f, --rtc=fichier
Remplace le nom de fichier par défaut de /dev, qui est /dev/rtc
sur la plupart des plates-formes mais peut aussi être /dev/rtc0,
/dev/rtc1, etc.
--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 matériel 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.
Ainsi par exemple, certains système non ISA ont un certain nombre
d’horloges temps-réel, mais une seule avec sa propre source de
puissance. Un composant externe, sur I2C ou SPI, consommant très peu
avec une batterie de secours peut être utilisé comme horloge matérielle
qui initialise une horloge temps réel intégrée plus fonctionnelle,
utilisée pour la plupart des autres objectifs.
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 différentes méthodes 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). De plus, les systèmes Linux récents
ont une gestion plus générique des RTC, même des systèmes qui en ont
plus d’un, vous pourrez donc être amenés à remplacer la valeur par
défaut en précisant /dev/rtc0 ou /dev/rtc1 à la place.
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 (ou un autre
fichier spécial fourni sur la ligne de commande), hwclock utilisera une
autre méthode disponible si possible. 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 utilise 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.
Every time you calibrate (set) the clock (using --set or --systohc),
hwclock recalculates the systematic drift rate based on how long it has
been since the last calibration, how long it has been since the last
adjustment, what drift rate was assumed in any intervening adjustments,
and the amount by which the clock is presently off.
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 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. L’ACPI fournit un moyen standard
d’accéder au siècle, quand le matériel le gère.
VARIABLES D’ENVIRONNEMENT
TZ
FICHIERS
/etc/adjtime /usr/share/zoneinfo/ /dev/rtc /dev/rtc0 /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.
DISPONIBILITÉ
La commande hwclock fait partie du paquet util-linux-ng, elle est
disponible sur ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.
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.
6 août 2008