Man page - hwclock(8)

Packages contains this manual

Available languages:

en fr ja ro sr de

Manual

HWCLOCK

NOM
SYNOPSIS
DESCRIPTION
FONCTIONS
OPTIONS
NOTES
Horloges dans un systĂšme Linux
MĂ©thodes d’accĂšs Ă  l’horloge matĂ©rielle
La fonction d’ajustement
Le fichier d’ajustement
Synchronisation automatique de l’horloge matĂ©rielle par le noyau
Valeur du siĂšcle de l’horloge matĂ©rielle ISA
CONFIGURATION DE DATE ET HEURE
Garder l’heure sans synchronisation externe
LOCALE ou UTC
POSIX ou « RIGHT »
CODE DE RETOUR
ENVIRONNEMENT
FICHIERS
VOIR AUSSI
AUTEURS
SIGNALER DES BOGUES
DISPONIBILITÉ

NOM

hwclock - utilitaire d’horloges

SYNOPSIS

hwclock [ function ] [ option ...]

DESCRIPTION

hwclock is an administration tool for the time clocks. It can: display the Hardware Clock time; set the Hardware Clock to a specified time; set the Hardware Clock from the System Clock; set the System Clock from the Hardware Clock; compensate for Hardware Clock drift; correct the System Clock timescale; set the kernel’s timezone, NTP timescale, and epoch (Alpha only); and predict future Hardware Clock values based on its drift rate.

Depuis la version 2.26, des modifications importantes ont Ă©tĂ© faites Ă  la fonction --hctosys et Ă  l’option --directisa , et une nouvelle option --update-drift a Ă©tĂ© ajoutĂ©e. Consultez leurs descriptions respectives ci-dessous.

FONCTIONS

Les fonctions suivantes s’excluent mutuellement, une seule peut ĂȘtre indiquĂ©e Ă  la fois. Si aucune n’est indiquĂ©e, --show est utilisĂ©e par dĂ©faut.

-a, --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 a Ă©tĂ© ajustĂ©e. Consultez la discussion ci-dessous, sous La fonction d’ajustement .

--getepoch ; --setepoch

Ces fonctions sont uniquement pour les machines Alpha et ne sont disponibles qu’avec le pilote RTC du noyau Linux.

Lire et dĂ©finir la valeur d’Époque de l’horloge matĂ©rielle. 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 le BIOS de la machine dĂ©finit le dĂ©compte d’annĂ©es entiĂšres de l’horloge matĂ©rielle au nombre d’annĂ©es entiĂšres depuis 1952, la valeur d’Époque de l’horloge matĂ©rielle pour le noyau doit ĂȘtre 1952.

La fonction --setepoch nĂ©cessite l’utilisation de l’option --epoch pour prĂ©ciser l’annĂ©e. Par exemple :

hwclock --setepoch --epoch=1952

Le pilote de l’horloge temps rĂ©el (RTC) essaie de deviner la valeur correcte d’Époque, aussi la rĂ©gler peut ne pas ĂȘtre nĂ©cessaire.

La valeur de l’Époque est utilisĂ©e Ă  chaque fois que hwclock lit ou ajuste l’horloge matĂ©rielle sur une machine Alpha. Pour les machines ISA, le noyau utilise une valeur fixe de 1900 pour l’Époque.

--param-get= parameter ; --param-set= parameter = value

Read and set the RTC’s parameter. This is useful, for example, to retrieve the RTC’s feature or set the RTC’s Backup Switchover Mode.

parameter is either a numeric RTC parameter value (see the Kernel’s include/uapi/linux/rtc.h ) or an alias. See --help for a list of valid aliases. parameter and value , if prefixed with 0x, are interpreted as hexadecimal, otherwise decimal values.

--predict

PrĂ©dire ce que l’horloge matĂ©rielle lira dans le futur Ă  partir de l’heure donnĂ©e par l’option --date et des renseignements de /etc/adjtime . C’est utile, par exemple, pour prendre en compte la dĂ©rive lors de la dĂ©finition d’un rĂ©veil (alarme) par l’horloge matĂ©rielle. Consultez rtcwake (8).

N’utilisez pas cette fonction si l’horloge matĂ©rielle est modifiĂ©e par autre chose que la commande hwclock du systĂšme d’exploitation actuel, comme le « mode 11 minutes » ou par un autre systĂšme d’exploitation en multiboot.

-r , --show ; --get

Lire l’horloge matĂ©rielle matĂ©rielle et afficher l’heure sur la sortie standard au format ISO\ 8601 . L’heure affichĂ©e est toujours en heure locale, mĂȘme si l’horloge matĂ©rielle est en temps universel. Consultez l’option --localtime .

Montrer l’heure de l’horloge matĂ©rielle est l’action par dĂ©faut si aucune fonction n’est indiquĂ©e.

La fonction --get applique aussi la correction de dĂ©rive Ă  l’heure lue, Ă  partir des renseignements de /etc/adjtime . N’utilisez pas cette fonction si l’horloge matĂ©rielle est modifiĂ©e par autre chose que la commande hwclock du systĂšme d’exploitation actuel, comme le « mode 11 minutes » ou par un autre systĂšme d’exploitation en multiboot.

-s , --hctosys

Mettre l’heure systĂšme Ă  l’heure de l’horloge matĂ©rielle. L’heure lue de l’horloge matĂ©rielle est compensĂ©e pour prendre en compte la dĂ©rive systĂ©matique avant de l’utiliser pour dĂ©finir l’heure systĂšme. Consultez la discussion ci-dessous, sous La fonction d’ajustement .

