Provided by: manpages-fr-extra_20140201_all 

NOM
hwclock - Interroger ou ajuster l'horloge matérielle (RTC)
SYNOPSIS
hwclock [fonction] [option ... ]
DESCRIPTION
hwclock permet d'accéder à l'horloge matérielle. Vous pouvez afficher l'heure matérielle actuelle,
modifier l'heure de l'horloge matérielle, mettre l'horloge matérielle à l'heure système ou mettre l'heure
système à l'heure de l'horloge matérielle.
Vous pouvez également exécuter hwclock périodiquement afin d'ajouter ou d'enlever du temps à l'horloge
matérielle pour compenser la dérive systématique (l'horloge perd ou gagne constamment du temps à une
certaine vitesse en fonctionnement ininterrompu).
FONCTIONS
Vous avez besoin exactement d'une des options suivantes pour indiquer à hwclock ce que vous souhaitez
faire.
-r, --show
Lire l'heure matérielle et l'afficher sur la sortie standard. L'heure affichée est toujours en
heure locale, même si l'horloge matérielle est en temps universel. Consultez l'option --utc.
Montrer l'horloge matérielle est l'action par défaut si aucune fonction n'est indiquée.
--set Mettre l'horloge matérielle à l'heure donnée par l'option --date.
-s, --hctosys
Mettre l'heure système à l'heure de l'horloge matérielle.
Ajuster également le fuseau horaire du noyau au fuseau horaire local comme indiqué dans la
variable d'environnement TZ 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
précisions sur ce que ce champ signifiait, consultez settimeofday(2)).
C'est une option particulièrement utile dans un des scripts de démarrage.
-w, --systohc
Mettre l'horloge matérielle à l'heure système.
--systz
Restaurer l'heure système au fuseau horaire actuel.
Ajuster également le fuseau horaire du noyau au fuseau horaire local comme indiqué dans la
variable d'environnement TZ 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
précisions sur ce que ce champ signifiait, consultez settimeofday(2)).
C'est une option alternative à --hctosys qui ne lit pas l'horloge matérielle et qui peut être
utilisée dans les scripts d'initialisation avec des noyaux 2.6 récents où l'heure système contient
l'heure matérielle.
--adjust
Ajouter ou retirer du temps à l'horloge matérielle pour tenir compte de la dérive systématique
depuis la dernière fois où l'horloge à été ajustée. Consultez la discussion ci-dessous.
--getepoch
Afficher la valeur de l'époque de l'horloge matérielle sur la sortie standard. C'est l'année
grégorienne qui correspond à la valeur zéro du champ année de l'horloge matérielle. Par exemple,
si vous utilisez la convention du champ année de l'horloge matérielle qui contient le nombre
d'années depuis 1952, la valeur de l'époque de l'horloge matérielle pour le noyau doit être 1952.
La valeur de l'époque est utilisée à chaque fois qu'hwclock lit ou ajuste l'horloge matérielle.
--setepoch
Ajuster la valeur de l'époque de l'horloge matérielle pour le noyau à la valeur indiquée par
l'option --epoch. Consultez l'option --getepoch pour plus de précisions.
--predict
Prédire ce que l'horloge matérielle lira à l'heure donnée par l'option --date d'après le fichier
d'ajustement. C'est pratique par exemple pour configurer une heure de réveil horloge matérielle
dans le futur, en prenant en compte la dérive d'horloge matérielle.
-h, --help
Afficher un texte d'aide puis quitter.
-V, --version
Afficher la version d'hwclock et quitter.
OPTIONS
Les deux premières options ne s'appliquent qu'à quelques fonctions particulières, les autres s'appliquent
à la plupart des fonctions.
--date=chaîne_date
Cette option n'est nécessaire qu'avec les fonctions --set ou --predict, sinon, elle est ignorée.
Elle indique l'heure à laquelle l'horloge matérielle sera initialisée, ou l'heure à laquelle
prédire l'horloge matérielle. La valeur de cette option est un argument du programme date(1). Par
exemple,
hwclock --set --date="2011-08-14 16:45:05"
L'argument doit être en heure locale, même si l'horloge matérielle est à l'heure universelle.
Consultez l'option --utc.
--epoch=année
Indique l'année qui sera le début de l'époque de l'horloge matérielle. C'est-à-dire, l'année
grégorienne qui correspond à la valeur zéro du champ année de l'horloge matérielle. C'est utilisé
avec l'option --setepoch pour permettre au noyau de connaître l'époque de l'horloge matérielle, ou
sinon pour indiquer l'époque à utiliser lors des accès ISA directs.
Par exemple, sur une machine Digital UNIX :
hwclock --setepoch --epoch=1952
-u, --utc
--localtime
Indiquer que l'horloge matérielle est à l'heure universelle, ou respectivement à l'heure locale.
C'est votre choix d'avoir l'horloge matérielle à 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 indiquez la mauvaise option parmi celles qui suivent (ou si vous n'en indiquez pas et que
la valeur par défaut est fausse), la modification et l'interrogation de l'horloge matérielle ne
fonctionneront pas correctement.
Si vous n'indiquez 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 (par exemple l'exécution d'hwclock avec
l'option --set, --systohc, ou --adjust qui s'est terminée avec succès), comme sauvegardée dans le
fichier d'ajustement. Si le fichier d'ajustement n'existe pas, l'heure UTC 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 indiquée avec cette option.
--adjfile=fichier
Remplacer le fichier par défaut /etc/adjtime.
-f, --rtc=fichier
Remplacer 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 n'est utile que sur une machine ISA ou Alpha (qui implémente suffisamment la norme
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 E/S explicites pour accéder à
l'horloge matérielle. 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 E/S explicites.
--badyear
Indiquer que l'horloge matérielle 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 le 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 matérielle, et essaie de deviner
l'année grâce à la date de dernier étalonnage sauvegardé 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 matérielle, 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 bissextiles que la véritable année. De cette façon, l'horloge
matérielle insère les jours des années bissextiles où il faut. À nouveau, si vous n'ajustez pas
l'horloge matérielle pendant plus d'une année, cela ne fonctionnera pas et un jour risque d'être
perdu.
hwclock vous avertit que vous avez probablement besoin de --badyear quand l'année de l'horloge
matérielle est 1994 ou 1995.
--srm Cette option est équivalente à --epoch=1900 et est utilisée pour indiquer l'époque standard sur
les machines Alphas avec une console SRM.
--arc Cette option est équivalente à --epoch=1980 et est utilisée pour indiquer 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 le type de machine Alpha. Elles ne sont pas valables ailleurs que sur
une machine Alpha et sont généralement inutiles, puisque hwclock devrait être capable de la
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 le système. Les sorties
de hwclock --debug et cat /proc/cpuinfo peuvent être utiles.)
L'option --jensen est à utiliser avec le modèle Jensen. --funky-toy signifie que le bit UF doit
être utilisé à la place du bit UIP pour détecter les transitions de l'horloge matérielle. « Toy »
dans le nom de l'option fait référence à la structure temps de l'année (« Time Of Year ») de la
machine.
--test Tout faire sauf mettre à jour effectivement l'horloge matérielle. C'est utile avec l'option
--debug pour comprendre le fonctionnement d'hwclock.
--debug
Afficher beaucoup d'informations sur les actions internes d'hwclock. Certaines de ses fonctions
sont complexes et cette sortie permet de 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 matérielle : il s'agit de l'horloge qui s'exécute indépendamment des programmes et même lorsque
la machine est éteinte.
Sur un système ISA, l'horloge est définie dans la norme ISA. Le programme de contrôle peut lire ou
ajuster l'heure à la seconde, mais il peut également détecter les flancs des tics de l'horloge, de ce
fait, l'horloge a virtuellement une précision infinie.
Cette horloge est communément appelée l'horloge matérielle (« hardware clock »), l'heure temps réel
(« real time clock »), le RTC, l'horloge BIOS ou l'horloge CMOS. La désignation horloge matérielle à été
inventée pour être utilisée avec hwclock afin d'éviter les confusions induites par les autres noms.
Ainsi par exemple, certains systèmes non ISA ont quelques horloges temps réel, mais une seule avec sa
propre source d'énergie. 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 une minuterie (sur une
machine ISA, les interruptions de minuterie font partie de la norme ISA). Cela n'a de sens que si 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. Elle a virtuellement une précision infinie.
L'horloge système donne l'heure importante. Le but essentiel de l'horloge matérielle 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 matérielle au démarrage de Linux, l'horloge matérielle n'est ensuite plus utilisée.
Il est important de remarquer qu'avec DOS, pour lequel ISA a été conçu, l'horloge matérielle est la seule
horloge temps réel.
L'heure système ne doit surtout pas subir de discontinuité comme si vous utilisiez 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 matérielle pendant le fonctionnement, la prochaine fois que Linux démarrera, il
prendra en compte la nouvelle heure de l'horloge matérielle. 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 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 ou /usr/share/zoneinfo quand vous
modifiez l'heure système à l'aide de l'option --hctosys.
Le fuseau horaire est composé de deux parties : 1) un champ tz_minuteswest indiquant le nombre de minutes
(non ajusté pour l'heure d'été) de retard par rapport au temps universel (UTC) ; 2) un champ tz_dsttime
indiquant le type de convention d'heure d'été utilisée dans la localité à l'heure actuelle. Ce second
champ n'est jamais utilisé sous Linux (consultez également settimeofday(2)).
Comment hwclock accède à l'horloge matérielle
hwclock utilise différentes méthodes pour lire et modifier l'horloge matérielle. La manière la plus
classique consiste en une opération d'entrées et sorties sur le fichier spécial /dev/rtc, qui est censé
ê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 horloges matérielles, même des systèmes qui en ont plus d'une,
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 matérielle dépend 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 cette prise en charge, 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 directe des registres du CMOS, sans même essayer d'utiliser /dev/rtc/,
en indiquant l'option --directisa.
La fonction d'ajustement
L'horloge matérielle 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 matérielle à la bonne heure. hwclock crée le fichier d'ajustement et y sauvegarde l'heure
actuelle en tant que dernier étalonnage. 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 dernier étalonnage, 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 matérielle. Il
sauvegarde ensuite l'heure actuelle en tant que dernière heure d'étalonnage. 24 heures après, vous
réexécutez hwclock --adjust qui effectue exactement la même opération.
Chaque fois que vous étalonnez (modifiez) l'horloge (avec --set ou --systohc), hwclock recalcule le taux
de dérive systématique basé sur la durée écoulée depuis le dernier étalonnage, la durée écoulée depuis le
dernier ajustement, les différents taux utilisés dans les précédents ajustements, et la valeur manquante
à l'horloge actuelle.
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 entre 1969 UTC et la date du dernier étalonnage,
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 écoulées entre 1969 UTC et le dernier étalonnage. Zéro s'il n'y a
pas eu d'étalonnage ou si un des derniers étalonnages est discutable (par exemple, si l'horloge
matérielle, depuis cet étalonnage, est erronée). C'est un entier décimal.
Ligne 3 : « UTC » ou « LOCAL ». Indique si l'horloge matérielle 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 matérielle par le noyau
Vous devez être au courant d'un autre moyen utilisé pour garder l'horloge matérielle synchronisée sur
certains systèmes. Le noyau Linux possède un mode qui copie l'heure système vers l'horloge matérielle
toutes les 11 minutes. C'est une bonne idée de l'utiliser lorsque vous utilisez un moyen sophistiqué
comme NTP pour garder l'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 le système.
Consultez la 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 le mode 11 minutes est actif sur le système, 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ù le 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 matérielle ISA
Il y a une sorte de norme 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
matérielle. 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 Koenig. 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, elle est disponible sur
<URL:ftp://ftp.kernel.org/pub/linux/utils/util-linux/>.
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.
util-linux août 2011 HWCLOCK(8)