HWCLOCK(8) Administration Systeme HWCLOCK(8) 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 ete faites a la fonction --hctosys et a l'option --directisa, et une nouvelle option --update-drift a ete ajoutee. Consultez leurs descriptions respectives ci-dessous. FONCTIONS Les fonctions suivantes s'excluent mutuellement, une seule peut etre indiquee a la fois. Si aucune n'est indiquee, --show est utilisee par defaut. -a, --adjust Ajouter ou retirer du temps a l'horloge materielle pour tenir compte de la derive systematique depuis la derniere fois ou l'horloge a ete ajustee. 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 definir la valeur d'Epoque de l'horloge materielle. C'est l'annee gregorienne qui correspond a la valeur zero du champ annee de l'horloge materielle. Par exemple, si le BIOS de la machine definit le decompte d'annees entieres de l'horloge materielle au nombre d'annees entieres depuis 1952, la valeur d'Epoque de l'horloge materielle pour le noyau doit etre 1952. La fonction --setepoch necessite l'utilisation de l'option --epoch pour preciser l'annee. Par exemple : hwclock --setepoch --epoch=1952 Le pilote de l'horloge temps reel (RTC) essaie de deviner la valeur correcte d'Epoque, aussi la regler peut ne pas etre necessaire. La valeur de l'Epoque est utilisee a chaque fois que hwclock lit ou ajuste l'horloge materielle sur une machine Alpha. Pour les machines ISA, le noyau utilise une valeur fixe de 1900 pour l'Epoque. --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 Predire ce que l'horloge materielle lira dans le futur a partir de l'heure donnee par l'option --date et des renseignements de /etc/adjtime. C'est utile, par exemple, pour prendre en compte la derive lors de la definition d'un reveil (alarme) par l'horloge materielle. Consultez rtcwake(8). N'utilisez pas cette fonction si l'horloge materielle est modifiee par autre chose que la commande hwclock du systeme d'exploitation actuel, comme le << mode 11 minutes >> ou par un autre systeme d'exploitation en multiboot. -r, --show; --get Lire l'horloge materielle materielle et afficher l'heure sur la sortie standard au format ISO\ 8601. L'heure affichee est toujours en heure locale, meme si l'horloge materielle est en temps universel. Consultez l'option --localtime. Montrer l'heure de l'horloge materielle est l'action par defaut si aucune fonction n'est indiquee. La fonction --get applique aussi la correction de derive a l'heure lue, a partir des renseignements de /etc/adjtime. N'utilisez pas cette fonction si l'horloge materielle est modifiee par autre chose que la commande hwclock du systeme d'exploitation actuel, comme le << mode 11 minutes >> ou par un autre systeme d'exploitation en multiboot. -s, --hctosys Mettre l'heure systeme a l'heure de l'horloge materielle. L'heure lue de l'horloge materielle est compensee pour prendre en compte la derive systematique avant de l'utiliser pour definir l'heure systeme. Consultez la discussion ci-dessous, sous La fonction d'ajustement. L'horloge systeme doit etre gardee en UTC pour que les applications de date et d'heure fonctionnent correctement avec le fuseau horaire configure sur le systeme. Si l'horloge materielle est conservee en heure locale, alors l'heure qui y est lue doit etre convertie en UTC avant de l'utiliser pour definir l'horloge systeme. La fonction --hctosys le fait a partir des renseignements du fichier /etc/adjtime ou des arguments --localtime et --utc en ligne de commande. Remarque : aucun ajustement d'heure d'ete n'est realise. 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 demarrage, si la fonction --hctosys est la premiere a appeler settimeofday(2) depuis le demarrage, cela definira le << mode 11 minutes >> de NTP par l'intermediaire de la variable persistent_clock_is_local du noyau. Si la configuration du fuseau horaire de l'horloge materielle est modifiee, alors un redemarrage est necessaire pour informer le noyau. Consultez la discussion ci-dessous, sous Synchronisation automatique de l'horloge materielle par le noyau. C'est une fonction particulierement utile dans un des scripts de demarrage avant que les systemes de fichiers ne soient montes en lecture et ecriture. Cette fonction ne devrait jamais etre utilisee sur un systeme en fonctionnement. Les sauts d'horloge systeme provoqueront des problemes comme par exemple des horodatages corrompus sur le systeme de fichiers. Ainsi, si quelque chose a modifie l'horloge materielle, comme le << mode 11 minutes >> de NTP, --hctosys definira l'heure de facon incorrecte en incluant la compensation de derive. La compensation de derive peut etre inhibee en definissant le facteur de derive a zero dans /etc/adjtime. Ce reglage sera persistant tant que l'option --update-drift n'est pas utilisee avec --systohc a l'arret (ou n'importe quand). Une autre facon d'inhiber cela est d'utiliser l'option --noadjfile en appelant la fonction --hctosys. Une troisieme methode est d'effacer le fichier /etc/adjtime. hwclock utilisera alors UTC par defaut pour l'horloge materielle. Si l'horloge materielle est a l'heure locale, elle devra etre definie dans le fichier. Cela peut etre fait en appelant hwclock\ --localtime\ --adjust ; quand le fichier n'est pas present, cette commande n'ajustera pas vraiment l'horloge, mais creera le fichier avec l'heure locale configuree et un facteur de derive a zero. Une condition sous laquelle l'inhibition de correction de derive de hwclock peut etre utile est lorsque plusieurs systemes sont utilises en multiboot. Pendant que cette instance de Linux est arretee, si un autre systeme d'exploitation modifie la valeur de l'horloge materielle, la correction de derive appliquee sera incorrecte quand cette instance redemarrera. Pour que la correction de derive de hwclock fonctionne correctement, rien ne doit modifier l'horloge materielle pendant que son instance de Linux n'est pas en fonctionnement. --set Mettre l'horloge materielle a l'heure donnee par l'option --date et mettre a jour les horodatages dans /etc/adjtime. Avec l'option --update-drift, recalculer le facteur de derive. A essayer sans cette option si --set echoue. Consulter --update-drift ci-apres. --systz C'est une alternative a la fonction --hctosys qui ne lit pas l'horloge materielle et n'ajuste pas l'horloge systeme ; par consequent, aucune correction de derive n'est effectuee. Elle est concue pour etre utilisee dans un script de demarrage sur les systemes avec des noyaux de version superieure a 2.6 ou l'horloge systeme a ete ajustee depuis l'horloge materielle par le noyau lors du demarrage. Elle procede aux actions suivantes qui sont detaillees ci-dessus dans la fonction --hctosys : o correction du fuseau horaire de l'horloge materielle en UTC si necessaire. Seulement, au lieu d'accomplir cela en reglant l'horloge systeme, hwclock informe simplement le noyau qui se charge de la modification ; o activation du << mode 11 minutes >> de NTP du noyau ; o definition du fuseau horaire du noyau. Les deux premieres actions ne sont disponibles que lors du premier appel de settimeofday(2) apres le demarrage. Par consequent, cette option n'a de sens que dans un script de demarrage. Si la configuration du fuseau horaire de l'horloge materielle est modifiee, un redemarrage serait necessaire pour informer le noyau. -w, --systohc Mettre l'horloge materielle a l'heure systeme et mettre a jour les horodatages dans /etc/adjtime. Avec l'option --update-drift, (re)calculer le facteur de derive. A essayer sans l'option si --systohc echoue. Consulter --update-drift ci-apres. --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-memoire puis quitter. -V, --version Afficher la version et quitter. OPTIONS --adjfile=fichier Remplacer le chemin de fichier par defaut /etc/adjtime. --date=chaine_date Cette option doit etre utilisee avec les fonctions --set ou --predict, autrement elle est ignoree. hwclock --set --date='16:45' hwclock --predict --date='2525-08-14 07:11:05' L'argument doit etre en heure locale, meme si l'horloge materielle est en UTC. Consultez l'option --localtime. Par consequent, l'argument ne doit pas comporter d'information de fuseau horaire. Il ne doit pas aussi etre en temps relatif, comme par exemple << +5 minutes >> car la precision de hwclock depend de la correlation entre la valeur de l'argument et le moment ou la touche Entree est pressee. Les secondes fractionnaires sont ecartees silencieusement. Cette option peut gerer beaucoup de formats de date et heure, mais les parametres precedents doivent etre respectes. --delay=secondes Cette option peut etre utilisee pour surcharger le delai utilise en interne lors du reglage de l'horloge. La valeur par defaut est 0,5s (500 ms) pour rtc_cmos, pour d'autres types d'horloge temps reel le delai est zero. Si le type d'horloge temps reel est impossible a determiner (a partir de sysfs), alors la valeur par defaut est 0,5 pour etre retrocompatible. 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 obsolete et pourrait etre redefinie ou supprimee 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 a hwclock d'utiliser des instructions d'entree et sortie explicites pour acceder a l'horloge materielle. Sans cette option, hwclock essaiera d'utiliser le fichier de peripherique rtc, suppose etre pilote par le pilote de peripherique RTC. Depuis la version 2.26, --directisa n'est plus automatiquement utilise quand le pilote rtc n'est pas disponible. Cela provoquait une condition non securisee qui pouvait permettre a deux processus d'acceder a l'horloge materielle en meme temps. L'acces direct au materiel depuis l'espace utilisateur ne devrait etre utilise que pour des essais, du depannage ou en dernier recours apres l'echec de toutes les autres methodes. Consultez l'option --rtc. --epoch=annee Cette option est necessaire lors de l'utilisation de la fonction --setepoch. La valeur minimale de annee est 1900. Celle maximale depend du systeme (ULONG_MAX\ -\ 1). -f, --rtc=fichier Remplacer le nom de fichier du peripherique rtc par defaut de hwclock. Sinon, le premier trouve sera utilise, 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 utilise par l'horloge materielle. L'horloge materielle peut etre configuree pour utiliser soit UTC, soit le fuseau horaire local, mais rien n'indique dans l'horloge elle-meme l'alternative utilisee. Les options --localtime et --utc indiquent cela a la commande hwclock. Si vous indiquez la mauvaise information (ou n'en indiquez aucune et que la valeur par defaut est incorrecte), a la fois le reglage et la lecture de l'horloge materielle seront incorrectes. Si vous n'indiquez ni --utc ni --localtime, la valeur utilisee la derniere fois avec une fonction de definition (--set, --systohc ou --adjust), comme sauvegardee dans /etc/adjtime, sera utilisee. Si le fichier d'ajustement n'existe pas, UTC est choisie. Remarque : les modifications d'heure d'ete peuvent etre incoherentes quand l'horloge materielle est gardee 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'ecrira dans ce fichier. L'option --utc ou --localtime doit obligatoirement etre indiquee avec cette option. --test Ne pas vraiment faire de modification sur le systeme, c'est-a-dire ni sur les horloges ni sur /etc/adjtime (--verbose> est implicite avec cette option). --update-drift Mettre a jour le coefficient de derive de l'horloge materielle dans /etc/adjtime. Ce ne peut etre utilise qu'avec --set ou --systohc. Une periode minimale de quatre heures entre les reglages est necessaire. Cela permet d'eviter des calculs incorrects. Plus la periode est longue, plus le facteur de derive resultant est precis. Cette option a ete ajoutee a la version 2.26, parce que les systemes appellent souvent hwclock\ --systohc lors de l'arret ; avec l'ancien comportement, cela forcait le (re)calcul du facteur de derive, avec pour consequence les problemes suivants : o lors de l'utilisation de NTP avec un noyau en << mode 11 minutes >>, le facteur de derive etait ecrase par une valeur quasiment nulle ; o cela ne permettait pas d'utiliser la correction de derive << a froid >>. Avec la plupart des configurations, l'utilisation de la derive << a froid >> donnera des resultats favorables. A froid signifie quand la machine est eteinte, ce qui peut avoir un impact significatif sur le facteur de derive ; o le (re)calcul du facteur de derive a chaque arret entraine des resultats suboptimaux. Par exemple, si des conditions ephemeres rendent la machine anormalement chaude, le calcul du facteur de derive serait hors limites ; o augmentation significative du temps d'arret du systeme (depuis la version v2.31 lorsque --update-drift n'est pas utilise, l'horloge temps reel n'est pas lue). Laisser hwclock calculer le facteur de derive est un bon point de depart, mais pour des resultats optimaux, il faudra probablement l'ajuster directement en editant le fichier /etc/adjtime. Pour la plupart des configurations, une fois qu'un facteur de derive optimal est mis en place, ce n'est plus la peine de le modifier. Ainsi, le comportement precedent de (re)calculer la derive a ete modifie, et cette option est necessaire pour la retablir. Consultez la discussion ci-dessous dans La fonction d'ajustement. Cette option necessite de lire l'horloge materielle avant de la regler. Si elle ne peut etre lue, cela conduit a l'echec des fonctions de reglage. Cela peut se produire, par exemple, si l'horloge materielle est corrompue a cause d'un probleme d'alimentation electrique. Dans ce cas, l'horloge doit d'abord etre reglee sans cette option. Bien qu'il ne soit pas en fonctionnement, le facteur de correction de derive ne serait pas valable de toute facon. -v, --verbose Afficher plus de details sur ce que realise hwclock en interne. NOTES Horloges dans un systeme 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 systeme compatible ISA, l'horloge est definie dans la norme ISA. Un programme de controle ne peut lire ou ajuster l'heure qu'a la seconde, mais il peut egalement detecter les pentes des tics de seconde de l'horloge, de ce fait, l'horloge a virtuellement une precision infinie. Cette horloge est communement appelee l'horloge materielle (<< hardware clock >>), l'horloge temps reel, le RTC, l'horloge BIOS ou l'horloge CMOS. La designation horloge materielle a ete inventee pour etre utilisee avec hwclock. Le noyau Linux y fait reference sous le nom d'horloge persistante. Certains systemes non ISA ont plusieurs horloges temps reel, mais une seule avec sa propre source d'energie. Un composant externe, sur I2C ou SPI, consommant tres peu, peut etre utilise avec une batterie de secours comme horloge materielle afin d'initialiser une horloge temps reel integree plus fonctionnelle, utilisee 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 systeme donne l'heure importante. Le but essentiel de l'horloge materielle est de garder l'heure lorsque Linux ne fonctionne pas afin de pourvoir initialiser l'heure systeme au demarrage. Remarquez qu'avec DOS, pour qui ISA a ete concu, l'horloge materielle est la seule horloge temps reel. L'heure systeme ne doit surtout pas subir de discontinuite comme lorsque le programme date(1) est utilise pour la modifier pendant le fonctionnement du systeme. Vous pouvez, cependant, faire tout ce que vous voulez sur l'horloge materielle pendant le fonctionnement, la prochaine fois que Linux demarrera, il prendra en compte la nouvelle heure de l'horloge materielle. Remarque : ce n'est actuellement pas possible sur la plupart des systemes car hwclock --systohc est appelee lors de l'arret. Le fuseau horaire du noyau Linux est defini par hwclock. Cependant, ne vous trompez pas -- pratiquement personne ne se preoccupe 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 methode plus traditionnelle afin de le determiner. Ils utilisent la variable d'environnement TZ ou le fichier /etc/localtime, comme explique dans la page de manuel de tzset(3). Cependant, certains programmes et certaines parties du noyau Linux comme les systemes de fichiers utilisent la valeur de fuseau horaire du noyau. Un exemple est le systeme de fichiers 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. 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 materielle ne sera pas reglee correctement par le << mode 11 minutes >>. Consultez la discussion ci-dessous, sous Synchronisation automatique de l'horloge materielle 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 compose de deux parties : 1) un champ tz_minuteswest indiquant le nombre de minutes (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 utilise localement a l'heure actuelle. Ce second champ n'est jamais utilise sous Linux et est toujours nul. Consultez egalement settimeofday(2). Methodes d'acces a l'horloge materielle 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 methode n'est pas toujours disponible sur les anciens systemes ne disposant pas de pilote rtc. Sur ces systemes, la methode d'acces a l'horloge materielle depend de la machine. Sur un systeme compatible ISA, hwclock peut acceder directement aux registres de la memoire du CMOS qui constituent l'horloge, en effectuant des operations d'E/S sur les ports 0x70 et 0x71. hwclock effectue cela avec de veritables instructions d'E/S et doit donc etre execute avec des droits de superutilisateur. Cette methode peut etre utilisee en indiquant l'option --directisa. 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 pour permettre de faire des essais ou du depannage et parce que cela pourrait etre la seule methode disponible sur les systemes compatibles ISA ne disposant pas d'un pilote fonctionnel de peripherique rtc. La fonction d'ajustement L'horloge materielle n'est generalement pas tres precise. Cependant, la plupart de ces imprecisions sont previsibles. Elle gagne ou perd la meme duree chaque jour. C'est la derive systematique. La fonction --adjust de hwclock permet d'appliquer des corrections de derive systematique a l'horloge materielle. Cela fonctionne de la facon suivante : hwclock utilise un fichier, /etc/adjtime, qui conserve des informations historiques. C'est le fichier d'ajustement (adjtime). Supposons un demarrage sans fichier d'ajustement. La commande hwclock --set regle l'horloge materielle a l'heure actuelle. hwclock cree le fichier d'ajustement et y sauvegarde l'heure actuelle en tant que dernier moment d'etalonnage. Cinq jours plus tard, l'horloge a gagne 10 secondes, la commande hwclock --set --update-drift corrige alors l'heure. hwclock met a jour le fichier d'ajustement avec l'heure actuelle en tant que dernier moment d'etalonnage, et enregistre une derive systematique 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 ete fait pendant un jour. Par consequent, 2 secondes sont enlevees de l'horloge materielle. L'heure actuelle est alors enregistree en tant que dernier moment d'etalonnage. 24 heures apres, la commande hwclock --adjust effectuera exactement la meme operation. Quand l'option --update-drift est utilisee avec --set ou --systohc, le taux de derive systematique est (re)calcule en comparant l'heure materielle actuelle avec correction de derive a la nouvelle heure de reglage. En est deduit le taux de derive sur 24 heures a partir du dernier horodatage de calibration du fichier d'ajustement. Ce facteur de derive mis a jour est sauve dans /etc/adjtime. Une petite erreur est introduite quand l'horloge materielle est definie, de telle sorte que --adjust evite de faire un ajustement de moins d'une seconde. Plus tard, lors d'une redemande d'ajustement, la derive accumulee sera superieure a une seconde et --adjust fera l'ajustement meme 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 Meme s'il garde ce nom pour des raisons historiques, il contient en fait d'autres informations utilisees par hwclock d'un appel a l'autre. Le format du fichier d'ajustement, en ASCII, est le suivant : Ligne 1 : trois nombres, separes par des espaces : 1) le taux de derive systematique en seconde par jour, nombre decimal flottant ; 2) le nombre de secondes ecoulees entre 1969 UTC et la date du dernier etalonnage, entier decimal ; 3) zero (pour une compatibilite avec clock(8)) en tant que nombre decimal flottant. Ligne 2 : un nombre : le nombre de secondes ecoulees entre 1969 UTC et le dernier etalonnage. Zero s'il n'y a pas eu d'etalonnage ou si un des derniers etalonnages est discutable (par exemple, si l'horloge materielle, depuis cet etalonnage, est erronee). C'est un entier decimal. Ligne 3 : << UTC >> ou << LOCAL >>. Indique si l'horloge materielle 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 materielle par le noyau Vous devez etre au courant d'un autre moyen utilise pour garder l'horloge materielle synchronisee sur certains systemes. Le noyau Linux possede un mode qui copie l'heure systeme vers l'horloge materielle toutes les 11 minutes. Ce mode est une option au moment de la compilation, aussi tous les noyaux n'ont pas cette possibilite. Il est pratique de l'utiliser quand un moyen sophistique comme NTP garde l'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 le systeme, consultez la RFC 1305). Si le noyau est compile avec l'option << mode 11 minutes >>, il sera actif quand la discipline de l'horloge du noyau est dans l'etat synchronise. Dans cet etat, le bit 6 (le bit regle dans le masque 0x0040) de la variable time_status du noyau n'est pas defini. Cette valeur est produite comme ligne << status >> des commandes adjtimex\ --print ou ntptime. Il agit de maniere externe, comme le demon NTP pour mettre la discipline de l'horloge du noyau dans l'etat synchronise et, par consequent, active le << mode 11 minutes >>. Il peut etre desactive en executant n'importe quelle commande, y compris hwclock --hctosys qui ajuste l'horloge systeme de maniere classique. Cependant, si le demon NTP est toujours actif, il reactivera le << mode 11 minutes >> la prochaine fois qu'il synchronisera l'horloge systeme. Si le << mode 11 minutes >> est active sur le systeme, l'utilisation de --hctosys ou --systz risque d'etre necessaire dans un script de demarrage, en particulier si l'horloge materielle est configuree pour utiliser le fuseau horaire local. A moins que le noyau ne soit informe du fuseau horaire utilise par l'horloge materielle, il risque de l'ecraser avec une heure incorrecte. Le noyau utilise UTC par defaut. La premiere commande en espace utilisateur pour definir l'horloge systeme informe le noyau du fuseau horaire utilise par l'horloge materielle. Cela ce fait par l'intermediaire de la variable persistent_clock_is_local du noyau. Si --hctosys ou --systz sont utilisees en premier, cette variable sera definie d'apres le fichier d'ajustement ou l'argument approprie en ligne de commande. Remarquez que lorsque cette capacite est utilisee et que le fuseau horaire de l'horloge materielle est modifie, un redemarrage est necessaire pour informer le noyau. hwclock --adjust should not be used with NTP '11 minute mode'. Valeur du siecle de l'horloge materielle ISA Une sorte de norme 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 materielle. L'ACPI fournit un moyen standard d'acceder au siecle quand le materiel le gere. CONFIGURATION DE DATE ET HEURE Garder l'heure sans synchronisation externe Cette discussion est basee sur les conditions suivantes. o Rien de ce qui fonctionne n'altere les date et heure des horloges, par exemple un demon NTP ou une tache reguliere (cron). o Le fuseau horaire du systeme est configure pour l'heure locale correcte. Consultez POSIX ou << RIGHT >> ci dessous. o Rapidement lors du demarrage, les commandes suivantes sont appelees dans cet ordre : adjtimex --tick valor --frequency valor hwclock --hctosys o Pendant l'arret, la commande suivante est appelee : hwclock --systohc o Les systemes sans adjtimex peuvent utiliser ntptime. Que la precision de l'heure soit maintenue avec le demon NTP ou pas, configurer le systeme pour qu'il reste a l'heure par lui-meme est utile. La premiere etape pour realiser cela est d'avoir une vision d'ensemble claire. Deux peripheriques materiels independants fonctionnent a leur propre rythme et divergent de l'heure << correcte >> a leur propre taux. Les methodes et programmes pour la correction de derive sont differents pour chaque peripherique. Cependant, la plupart des systemes sont configures pour echanger des valeurs entre ces deux horloges au demarrage et a l'arret. Desormais les heures de chaque peripherique, avec leurs propres erreurs, sont donc transferees de l'une a l'autre dans les deux sens. Si vous tentez de configurer une correction de derive pour une seule d'entre elles, la derive de l'autre l'ecrasera. Ce probleme peut etre evite en configurant la correction de derive pour l'horloge systeme et en evitant simplement d'arreter la machine. Cela, avec le fait que toute la precision de hwclock (y compris le calcul des facteurs de derive) depend de l'exactitude de la frequence de l'horloge systeme, signifie que la configuration de l'horloge systeme devrait etre la premiere etape. La derive de l'horloge systeme est corrigee avec les options --tick et --frequency d'adjtimex(8). Les deux fonctionnent ensemble, le tic est l'ajustement grossier alors que la frequence est l'ajustement fin (sur les systemes sans paquet adjtimex, ntptime\ -f ppm peut etre utilise a la place). Certaines distributions Linux essayent de calculer automatiquement la derive de l'horloge systeme avec l'operation de comparaison d'adjtimex. Essayer de corriger une horloge qui derive en utilisant comme reference une autre horloge qui derive 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 etre considere comme une amelioration face a l'absence de configuration, mais esperer un resultat optimal serait une erreur. Les options --log d'adjtimex s'averent etre une meilleure possibilite pour une configuration manuelle. Simplement suivre la derive de l'horloge systeme avec sntp, ou date\ -Ins par rapport a une horloge de precision, puis calculer soi-meme la correction, serait plus efficace. Apres la definition des valeurs de tic et de frequence, il faut continuer de tester et d'affiner les ajustements jusqu'a ce que l'horloge systeme garde l'heure correctement. Consultez adjtimex(2) pour plus de renseignements et l'exemple montrant un calcul manuel de derive. Une fois que l'horloge systeme est fiable, l'horloge materielle va pouvoir etre reglee. En regle generale, la derive a froid fonctionne bien dans la plupart des cas d'utilisation. Cela devrait meme etre vrai pour les machines fonctionnant vingt-quatre heures sur vingt-quatre et dont les temps d'arret usuels servent uniquement pour les redemarrages. Dans ce cas, la valeur du facteur de derive est peu differente, mais si la machine est arretee plus longtemps que d'habitude, la derive a froid devrait donner de meilleurs resultats. Steps to calculate cold drift: 1 Ensure that NTP daemon will not be launched at startup. 2 L'heure de l'horloge systeme doit etre exacte a l'arret!. 3 Arreter le systeme. 4 Laisser passer suffisamment de temps sans modifier l'horloge materielle. 5 Demarrer le systeme. 6 Utiliser hwclock immediatement pour regler l'heure correcte avec l'option --update-drift. Remarque : si l'etape six utilise --systohc, alors l'horloge systeme doit etre reglee correctement (etape 6a) juste avant. Laisser hwclock calculer le facteur de derive est un bon point de depart, mais pour obtenir des resultats optimaux, modifier directement le fichier /etc/adjtime sera probablement necessaire. Continuer de tester et affiner les ajustements jusqu'a ce que l'horloge materielle soit corrigee correctement au demarrage. Pour verifier cela, assurez-vous que l'heure systeme soit correcte avant l'arret puis utilisez sntp, ou date\ -Ins et une horloge de precision, immediatement apres le demarrage. LOCALE ou UTC Garder l'horloge materielle en heure locale provoque des resultats incoherents de changement d'heure d'ete. o Si Linux est en cours de fonctionnement au moment du changement d'heure, l'heure ecrite dans l'horloge materielle sera ajustee pour le changement. o Si Linux n'est pas en cours de fonctionnement au moment du changement d'heure, l'heure lue de l'horloge materielle ne sera pas ajustee pour le changement. L'horloge materielle sur un systeme compatible ISA ne garde que l'heure et la date, elle n'a pas de connaissance du fuseau horaire ni d'heure d'ete. Ainsi, quand hwclock est informee d'utiliser l'heure locale, elle considere l'horloge materielle en heure locale << correcte >> et ne fait pas d'ajustement de l'heure qui y est lue. Linux ne gere les changements d'heure d'ete de facon transparente que quand l'horloge materielle est gardee en UTC. Ce fonctionnement facilite le travail des administrateurs systeme car hwclock utilise l'heure locale en sortie et comme argument de l'option --date. Les systemes POSIX, comme Linux, sont concus pour avoir l'horloge systeme en heure UTC. Le but de l'horloge materielle est d'initialiser l'horloge systeme, donc la garder aussi en UTC est sense. Linux, cependant, essaye de s'adapter a l'horloge materielle en heure locale. C'est avant tout pour gerer le multiboot avec les plus anciennes versions de Microsoft Windows. Depuis Windows 7, la clef de registre RealTimeIsUniversal est supposee fonctionner correctement pour permettre de garder l'horloge materielle en UTC. POSIX ou << RIGHT >> Une discussion sur la configuration de date et d'heure serait incomplete sans parler de fuseaux horaires, c'est assez bien couvert par tzset(3). Une zone qui semble non documentee est le repertoire right de la base de donnees de fuseaux horaires, parfois appele << tz >> ou << zoneinfo >>. Deux bases de donnees distinctes existent dans le systeme zoneinfo : posix et right. Le repertoire right (maintenant appele zoneinfo-leaps, secondes intercalaires de zoneinfo>) contient les secondes intercalaires alors que _posix ne les contient pas. Pour utiliser la base de donnees right, l'horloge systeme doit etre configuree en (UTC + secondes intercalaires), ce qui est equivalent a (TAI - 10). Cela permet de calculer le nombre exact de secondes entre deux dates ayant une seconde intercalaire entre elles. L'horloge systeme 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 consideree experimentale et est connue pour poser des problemes. Pour configurer un systeme a utiliser une base de donnees en particulier, tous les fichiers de son repertoire doivent etre copies a la racine de /usr/share/zoneinfo. Les fichiers ne sont jamais utilises directement des sous-repertoires posix ou right, par exemple TZ='right/America/Martinique'. Cette habitude etait devenue si repandue que le projet zoneinfo amont a restructure le systeme d'arborescence de fichiers en deplacant les sous-repertoires posix et right hors du repertoire zoneinfo et dans des repertoires adjacents : /usr/share/zoneinfo, /usr/share/zoneinfo-posix, /usr/share/zoneinfo-leaps Malheureusement, certaines distributions Linux replacent l'arborescence comme precedemment dans leurs paquets. Ainsi, le probleme des administrateurs systeme utilisant directement le repertoire right persiste. A cause de cela, le fuseau horaire du systeme est configure pour inclure les secondes intercalaires alors que la base de donnees de zoneinfo est encore configuree 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 a la racine du /usr/share/zoneinfo, puisque c'est ce qu'elle est censee faire. Ces fichiers excluent les secondes intercalaires, mais l'horloge systeme les inclut maintenant, avec pour consequence une conversion d'heure incorrecte. Tenter de melanger et de faire correspondre les fichiers de ces bases de donnees distinctes ne fonctionnera pas puisqu'elles necessitent chacune que l'horloge systeme utilise un fuseau horaire different. La base de donnees zoneinfo doit etre configuree pour utiliser soit posix, soit right, conformement a la description precedente ou en assignant un chemin de base de donnees a la variable TZDIR. CODE DE RETOUR Une des valeurs suivantes sera renvoyee. EXIT_SUCCESS (0 sur les systemes POSIX) Execution du programme reussie. EXIT_FAILURE (1 sur les systemes POSIX) L'operation a echoue ou la syntaxe de la commande etait inadequate. ENVIRONNEMENT TZ Si cette variable est definie, sa valeur prend le pas sur la valeur de fuseau horaire configuree sur le systeme. TZDIR Si cette variable est definie, sa valeur prend le pas sur le chemin du repertoire de base de donnees des fuseaux horaires configure sur le systeme. FICHIERS /etc/adjtime The configuration and state file for hwclock. See also adjtime_config(5). /etc/localtime Fichier de fuseau horaire du systeme /usr/share/zoneinfo/ Repertoire de la base de donnees de fuseaux horaires du systeme. Fichiers de peripherique pouvant etre essayes par hwclock pour un acces a l'horloge materielle : /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 Ecrit par Bryan Henderson , septembre 1996, base sur le travail effectue sur le programme clock(8) par Charles Hedrick, Rob Hooft et Harald Koenig. Veuillez vous referer au code source pour une histoire complete et les credits. SIGNALER DES BOGUES Pour signaler un bogue, utilisez le gestionnaire de bogues . DISPONIBILITE La commande hwclock fait partie du paquet util-linux, elle est disponible sur l'archive du noyau Linux . util-linux 2.41 2025-03-29 HWCLOCK(8)