L’horloge systĂšme doit ĂȘtre gardĂ©e en UTC pour que les applications de date et d’heure fonctionnent correctement avec le fuseau horaire configurĂ© sur le systĂšme. Si l’horloge matĂ©rielle est conservĂ©e en heure locale, alors l’heure qui y est lue doit ĂȘtre convertie en UTC avant de l’utiliser pour dĂ©finir l’horloge systĂšme. La fonction --hctosys le fait Ă  partir des renseignements du fichier /etc/adjtime ou des arguments --localtime et --utc en ligne de commande. Remarque : aucun ajustement d’heure d’étĂ© n’est rĂ©alisĂ©. Consultez la discussion ci-dessous sous LOCALE ou UTC .

The kernel also keeps a timezone value, the --hctosys function sets it to the timezone configured for the system. The system timezone is configured by the TZ environment variable or the /etc/localtime file, as tzset (3) would interpret them. The obsolete tz_dsttime field of the kernel’s timezone value is set to zero. (For details on what this field used to mean, see settimeofday (2).)

Lors d’une utilisation dans un script de dĂ©marrage, si la fonction --hctosys est la premiĂšre Ă  appeler settimeofday (2) depuis le dĂ©marrage, cela dĂ©finira le « mode 11 minutes » de NTP par l’intermĂ©diaire de la variable persistent_clock_is_local du noyau. Si la configuration du fuseau horaire de l’horloge matĂ©rielle est modifiĂ©e, alors un redĂ©marrage est nĂ©cessaire pour informer le noyau. Consultez la discussion ci-dessous, sous Synchronisation automatique de l’horloge matĂ©rielle par le noyau .

C’est une fonction particuliĂšrement utile dans un des scripts de dĂ©marrage avant que les systĂšmes de fichiers ne soient montĂ©s en lecture et Ă©criture.

Cette fonction ne devrait jamais ĂȘtre utilisĂ©e sur un systĂšme en fonctionnement. Les sauts d’horloge systĂšme provoqueront des problĂšmes comme par exemple des horodatages corrompus sur le systĂšme de fichiers. Ainsi, si quelque chose a modifiĂ© l’horloge matĂ©rielle, comme le « mode 11 minutes » de NTP, --hctosys dĂ©finira l’heure de façon incorrecte en incluant la compensation de dĂ©rive.

La compensation de dĂ©rive peut ĂȘtre inhibĂ©e en dĂ©finissant le facteur de dĂ©rive Ă  zĂ©ro dans /etc/adjtime . Ce rĂ©glage sera persistant tant que l’option --update-drift n’est pas utilisĂ©e avec --systohc Ă  l’arrĂȘt (ou n’importe quand). Une autre façon d’inhiber cela est d’utiliser l’option --noadjfile en appelant la fonction --hctosys . Une troisiĂšme mĂ©thode est d’effacer le fichier /etc/adjtime . hwclock utilisera alors UTC par dĂ©faut pour l’horloge matĂ©rielle. Si l’horloge matĂ©rielle est Ă  l’heure locale, elle devra ĂȘtre dĂ©finie dans le fichier. Cela peut ĂȘtre fait en appelant hwclock\ --localtime\ --adjust ; quand le fichier n’est pas prĂ©sent, cette commande n’ajustera pas vraiment l’horloge, mais crĂ©era le fichier avec l’heure locale configurĂ©e et un facteur de dĂ©rive Ă  zĂ©ro.

Une condition sous laquelle l’inhibition de correction de dĂ©rive de hwclock peut ĂȘtre utile est lorsque plusieurs systĂšmes sont utilisĂ©s en multiboot. Pendant que cette instance de Linux est arrĂȘtĂ©e, si un autre systĂšme d’exploitation modifie la valeur de l’horloge matĂ©rielle, la correction de dĂ©rive appliquĂ©e sera incorrecte quand cette instance redĂ©marrera.

Pour que la correction de dĂ©rive de hwclock fonctionne correctement, rien ne doit modifier l’horloge matĂ©rielle pendant que son instance de Linux n’est pas en fonctionnement.

--set

Mettre l’horloge matĂ©rielle Ă  l’heure donnĂ©e par l’option --date et mettre Ă  jour les horodatages dans /etc/adjtime . Avec l’option --update-drift , recalculer le facteur de dĂ©rive. À essayer sans cette option si --set Ă©choue. Consulter --update-drift ci-aprĂšs.

--systz

C’est une alternative Ă  la fonction --hctosys qui ne lit pas l’horloge matĂ©rielle et n’ajuste pas l’horloge systĂšme ; par consĂ©quent, aucune correction de dĂ©rive n’est effectuĂ©e. Elle est conçue pour ĂȘtre utilisĂ©e dans un script de dĂ©marrage sur les systĂšmes avec des noyaux de version supĂ©rieure Ă  2.6 oĂč l’horloge systĂšme a Ă©tĂ© ajustĂ©e depuis l’horloge matĂ©rielle par le noyau lors du dĂ©marrage.

Elle procÚde aux actions suivantes qui sont détaillées ci-dessus dans la fonction --hctosys :

‱ correction du fuseau horaire de l’horloge matĂ©rielle en UTC si nĂ©cessaire. Seulement, au lieu d’accomplir cela en rĂ©glant l’horloge systĂšme, hwclock informe simplement le noyau qui se charge de la modification ;

‱ activation du « mode 11 minutes » de NTP du noyau ;

‱ dĂ©finition du fuseau horaire du noyau.

Les deux premiĂšres actions ne sont disponibles que lors du premier appel de settimeofday (2) aprĂšs le dĂ©marrage. Par consĂ©quent, cette option n’a de sens que dans un script de dĂ©marrage. Si la configuration du fuseau horaire de l’horloge matĂ©rielle est modifiĂ©e, un redĂ©marrage serait nĂ©cessaire pour informer le noyau.

