Provided by:
manpages-fr-extra_20111118_all 
NOM
hwclock - Interrogation et ajustement de l'horloge machine (RTC)
SYNOPSIS
hwclock [fonctions] [options]
DESCRIPTION
hwclock permet d'acceder a l'horloge machine. Vous pouvez afficher
l'heure machine actuelle, modifier l'heure de l'horloge machine, mettre
l'horloge machine a l'heure systeme et mettre l'heure systeme a l'heure
de l'horloge machine.
Vous pouvez egalement executer hwclock periodiquement afin d'ajouter ou
de retirer du temps a l'horloge machine pour compenser la derive
systematique (l'horloge perd ou gagne systematiquement du temps a une
certaine vitesse)
FONCTIONS
Vous avez besoin exactement d'une des options suivantes pour indiquer a
hwclock ce que vous souhaitez faire.
-r, --show
Lire l'heure machine et l'afficher sur la sortie standard.
L'heure affichee est toujours en heure locale, meme si votre
horloge machine est en temps universel. Consultez l'option
--utc.
--set Mettre l'horloge machine a l'heure donnee par l'option --date.
-s, --hctosys
Mettre l'heure systeme a l'heure de l'horloge machine.
Ajuster egalement le fuseau horaire du noyau au fuseau horaire
local comme indique dans la variable d'environnement TZ ou
/usr/share/zoneinfo, de la meme maniere que tzset(3)
l'interpreterait. Le champ obsolete tz_dsttime du noyau est mis
a DST_NONE (pour plus de precisions sur ce que ce champs
signifiait, consultez settimeofday(2)).
C'est une option particulierement utile dans un des scripts de
demarrage.
-w, --systohc
Mettre l'horloge machine a l'heure systeme.
--systz
Restaurer l'heure systeme au fuseau horaire actuel.
Ajuster egalement le fuseau horaire du noyau au fuseau horaire
local comme indique dans la variable d'environnement TZ ou
/usr/share/zoneinfo, de la meme maniere que tzset(3)
l'interpreterait. Le champ obsolete tz_dsttime du noyau est mis
a DST_NONE (pour plus de precisions sur ce que ce champs
signifiait, consultez settimeofday(2)).
C'est une option alternative a --hctosys qui ne lit pas
l'horloge machine et qui peut etre utilisee dans les scripts
d'initialisation avec des noyaux 2.6 recents si l'heure systeme
contient l'heure machine.
--adjust
Ajouter ou retirer du temps a l'horloge machine pour tenir
compte de la derive systematique depuis la derniere fois ou
l'horloge a ete ajustee. Consultez la discussion ci-dessous.
--getepoch
Afficher la valeur de l'epoque de l'horloge machine sur la
sortie standard. C'est le nombre d'annees qui correspond a la
valeur zero du champ annee de l'horloge machine. Par exemple, si
vous utilisez la convention du champ annee de l'horloge machine
qui contient le nombre d'annees depuis 1952, la valeur de
l'epoque de l'horloge machine pour le noyau doit etre 1952.
La valeur de l'epoque est utilisee a chaque fois qu'hwclock lit
ou ajuste l'horloge machine.
--setepoch
Ajuster la valeur de l'epoque de l'horloge machine pour le noyau
a la valeur indiquee par l'option --epoch. Consultez l'option
--getepoch pour plus de precisions.
-v, --version
Afficher la version d'hwclock sur la sortie standard.
--date=cha^ine_date
Cette option est necessaire uniquement avec l'option --set.
Sinon, elle est ignoree. Elle indique l'heure a laquelle
l'horloge machine sera initialisee. 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, meme si l'horloge machine est en
temps universel. Consultez l'option --utc.
--epoch=ann'ee
Indique l'ann'ee qui sera le debut de l'epoque de l'horloge
machine. C'est-a-dire, le nombre d'annees qui correspond a la
valeur zero du champ annee de l'horloge machine. C'est utilise
avec l'option --setepoch pour permettre au noyau de connaitre
l'epoque de l'horloge machine, ou sinon pour indiquer l'epoque a
utiliser lors des acces ISA directs.
Par exemple, sur une machine Digital UNIX :
hwclock --setepoch --epoch=1952
--predict
Predire ce que l'horloge machine lira a l'heure donnee par
l'option --date d'apres le fichier d'ajustement. C'est pratique
par exemple pour configurer une heure de reveil horloge machine
dans le futur, en prenant en compte la derive d'horloge machine.
OPTIONS
Les options suivantes s'appliquent a la plupart des fonctions.
-u, --utc
--localtime
Indiquer que l'horloge machine est a l'heure universelle, ou
respectivement a l'heure locale. C'est votre choix d'avoir
l'horloge machine a 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 a hwclock.
Si vous indiquez la mauvaise option parmi celles qui suivent (ou
si vous n'en indiquez pas et que la valeur par defaut est
fausse), la modification et l'interrogation de l'horloge machine
ne fonctionneront pas correctement.
Si vous n'indiquez ni --utc ni --localtime, la valeur par defaut
est la valeur utilisee la derniere fois qu'hwclock a mis
l'horloge a l'heure (par exemple l'execution d'hwclock avec
l'option --set, --systohc, ou --adjust qui s'est terminee avec
succes), comme sauvegardee 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'ecrira
pas dans ce fichier. L'option --utc ou --localtime doit
obligatoirement etre indiquee avec cette option.
--adjfile=fichier
Remplacer le fichier par defaut /etc/adjtime.
-f, --rtc=fichier
Remplacer le nom de fichier par defaut de /dev, qui est /dev/rtc
sur la plupart des plates-formes mais peut aussi etre /dev/rtc0,
/dev/rtc1, etc.
--directisa
Cette option n'est utile que sur une machine ISA ou Alpha (qui
implemente suffisamment la norme ISA pour etre une machine ISA
d'un point de vue d'hwclock). Pour les autres machines, cela n'a
pas d'impact. Cette option indique a hwclock d'utiliser des
instructions E/S explicites pour acceder a 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 maniere des
instructions E/S explicites.
Le pilote rtc a ete introduit dans la version 2 de Linux.
--badyear
Indiquer que l'horloge machine est incapable de stocker les
annees qui ne sont pas comprises entre 1994 et 1999. C'est un
probleme lie a certains BIOS (quasiment tous les << Award
BIOS >> fabriques entre le 26/04/94 et le 31/05/95) qui sont
incapables de gerer les annees superieures a 1999. Si on essaie
d'affecter une annee inferieure a 94 (ou 95 dans certains cas),
la valeur reellement affectee est 94 (ou 95). Donc, si vous
possedez une de ces machines, hwclock ne peut pas affecter une
annee superieure a 1999 et ne peut donc pas utiliser la valeur
de l'horloge comme une valeur normale.
Afin de compenser cela (sans mettre a jour votre BIOS, ce qui
est pourtant preferable), vous devez toujours utiliser --badyear
si vous possedez une de ces machines. Quand hwclock sait que
l'horloge est endommagee, il ignore la valeur de l'annee de
l'horloge machine, et essaie de deviner l'annee grace a la date
de derniere calibration sauvegardee dans le fichier
d'ajustement, en supposant que cette date est une date de
l'annee precedente. Pour que cela fonctionne, vous feriez mieux
d'executer hwclock --set ou hwclock --systohc au moins une fois
par an !
Bien qu'hwclock ignore l'annee lorsqu'il lit l'horloge machine,
il modifie l'annee lorsqu'il met l'horloge a l'heure. Il met
alors l'annee a 1995, 1996, 1997, ou 1998, celle qui a la meme
position dans le cycle des annees bissextile que la veritable
annee. De cette facon, l'horloge machine insere les jours des
annees bissextiles ou il faut. A nouveau, si vous n'ajustez pas
l'horloge machine pendant plus d'une annee, cela ne fonctionnera
pas et un jour risque d'etre perdu.
hwclock vous avertit que vous avez probablement besoin de
--badyear quand l'annee de l'horloge machine est 1994 ou 1995.
--srm Cette option est equivalente a --epoch=1900 et est utilisee pour
indiquer l'epoque standard sur les machines Alphas avec une
console SRM.
--arc Cette option est equivalente a --epoch=1980 et est utilisee pour
indiquer l'epoque standard sur les machines Alphas disposant
d'une console ARC (l'epoque 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
generalement inutiles c'en est une une puisque hwclock devrait
etre capable de le determiner tout seul, du moins lorsque /proc
est monte. (Si vous vous rendez compte qu'une de ces options est
necessaire afin de faire fonctionner hwclock, veuillez contacter
le responsable afin de voir si le programme peut etre ameliore
pour detecter automatiquement votre systeme. Les sorties de
hwclock --debug et cat /proc/cpuinfo peuvent etre utiles.)
--jensen est a utiliser avec le modele Jensen.
--funky-toy signifie que le bit UF doit etre utilise a la place
du bit UIP pour detecter les transitions de l'horloge machine.
<< Toy >> dans le nom de l'option fait reference a la structure
temps de l'annee (<< Time Of Year >>) de la machine.
--test Faire tout sauf mettre reellement l'horloge materiel a jour.
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`eme Linux
Il y a deux horloges principales dans un systeme Linux.
L'horloge machine : il s'agit de l'horloge qui s'execute independamment
des programmes et meme lorsque la machine est eteinte.
Sur un systeme ISA, l'horloge est definie dans la norme ISA. Le
programme de controle peut lire ou ajuster l'heure a la seconde, mais
il peut egalement detecter les tics de l'horloge, de ce fait, l'horloge
a virtuellement une precision infinie.
Cette horloge est communement appelee l'horloge machine (<< hardware
clock >>), l'heure temps reel (<< real time clock >>), le RTC,
l'horloge BIOS ou l'horloge CMOS. La designation horloge machine a ete
inventee pour etre utilisee avec hwclock afin d'eviter les confusions
induites par les autres noms.
Ainsi par exemple, certains systemes non ISA ont quelques horloges
temps reel, mais une seule avec sa propre source d'energie. Un
composant externe, sur I2C ou SPI, consommant tres peu avec une
batterie de secours peut etre utilise comme horloge materielle qui
initialise une horloge temps reel integree plus fonctionnelle, utilisee
pour la plupart des autres objectifs.
L'horloge syst`eme : c'est l'horloge geree par le noyau Linux et
controlee 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 systeme est le nombre de secondes
ecoulees depuis le 1er janvier 1970 00:00:00 UTC (ou plus
succinctement, le nombre de secondes depuis 1969). L'heure systeme
n'est pas un entier. Elle a virtuellement une precision infinie.
L'horloge systeme donne l'heure importante. Le but essentiel de
l'horloge machine dans un systeme Linux est de garder l'heure lorsque
Linux ne fonctionne pas. L'heure systeme est initialisee avec la valeur
de l'horloge machine au demarrage de Linux, l'horloge machine n'est
ensuite plus utilisee. Il est important de remarquer qu'avec DOS, pour
lequel ISA a ete concu, l'horloge machine est la seule horloge temps
reel.
L'heure systeme ne doit surtout pas subir de discontinuite comme si
vous utilisiez le programme date(1L) afin de la modifier pendant le
fonctionnement du systeme. Vous pouvez cependant, faire tout ce que
vous voulez sur l'horloge machine pendant le fonctionnement, la
prochaine fois que Linux demarrera, il prendra en compte la nouvelle
heure de l'horloge machine. Vous pouvez egalement utiliser le programme
adjtimex(8) pour ajuster doucement l'heure systeme pendant le
fonctionnement du systeme.
Un noyau Linux possede un concept de fuseau horaire pour le systeme.
Mais ne vous trompez pas -- pratiquement personne ne se preoccupe 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 methode plus
traditionnelle afin de le determiner. Ils utilisent la variable
d'environnement TZ ou le repertoire /usr/share/zoneinfo, comme explique
dans la page de manuel de tzset(3). Cependant, certains programmes et
certaines parties du noyau Linux comme les systemes de fichier
utilisent la valeur du noyau. Un exemple est le systeme de fichier
vfat. Si la valeur dans le noyau est fausse, le systeme de fichiers
vfat lira et modifiera d'une maniere erronee la date des fichiers.
hwclock ajuste le fuseau horaire du noyau a la valeur indiquee par TZ
ou /usr/share/zoneinfo quand vous modifiez l'heure systeme a l'aide de
l'option --hctosys.
Le fuseau horaire est compose de deux parties : 1) un champ
tz_minuteswest indiquant le nombre de secondes (non ajuste pour l'heure
d'ete) de retard par rapport au temps universel (UTC) ; 2) un champ
tz_dsttime indiquant le type de convention d'heure d'ete utilisee dans
la localite a l'heure actuelle. Ce second champ n'est jamais utilise
sous Linux (consultez egalement settimeofday(2)).
Comment hwclock acc`ede `a l'horloge machine
hwclock utilise differentes methodes pour lire et modifier l'horloge
machine. La maniere la plus classique consiste en une operation
d'entree/sortie sur le fichier special /dev/rtc, qui est cense etre
controle par le pilote rtc. Cependant cette methode n'est pas toujours
possible parce que le pilote rtc est relativement recent. Les vieux
systemes ne l'ont pas. Ainsi, bien qu'il existe des versions du pilote
rtc qui fonctionne sur les DEC Alphas, il existe beaucoup de systemes
Alphas sur lesquels le pilote rtc ne fonctionne pas (un symptome
courant est le blocage d'hwclock). De plus, les systemes Linux recents
ont une gestion plus generique des horloges machines, meme des systemes
qui en ont plus d'une, vous pourrez donc etre amenes a remplacer la
valeur par defaut en precisant /dev/rtc0 ou /dev/rtc1 a la place.
Sur les vieux systemes, la methode d'acces a l'horloge machine depend
de la machine.
Sur un systeme ISA, hwclock peut directement acceder aux registres de
la memoire du CMOS qui constituent l'horloge, en effectuant des
operations d'E/S sur les ports 0x70 et 0x71. Il effectue cela avec des
veritables instructions d'E/S, et doit donc etre execute avec des
droits de superutilisateur. (Pour les Jensen Alpha, il n'y a aucun
moyen pour hwclock d'executer ces instructions, il utilise a la place
le peripherique /dev/port, qui procure une interface d'au moins aussi
bas niveau au sous-systeme d'E/S).
C'est vraiment une mauvaise methode pour acceder a l'horloge, notamment
parce que les programmes de l'espace utilisateur ne sont generalement
pas supposes effectuer directement des operations d'E/S et desactiver
les interruptions. hwclock fournit cette methode uniquement parce que
c'est la seule methode disponible sur les systemes ISA et Alpha ne
disposant pas de pilotes pour le peripherique rtc.
Sur un systeme m68k, hwclock peut acceder a l'horloge soit via la
console, soit via le fichier special /dev/tty1.
hwclock essaye d'utiliser /dev/rtc. Si le noyau n'est pas compile avec
cette prise en charge, ou qu'il est incapable d'ouvrir /dev/rtc (ou un
autre fichier special fourni sur la ligne de commande), hwclock
utilisera une autre methode disponible si possible. Sur une machine ISA
ou Alpha, vous pouvez forcer hwclock a utiliser la manipulation direct
des registres du CMOS, sans meme essayer d'utiliser /dev/rtc/, en
indiquant l'option --directisa.
La fonction d'ajustement
L'horloge machine n'est generalement pas tres precise. Cependant, la
plupart de ces imprecisions sont previsibles. Elle gagne ou perd la
meme duree de temps chaque jour. Il s'agit de la derive systematique.
La fonction d'ajustement de hwclock vous permet de faire des
corrections systematiques afin de corriger cette derive.
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 demarrez sans fichier d'ajustement. Vous executez
hwclock --set afin de regler l'horloge machine a la bonne heure.
hwclock cree le fichier d'ajustement et y sauvegarde l'heure actuelle
en tant que derniere calibration. Cinq jours plus tard, l'horloge a
gagne 10 secondes, vous reexecutez donc hwclock --set pour la
reajuster. hwclock met a jour le fichier d'ajustement afin que l'heure
actuelle y soit connue comme derniere calibration, et enregistre une
derive systematique de 2 secondes par jour. 24 heures passent, vous
executez 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 ete fait pendant un jour. Par consequent,
2 secondes sont enlevees de l'horloge machine. Il sauvegarde ensuite
l'heure actuelle en tant que derniere heure de calibration. 24 heures
apres, vous reexecutez hwclock --adjust qui effectue exactement la meme
operation.
Chaque fois que vous calibrez (modifiez) l'horloge (avec --set ou
--systohc), hwclock recalcule le taux de derive systematique base sur
la duree ecoulee depuis la derniere calibration, la duree ecoulee
depuis le dernier ajustement, les differents taux utilises dans les
precedents ajustements, et la valeur manquante a 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 derive
accumulee sera superieure a une seconde et hwclock fera l'ajustement.
Il est bon d'executer hwclock --adjust avant d'utiliser hwclock
--hctosys au demarrage du systeme, et peut-etre periodiquement lorsque
le systeme fonctionne via cron.
Le fichier adjtime, nomme ainsi pour des raisons historiques, contient
en fait d'autres informations utilisees par hwclock pour se souvenir
d'informations d'un appel a l'autre.
Le format du fichier d'ajustement est, en ASCII :
Ligne 1 : 3 nombres, separes par des espaces : 1) taux de derive
systematique en secondes par jour, nombre decimal flottant ; 2) nombre
de secondes ecoulees depuis 1969 UTC et la date de la derniere
calibration, entier decimal ; 3) zero (pour une compatibilite avec
clock(8)) en tant qu'entier decimal.
Ligne 2 : 1 nombre : Nombre de secondes depuis 1969 UTC de la derniere
calibration. Zero s'il n'y a pas eu de calibration ou si une des
dernieres calibrations est discutable (par exemple, si l'horloge
machine, depuis cette calibration, est erronee). C'est un entier
decimal.
Ligne 3 : << UTC >> ou << LOCAL >>. Indique si l'horloge machine est a
l'heure universelle ou a 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 precedemment utilise avec
le programme clock(8) avec hwclock.
Synchronisation automatique de l'horloge machine par le noyau
Vous devez etre au courant d'un autre moyen utilise pour garder
l'horloge machine synchronisee sur certains systemes. Le noyau Linux
possede un mode qui copie l'heure systeme vers l'horloge machine toutes
les 11 minutes. C'est une bonne idee de l'utiliser lorsque vous
utilisez un moyen sophistique comme ntp pour garder votre heure systeme
a jour. (ntp est un moyen de synchroniser l'heure systeme avec soit un
serveur de temps situe quelque part sur le reseau, soit une horloge
radio en duplex avec votre systeme. Consultez la RFC 1305).
Ce mode (on l'appellera le << mode 11 minutes >>) est inactif jusqu'a
ce que quelque chose l'active. Le demon ntp xntpd est une chose qui
l'active. Vous pouvez le desactiver en executant n'importe quoi,
hwclock --hctosys inclus, qui ajuste l'heure systeme d'une maniere
classique.
Pour voir son etat, actif ou inactif, il faut utiliser la commande
adjtimex --print et chercher la valeur de << status >>. Si le bit
<< 64 >> de ce nombre (exprime en binaire) est 0, le mode 11 minutes
est actif. Dans le cas contraire, il est inactif.
Si sur votre systeme le mode 11 minutes est actif, n'utilisez pas
hwclock --adjust ou hwclock --hctosys. Vous ne creeriez qu'une
confusion. Il est convenable d'utiliser hwclock --hctosys au demarrage
afin d'avoir une heure systeme raisonnable, jusqu'au moment ou votre
systeme est capable de l'ajuster d'une source exterieure et de demarrer
le mode 11 minutes.
Valeur du si`ecle de l'horloge machine ISA
Il y a une sorte de norme qui definit l'octet 50 de la memoire du CMOS
sur une machine ISA comme un indicateur du siecle. hwclock ne l'utilise
ni le modifie car certaines machines ne definissent pas l'octet de
cette maniere, et ce n'est vraiment pas necessaire puisque l'annee du
siecle constitue un bon moyen de connaitre le siecle.
Si vous pensez a un usage possible de l'octet du siecle CMOS (<< CMOS
century byte >>), contactez le responsable de hwclock, une option peut
etre adequate.
Notez que cette section est pertinente uniquement si vous utilisez un
acces ISA direct a l'horloge machine. L'ACPI fournit un moyen standard
d'acceder au siecle, quand le materiel le gere.
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
Ecrit par Bryan Henderson, septembre 1996 <bryanh@giraffe-data.com>,
base sur le travail effectue sur le programme clock par Charles
Hedrick, Rob Hooft et Harald Koenig. Veuillez vous referer au code
source pour une histoire complete et les credits.
DISPONIBILIT'E
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 ete 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 aout 2008 HWCLOCK(8)