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)).
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.