-w , --systohc

Mettre l’horloge matĂ©rielle Ă  l’heure systĂšme et mettre Ă  jour les horodatages dans /etc/adjtime . Avec l’option --update-drift , (re)calculer le facteur de dĂ©rive. À essayer sans l’option si --systohc Ă©choue. Consulter --update-drift ci-aprĂšs.

--vl-read , --vl-clear

Some RTC devices are able to monitor the voltage of the backup battery and thus provide a way for the user to know that the battery should be replaced. The --vl-read function retrieves the Voltage Low information and decodes the result into human-readable form. The --vl-clear function resets the Voltage Low information, which is necessary for some RTC devices after a battery replacement.

See the Kernel’s include/uapi/linux/rtc.h for details on which pieces of information may be returned. Note that not all RTC devices have this monitoring capability, nor do all drivers necessarily support reading the information.

-h , --help

Afficher l’aide-mĂ©moire puis quitter.

-V , --version

Afficher la version et quitter.

OPTIONS

--adjfile= fichier

Remplacer le chemin de fichier par défaut /etc/adjtime .

--date= chaĂźne_date

Cette option doit ĂȘtre utilisĂ©e avec les fonctions --set ou --predict , autrement elle est ignorĂ©e.

hwclock --set --date='16:45'

hwclock --predict --date='2525-08-14 07:11:05'

L’argument doit ĂȘtre en heure locale, mĂȘme si l’horloge matĂ©rielle est en UTC. Consultez l’option --localtime . Par consĂ©quent, l’argument ne doit pas comporter d’information de fuseau horaire. Il ne doit pas aussi ĂȘtre en temps relatif, comme par exemple « +5 minutes » car la prĂ©cision de hwclock dĂ©pend de la corrĂ©lation entre la valeur de l’argument et le moment oĂč la touche EntrĂ©e est pressĂ©e. Les secondes fractionnaires sont Ă©cartĂ©es silencieusement. Cette option peut gĂ©rer beaucoup de formats de date et heure, mais les paramĂštres prĂ©cĂ©dents doivent ĂȘtre respectĂ©s.

--delay= secondes

Cette option peut ĂȘtre utilisĂ©e pour surcharger le dĂ©lai utilisĂ© en interne lors du rĂ©glage de l’horloge. La valeur par dĂ©faut est 0,5s (500 ms) pour rtc_cmos, pour d’autres types d’horloge temps rĂ©el le dĂ©lai est zĂ©ro. Si le type d’horloge temps rĂ©el est impossible Ă  dĂ©terminer (Ă  partir de sysfs), alors la valeur par dĂ©faut est 0,5 pour ĂȘtre rĂ©trocompatible.

The 500ms default is based on commonly used MC146818A-compatible (x86) hardware clock. This Hardware Clock can only be set to any integer time plus one half second. The integer time is required because there is no interface to set or get a fractional second. The additional half second delay is because the Hardware Clock updates to the following second precisely 500 ms after setting the new time. Unfortunately, this behavior is hardware specific and in some cases another delay is required.

-D , --debug

Utilisation avec --verbose . L’option --debug est obsolĂšte et pourrait ĂȘtre redĂ©finie ou supprimĂ©e dans une publication future.

--directisa

Cette option est utile pour les machines compatibles ISA des familles x86 et x86_64. Pour les autres machines, elle n’a pas d’impact. Cette option indique Ă  hwclock d’utiliser des instructions d’entrĂ©e et sortie explicites pour accĂ©der Ă  l’horloge matĂ©rielle. Sans cette option, hwclock essaiera d’utiliser le fichier de pĂ©riphĂ©rique rtc, supposĂ© ĂȘtre pilotĂ© par le pilote de pĂ©riphĂ©rique RTC. Depuis la version 2.26, --directisa n’est plus automatiquement utilisĂ© quand le pilote rtc n’est pas disponible. Cela provoquait une condition non sĂ©curisĂ©e qui pouvait permettre Ă  deux processus d’accĂ©der Ă  l’horloge matĂ©rielle en mĂȘme temps. L’accĂšs direct au matĂ©riel depuis l’espace utilisateur ne devrait ĂȘtre utilisĂ© que pour des essais, du dĂ©pannage ou en dernier recours aprĂšs l’échec de toutes les autres mĂ©thodes. Consultez l’option --rtc .

--epoch= année

Cette option est nĂ©cessaire lors de l’utilisation de la fonction --setepoch . La valeur minimale de annĂ©e est 1900. Celle maximale dĂ©pend du systĂšme ( ULONG_MAX\ -\ 1 ).

-f , --rtc= fichier

Remplacer le nom de fichier du périphérique rtc par défaut de hwclock . Sinon, le premier trouvé sera utilisé, dans cet ordre : /dev/rtc0 , /dev/rtc , /dev/misc/rtc . Par IA-64: /dev/efirtc /dev/misc/efirtc

-l , --localtime ; -u , --utc

Indiquer le fuseau horaire utilisĂ© par l’horloge matĂ©rielle.

L’horloge matĂ©rielle peut ĂȘtre configurĂ©e pour utiliser soit UTC, soit le fuseau horaire local, mais rien n’indique dans l’horloge elle-mĂȘme l’alternative utilisĂ©e. Les options --localtime et --utc indiquent cela Ă  la commande hwclock . Si vous indiquez la mauvaise information (ou n’en indiquez aucune et que la valeur par dĂ©faut est incorrecte), Ă  la fois le rĂ©glage et la lecture de l’horloge matĂ©rielle seront incorrectes.

Si vous n’indiquez ni --utc ni --localtime , la valeur utilisĂ©e la derniĂšre fois avec une fonction de dĂ©finition ( --set , --systohc ou --adjust ), comme sauvegardĂ©e dans /etc/adjtime , sera utilisĂ©e. Si le fichier d’ajustement n’existe pas, UTC est choisie.

Remarque : les modifications d’heure d’étĂ© peuvent ĂȘtre incohĂ©rentes quand l’horloge matĂ©rielle est gardĂ©e en heure locale. Consultez la discussion ci-dessous sous LOCALE ou UTC .

--noadjfile

Ne pas tenir compte de /etc/adjtime . hwclock ne lira ni n’écrira dans ce fichier. L’option --utc ou --localtime doit obligatoirement ĂȘtre indiquĂ©e avec cette option.

--test

Ne pas vraiment faire de modification sur le systùme, c’est-à-dire ni sur les horloges ni sur /etc/adjtime ( --verbose > est implicite avec cette option).

--update-drift

Mettre Ă  jour le coefficient de dĂ©rive de l’horloge matĂ©rielle dans /etc/adjtime . Ce ne peut ĂȘtre utilisĂ© qu’avec --set ou --systohc .

Une pĂ©riode minimale de quatre heures entre les rĂ©glages est nĂ©cessaire. Cela permet d’éviter des calculs incorrects. Plus la pĂ©riode est longue, plus le facteur de dĂ©rive rĂ©sultant est prĂ©cis.

Cette option a Ă©tĂ© ajoutĂ©e Ă  la version 2.26, parce que les systĂšmes appellent souvent hwclock\ --systohc lors de l’arrĂȘt ; avec l’ancien comportement, cela forçait le (re)calcul du facteur de dĂ©rive, avec pour consĂ©quence les problĂšmes suivants :

‱ lors de l’utilisation de NTP avec un noyau en « mode 11 minutes », le facteur de dĂ©rive Ă©tait Ă©crasĂ© par une valeur quasiment nulle ;

‱ cela ne permettait pas d’utiliser la correction de dĂ©rive « à froid ». Avec la plupart des configurations, l’utilisation de la dĂ©rive « à froid » donnera des rĂ©sultats favorables. À froid signifie quand la machine est Ă©teinte, ce qui peut avoir un impact significatif sur le facteur de dĂ©rive ;

‱ le (re)calcul du facteur de dĂ©rive Ă  chaque arrĂȘt entraĂźne des rĂ©sultats suboptimaux. Par exemple, si des conditions Ă©phĂ©mĂšres rendent la machine anormalement chaude, le calcul du facteur de dĂ©rive serait hors limites ;

‱ augmentation significative du temps d’arrĂȘt du systĂšme (depuis la version v2.31 lorsque --update-drift n’est pas utilisĂ©, l’horloge temps rĂ©el n’est pas lue).

Laisser hwclock calculer le facteur de dĂ©rive est un bon point de dĂ©part, mais pour des rĂ©sultats optimaux, il faudra probablement l’ajuster directement en Ă©ditant le fichier /etc/adjtime . Pour la plupart des configurations, une fois qu’un facteur de dĂ©rive optimal est mis en place, ce n’est plus la peine de le modifier. Ainsi, le comportement prĂ©cĂ©dent de (re)calculer la dĂ©rive a Ă©tĂ© modifiĂ©, et cette option est nĂ©cessaire pour la rĂ©tablir. Consultez la discussion ci-dessous dans La fonction d’ajustement .

Cette option nĂ©cessite de lire l’horloge matĂ©rielle avant de la rĂ©gler. Si elle ne peut ĂȘtre lue, cela conduit Ă  l’échec des fonctions de rĂ©glage. Cela peut se produire, par exemple, si l’horloge matĂ©rielle est corrompue Ă  cause d’un problĂšme d’alimentation Ă©lectrique. Dans ce cas, l’horloge doit d’abord ĂȘtre rĂ©glĂ©e sans cette option. Bien qu’il ne soit pas en fonctionnement, le facteur de correction de dĂ©rive ne serait pas valable de toute façon.

-v , --verbose

Afficher plus de détails sur ce que réalise hwclock en interne.

NOTES

Horloges dans un systĂšme Linux

Deux types d’horloge existent.

The Hardware Clock: This clock is an independent hardware device, with its own power domain (battery, capacitor, etc), that operates when the machine is powered off, or even unplugged.

Sur un systĂšme compatible ISA, l’horloge est dĂ©finie dans la norme ISA. Un programme de contrĂŽle ne peut lire ou ajuster l’heure qu’à la seconde, mais il peut Ă©galement dĂ©tecter les pentes des tics de seconde 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’horloge temps rĂ©el, le RTC, l’horloge BIOS ou l’horloge CMOS. La dĂ©signation horloge matĂ©rielle a Ă©tĂ© inventĂ©e pour ĂȘtre utilisĂ©e avec hwclock . Le noyau Linux y fait rĂ©fĂ©rence sous le nom d’horloge persistante.

Certains systĂšmes non ISA ont plusieurs horloges temps rĂ©el, mais une seule avec sa propre source d’énergie. Un composant externe, sur I2C ou SPI, consommant trĂšs peu, peut ĂȘtre utilisĂ© avec une batterie de secours comme horloge matĂ©rielle afin d’initialiser une horloge temps rĂ©el intĂ©grĂ©e plus fonctionnelle, utilisĂ©e pour la plupart des autres objectifs.

The System Clock: This clock is part of the Linux kernel and is driven by a timer interrupt. (On an ISA machine, the timer interrupt is part of the ISA standard.) It has meaning only while Linux is running on the machine. The System Time is the number of seconds since 00:00:00 January 1, 1970 UTC (or more succinctly, the number of seconds since 1969 UTC). The System Time is not an integer, though. It has virtually infinite precision.

L’horloge systĂšme donne l’heure importante. Le but essentiel de l’horloge matĂ©rielle est de garder l’heure lorsque Linux ne fonctionne pas afin de pourvoir initialiser l’heure systĂšme au dĂ©marrage. Remarquez qu’avec DOS, pour qui 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 lorsque le programme date (1) est utilisĂ© pour 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. Remarque : ce n’est actuellement pas possible sur la plupart des systĂšmes car hwclock --systohc est appelĂ©e lors de l’arrĂȘt.

Le fuseau horaire du noyau Linux est dĂ©fini par hwclock . Cependant, ne vous trompez pas — pratiquement personne ne se prĂ©occupe du fuseau horaire maintenu par le noyau. Les programmes devant utiliser le fuseau horaire (par exemple pour 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 fichier /etc/localtime , comme expliquĂ© dans la page de manuel de tzset (3). Cependant, certains programmes et certaines parties du noyau Linux comme les systĂšmes de fichiers utilisent la valeur de fuseau horaire du noyau. Un exemple est le systĂšme de fichiers 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. Un autre exemple est le « mode 11 minutes » de NTP du noyau. Si la valeur de fuseau horaire du noyau ou que la variable persistent_clock_is_local sont fausses, l’horloge matĂ©rielle ne sera pas rĂ©glĂ©e correctement par le « mode 11 minutes ». Consultez la discussion ci-dessous, sous Synchronisation automatique de l’horloge matĂ©rielle par le noyau .

hwclock sets the kernel’s timezone to the value indicated by TZ or /etc/localtime with the --hctosys or --systz functions.

Le fuseau horaire du noyau 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Ă© localement Ă  l’heure actuelle. Ce second champ n’est jamais utilisĂ© sous Linux et est toujours nul. Consultez Ă©galement settimeofday (2).

MĂ©thodes d’accĂšs Ă  l’horloge matĂ©rielle

hwclock uses many different ways to get and set Hardware Clock values. The most normal way is to do I/O to the rtc device special file, which is presumed to be driven by the rtc device driver. Also, Linux systems using the rtc framework with udev, are capable of supporting multiple Hardware Clocks. This may bring about the need to override the default rtc device by specifying one with the --rtc option.

Cependant, cette mĂ©thode n’est pas toujours disponible sur les anciens systĂšmes ne disposant pas de pilote rtc. Sur ces systĂšmes, la mĂ©thode d’accĂšs Ă  l’horloge matĂ©rielle dĂ©pend de la machine.

Sur un systĂšme compatible ISA, hwclock peut accĂ©der directement 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. hwclock effectue cela avec de vĂ©ritables instructions d’E/S et doit donc ĂȘtre exĂ©cutĂ© avec des droits de superutilisateur. Cette mĂ©thode peut ĂȘtre utilisĂ©e en indiquant l’option --directisa .

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 pour permettre de faire des essais ou du dĂ©pannage et parce que cela pourrait ĂȘtre la seule mĂ©thode disponible sur les systĂšmes compatibles ISA ne disposant pas d’un pilote fonctionnel de pĂ©riphĂ©rique rtc.

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 chaque jour. C’est la dĂ©rive systĂ©matique. La fonction --adjust de hwclock permet d’appliquer des corrections de dĂ©rive systĂ©matique Ă  l’horloge matĂ©rielle.

Cela fonctionne de la façon suivante : hwclock utilise un fichier, /etc/adjtime , qui conserve des informations historiques. C’est le fichier d’ajustement ( adjtime ).

Supposons un dĂ©marrage sans fichier d’ajustement. La commande hwclock --set rĂšgle l’horloge matĂ©rielle Ă  l’heure actuelle. hwclock crĂ©e le fichier d’ajustement et y sauvegarde l’heure actuelle en tant que dernier moment d’étalonnage. Cinq jours plus tard, l’horloge a gagnĂ© 10 secondes, la commande hwclock --set --update-drift corrige alors l’heure. hwclock met Ă  jour le fichier d’ajustement avec l’heure actuelle en tant que dernier moment d’étalonnage, et enregistre une dĂ©rive systĂ©matique de 2 secondes par jour. Au bout de 24 heures, avec la commande 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. L’heure actuelle est alors enregistrĂ©e en tant que dernier moment d’étalonnage. 24 heures aprĂšs, la commande hwclock --adjust effectuera exactement la mĂȘme opĂ©ration.

Quand l’option --update-drift est utilisĂ©e avec --set ou --systohc , le taux de dĂ©rive systĂ©matique est (re)calculĂ© en comparant l’heure matĂ©rielle actuelle avec correction de dĂ©rive Ă  la nouvelle heure de rĂ©glage. En est dĂ©duit le taux de dĂ©rive sur 24 heures Ă  partir du dernier horodatage de calibration du fichier d’ajustement. Ce facteur de dĂ©rive mis Ă  jour est sauvĂ© dans /etc/adjtime .

Une petite erreur est introduite quand l’horloge matĂ©rielle est dĂ©finie, de telle sorte que --adjust Ă©vite de faire un ajustement de moins d’une seconde. Plus tard, lors d’une redemande d’ajustement, la dĂ©rive accumulĂ©e sera supĂ©rieure Ă  une seconde et --adjust fera l’ajustement mĂȘme de toute partie infime.

hwclock --hctosys also uses the adjtime file data to compensate the value read from the Hardware Clock before using it to set the System Clock. It does not share the 1 second limitation of --adjust , and will correct sub-second drift values immediately. It does not change the Hardware Clock time nor the adjtime file. This may eliminate the need to use --adjust , unless something else on the system needs the Hardware Clock to be compensated.

Le fichier d’ajustement

MĂȘme s’il garde ce nom pour des raisons historiques, il contient en fait d’autres informations utilisĂ©es par hwclock d’un appel Ă  l’autre.

Le format du fichier d’ajustement, en ASCII, est le suivant :

Ligne 1 : trois nombres, séparés par des espaces : 1) le taux de dérive systématique en seconde par jour, nombre décimal flottant ; 2) le 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 que nombre décimal flottant.

Ligne 2 : un nombre : le 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. Ce mode est une option au moment de la compilation, aussi tous les noyaux n’ont pas cette possibilitĂ©. Il est pratique de l’utiliser quand un moyen sophistiquĂ© comme NTP garde 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).

Si le noyau est compilĂ© avec l’option « mode 11 minutes », il sera actif quand la discipline de l’horloge du noyau est dans l’état synchronisĂ©. Dans cet Ă©tat, le bit 6 (le bit rĂ©glĂ© dans le masque 0x0040) de la variable time_status du noyau n’est pas dĂ©fini. Cette valeur est produite comme ligne « status » des commandes adjtimex\ --print ou ntptime .

Il agit de maniĂšre externe, comme le dĂ©mon NTP pour mettre la discipline de l’horloge du noyau dans l’état synchronisĂ© et, par consĂ©quent, active le « mode 11 minutes ». Il peut ĂȘtre dĂ©sactivĂ© en exĂ©cutant n’importe quelle commande, y compris hwclock --hctosys qui ajuste l’horloge systĂšme de maniĂšre classique. Cependant, si le dĂ©mon NTP est toujours actif, il rĂ©activera le « mode 11 minutes » la prochaine fois qu’il synchronisera l’horloge systĂšme.

Si le « mode 11 minutes » est activĂ© sur le systĂšme, l’utilisation de --hctosys ou --systz risque d’ĂȘtre nĂ©cessaire dans un script de dĂ©marrage, en particulier si l’horloge matĂ©rielle est configurĂ©e pour utiliser le fuseau horaire local. À moins que le noyau ne soit informĂ© du fuseau horaire utilisĂ© par l’horloge matĂ©rielle, il risque de l’écraser avec une heure incorrecte. Le noyau utilise UTC par dĂ©faut.

La premiĂšre commande en espace utilisateur pour dĂ©finir l’horloge systĂšme informe le noyau du fuseau horaire utilisĂ© par l’horloge matĂ©rielle. Cela ce fait par l’intermĂ©diaire de la variable persistent_clock_is_local du noyau. Si --hctosys ou --systz sont utilisĂ©es en premier, cette variable sera dĂ©finie d’aprĂšs le fichier d’ajustement ou l’argument appropriĂ© en ligne de commande. Remarquez que lorsque cette capacitĂ© est utilisĂ©e et que le fuseau horaire de l’horloge matĂ©rielle est modifiĂ©, un redĂ©marrage est nĂ©cessaire pour informer le noyau.

hwclock --adjust should not be used with NTP '11 minute mode'.

Valeur du siĂšcle de l’horloge matĂ©rielle ISA

Une sorte de norme 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.

CONFIGURATION DE DATE ET HEURE

Garder l’heure sans synchronisation externe

Cette discussion est basée sur les conditions suivantes.

‱ Rien de ce qui fonctionne n’altĂšre les date et heure des horloges, par exemple un dĂ©mon NTP ou une tĂąche rĂ©guliĂšre (cron).

‱ Le fuseau horaire du systĂšme est configurĂ© pour l’heure locale correcte. Consultez POSIX ou « RIGHT » ci dessous.

‱ Rapidement lors du dĂ©marrage, les commandes suivantes sont appelĂ©es dans cet ordre : adjtimex --tick valor --frequency valor hwclock --hctosys

‱ Pendant l’arrĂȘt, la commande suivante est appelĂ©e : hwclock --systohc

‱ Les systùmes sans adjtimex peuvent utiliser ntptime .

Que la prĂ©cision de l’heure soit maintenue avec le dĂ©mon NTP ou pas, configurer le systĂšme pour qu’il reste Ă  l’heure par lui-mĂȘme est utile.

La premiĂšre Ă©tape pour rĂ©aliser cela est d’avoir une vision d’ensemble claire. Deux pĂ©riphĂ©riques matĂ©riels indĂ©pendants fonctionnent Ă  leur propre rythme et divergent de l’heure « correcte » Ă  leur propre taux. Les mĂ©thodes et programmes pour la correction de dĂ©rive sont diffĂ©rents pour chaque pĂ©riphĂ©rique. Cependant, la plupart des systĂšmes sont configurĂ©s pour Ă©changer des valeurs entre ces deux horloges au dĂ©marrage et Ă  l’arrĂȘt. DĂ©sormais les heures de chaque pĂ©riphĂ©rique, avec leurs propres erreurs, sont donc transfĂ©rĂ©es de l’une Ă  l’autre dans les deux sens. Si vous tentez de configurer une correction de dĂ©rive pour une seule d’entre elles, la dĂ©rive de l’autre l’écrasera.

Ce problĂšme peut ĂȘtre Ă©vitĂ© en configurant la correction de dĂ©rive pour l’horloge systĂšme et en Ă©vitant simplement d’arrĂȘter la machine. Cela, avec le fait que toute la prĂ©cision de hwclock (y compris le calcul des facteurs de dĂ©rive) dĂ©pend de l’exactitude de la frĂ©quence de l’horloge systĂšme, signifie que la configuration de l’horloge systĂšme devrait ĂȘtre la premiĂšre Ă©tape.

La dĂ©rive de l’horloge systĂšme est corrigĂ©e avec les options --tick et --frequency d’ adjtimex (8). Les deux fonctionnent ensemble, le tic est l’ajustement grossier alors que la frĂ©quence est l’ajustement fin (sur les systĂšmes sans paquet adjtimex , ntptime\ -f ppm peut ĂȘtre utilisĂ© Ă  la place).

Certaines distributions Linux essayent de calculer automatiquement la dĂ©rive de l’horloge systĂšme avec l’opĂ©ration de comparaison d’ adjtimex . Essayer de corriger une horloge qui dĂ©rive en utilisant comme rĂ©fĂ©rence une autre horloge qui dĂ©rive est un peu comme un chien qui essaye de s’attraper la queue. Cela peut fonctionner au bout d’un moment mais pas sans beaucoup d’efforts et de frustration. Cette automatisme peut ĂȘtre considĂ©rĂ© comme une amĂ©lioration face Ă  l’absence de configuration, mais espĂ©rer un rĂ©sultat optimal serait une erreur. Les options --log d’ adjtimex s’avĂšrent ĂȘtre une meilleure possibilitĂ© pour une configuration manuelle.

Simplement suivre la dĂ©rive de l’horloge systĂšme avec sntp , ou date\ -Ins par rapport Ă  une horloge de prĂ©cision, puis calculer soi-mĂȘme la correction, serait plus efficace.

AprĂšs la dĂ©finition des valeurs de tic et de frĂ©quence, il faut continuer de tester et d’affiner les ajustements jusqu’à ce que l’horloge systĂšme garde l’heure correctement. Consultez adjtimex (2) pour plus de renseignements et l’exemple montrant un calcul manuel de dĂ©rive.

Une fois que l’horloge systĂšme est fiable, l’horloge matĂ©rielle va pouvoir ĂȘtre rĂ©glĂ©e.

En rĂšgle gĂ©nĂ©rale, la dĂ©rive Ă  froid fonctionne bien dans la plupart des cas d’utilisation. Cela devrait mĂȘme ĂȘtre vrai pour les machines fonctionnant vingt-quatre heures sur vingt-quatre et dont les temps d’arrĂȘt usuels servent uniquement pour les redĂ©marrages. Dans ce cas, la valeur du facteur de dĂ©rive est peu diffĂ©rente, mais si la machine est arrĂȘtĂ©e plus longtemps que d’habitude, la dĂ©rive Ă  froid devrait donner de meilleurs rĂ©sultats.

Steps to calculate cold drift:

1

Ensure that NTP daemon will not be launched at startup.

2

L’heure de l’horloge systĂšme doit ĂȘtre exacte Ă  l’arrĂȘt !.

3

ArrĂȘter le systĂšme.

4

Laisser passer suffisamment de temps sans modifier l’horloge matĂ©rielle.

5

Démarrer le systÚme.

6

Utiliser hwclock immĂ©diatement pour rĂ©gler l’heure correcte avec l’option --update-drift .

Remarque : si l’étape six utilise --systohc , alors l’horloge systĂšme doit ĂȘtre rĂ©glĂ©e correctement (Ă©tape 6a) juste avant.

Laisser hwclock calculer le facteur de dĂ©rive est un bon point de dĂ©part, mais pour obtenir des rĂ©sultats optimaux, modifier directement le fichier /etc/adjtime sera probablement nĂ©cessaire. Continuer de tester et affiner les ajustements jusqu’à ce que l’horloge matĂ©rielle soit corrigĂ©e correctement au dĂ©marrage. Pour vĂ©rifier cela, assurez-vous que l’heure systĂšme soit correcte avant l’arrĂȘt puis utilisez sntp , ou date\ -Ins et une horloge de prĂ©cision, immĂ©diatement aprĂšs le dĂ©marrage.

LOCALE ou UTC

Garder l’horloge matĂ©rielle en heure locale provoque des rĂ©sultats incohĂ©rents de changement d’heure d’étĂ©.

‱ Si Linux est en cours de fonctionnement au moment du changement d’heure, l’heure Ă©crite dans l’horloge matĂ©rielle sera ajustĂ©e pour le changement.

‱ Si Linux n’est pas en cours de fonctionnement au moment du changement d’heure, l’heure lue de l’horloge matĂ©rielle ne sera pas ajustĂ©e pour le changement.

L’horloge matĂ©rielle sur un systĂšme compatible ISA ne garde que l’heure et la date, elle n’a pas de connaissance du fuseau horaire ni d’heure d’étĂ©. Ainsi, quand hwclock est informĂ©e d’utiliser l’heure locale, elle considĂšre l’horloge matĂ©rielle en heure locale « correcte » et ne fait pas d’ajustement de l’heure qui y est lue.

Linux ne gĂšre les changements d’heure d’étĂ© de façon transparente que quand l’horloge matĂ©rielle est gardĂ©e en UTC. Ce fonctionnement facilite le travail des administrateurs systĂšme car hwclock utilise l’heure locale en sortie et comme argument de l’option --date .

Les systĂšmes POSIX, comme Linux, sont conçus pour avoir l’horloge systĂšme en heure UTC. Le but de l’horloge matĂ©rielle est d’initialiser l’horloge systĂšme, donc la garder aussi en UTC est sensĂ©.

Linux, cependant, essaye de s’adapter Ă  l’horloge matĂ©rielle en heure locale. C’est avant tout pour gĂ©rer le multiboot avec les plus anciennes versions de Microsoft Windows. Depuis Windows 7, la clef de registre RealTimeIsUniversal est supposĂ©e fonctionner correctement pour permettre de garder l’horloge matĂ©rielle en UTC.

POSIX ou « RIGHT »

Une discussion sur la configuration de date et d’heure serait incomplĂšte sans parler de fuseaux horaires, c’est assez bien couvert par tzset (3). Une zone qui semble non documentĂ©e est le rĂ©pertoire right de la base de donnĂ©es de fuseaux horaires, parfois appelĂ© « tz » ou « zoneinfo ».

Deux bases de donnĂ©es distinctes existent dans le systĂšme zoneinfo : posix et right . Le rĂ©pertoire right (maintenant appelĂ© zoneinfo-leaps , secondes intercalaires de zoneinfo>) contient les secondes intercalaires alors que _posix ne les contient pas. Pour utiliser la base de donnĂ©es right , l’horloge systĂšme doit ĂȘtre configurĂ©e en (UTC + secondes intercalaires), ce qui est Ă©quivalent Ă  (TAI − 10). Cela permet de calculer le nombre exact de secondes entre deux dates ayant une seconde intercalaire entre elles. L’horloge systĂšme est alors convertie en heure civile correcte, y compris UTC, en utilisant les fichiers de fuseau horaire right qui soustraient les secondes intercalaires. Remarque : cette configuration est considĂ©rĂ©e expĂ©rimentale et est connue pour poser des problĂšmes.

Pour configurer un systĂšme Ă  utiliser une base de donnĂ©es en particulier, tous les fichiers de son rĂ©pertoire doivent ĂȘtre copiĂ©s Ă  la racine de /usr/share/zoneinfo . Les fichiers ne sont jamais utilisĂ©s directement des sous-rĂ©pertoires posix ou right , par exemple TZ=' right/America/Martinique '. Cette habitude Ă©tait devenue si rĂ©pandue que le projet zoneinfo amont a restructurĂ© le systĂšme d’arborescence de fichiers en dĂ©plaçant les sous-rĂ©pertoires posix et right hors du rĂ©pertoire zoneinfo et dans des rĂ©pertoires adjacents :

/usr/share/zoneinfo , /usr/share/zoneinfo-posix , /usr/share/zoneinfo-leaps

Malheureusement, certaines distributions Linux replacent l’arborescence comme prĂ©cĂ©demment dans leurs paquets. Ainsi, le problĂšme des administrateurs systĂšme utilisant directement le rĂ©pertoire right persiste. À cause de cela, le fuseau horaire du systĂšme est configurĂ© pour inclure les secondes intercalaires alors que la base de donnĂ©es de zoneinfo est encore configurĂ©e pour les exclure. Pourtant, quand une application comme une horloge mondiale, un agent de transport de courrier (MTA) ou hwclock a besoin du fichier de fuseau horaire South_Pole , elle le prend Ă  la racine du /usr/share/zoneinfo , puisque c’est ce qu’elle est censĂ©e faire. Ces fichiers excluent les secondes intercalaires, mais l’horloge systĂšme les inclut maintenant, avec pour consĂ©quence une conversion d’heure incorrecte.

Tenter de mĂ©langer et de faire correspondre les fichiers de ces bases de donnĂ©es distinctes ne fonctionnera pas puisqu’elles nĂ©cessitent chacune que l’horloge systĂšme utilise un fuseau horaire diffĂ©rent. La base de donnĂ©es zoneinfo doit ĂȘtre configurĂ©e pour utiliser soit posix , soit right , conformĂ©ment Ă  la description prĂ©cĂ©dente ou en assignant un chemin de base de donnĂ©es Ă  la variable TZDIR .

CODE DE RETOUR

Une des valeurs suivantes sera renvoyée.

EXIT_SUCCESS ( 0 sur les systĂšmes POSIX)

Exécution du programme réussie.

EXIT_FAILURE ( 1 sur les systĂšmes POSIX)

L’opĂ©ration a Ă©chouĂ© ou la syntaxe de la commande Ă©tait inadĂ©quate.

ENVIRONNEMENT

TZ

Si cette variable est définie, sa valeur prend le pas sur la valeur de fuseau horaire configurée sur le systÚme.

TZDIR

Si cette variable est définie, sa valeur prend le pas sur le chemin du répertoire de base de données des fuseaux horaires configuré sur le systÚme.

FICHIERS

/etc/adjtime

The configuration and state file for hwclock . See also adjtime_config (5).

/etc/localtime

Fichier de fuseau horaire du systĂšme

/usr/share/zoneinfo/

Répertoire de la base de données de fuseaux horaires du systÚme.

Fichiers de pĂ©riphĂ©rique pouvant ĂȘtre essayĂ©s par hwclock pour un accĂšs Ă  l’horloge matĂ©rielle : /dev/rtc0 /dev/rtc /dev/misc/rtc /dev/efirtc /dev/misc/efirtc

VOIR AUSSI

date (1), adjtime_config (5), adjtimex (8), gettimeofday (2), settimeofday (2), crontab (1p), tzset (3)

AUTEURS

Écrit par Bryan Henderson <bryanh@giraffe-data.com>, septembre 1996, basĂ© sur le travail effectuĂ© sur le programme clock (8) 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.

SIGNALER DES BOGUES

Pour signaler un bogue, utilisez le gestionnaire de bogues <https://github.com/util-linux/util-linux/issues>.

DISPONIBILITÉ

La commande hwclock fait partie du paquet util-linux, elle est disponible sur l’archive du noyau Linux <https://www.kernel.org/pub/linux/utils/util-linux/>.