Si le décalage se produit alors que le système tourne, alors la pile n’y est pour rien.
Une machine d’architecture PC (x86, i386, amd64) a deux horloges :
- l’horloge matérielle ou “temps réel” (real-time clock, RTC) , avec une résolution à la seconde. Elle est alimentée par la pile quand la machine est hors tension. C’est elle qu’on règle dans le setup du BIOS. Elle ne sert qu’au démarrage du système pour récupérer la date et l’heure courantes. Elle n’est pas utilisée quand le système tourne ;
- l’horloge système, avec une résolution plus fine, à la milliseconde voire moins. Elle maintient la date et l’heure lorsque le système tourne. Au démarrage, le système l’initialise à partir de l’horloge matérielle. Ensuite elle peut être synchronisée ou recalée par NTP ou autre.
Ces deux horloges, produites par des oscillateurs à quartz, n’ont pas une précision parfaite, et elles dérivent dans le temps. Si La dérive se produit quand le système est arrêté, elle provient de l’horloge matérielle et peut augmenter si la pile est usée quand la machine est totalement hors tension (alimentation coupée). Si la dérive se produit quand le système tourne, elle provient de l’horloge système.
Ici une dérive de 7 minutes en 14 jours correspondrait à une précision de 350 ppm, c’est un peu élevé par rapport à la précision typique d’une horloge à quartz (de l’ordre de 50 à 100 ppm).
NTP (ntpd, ntpdate, chrony…) est un moyen simple de compenser ou d’ajuster la dérive de l’horloge système d’une machine connectée au réseau en la resynchronisant sur une source externe. Il y a aussi le paquet adjtimex qui permet d’ajuster l’horloge d’une machine isolée pour corriger sa dérive. J’ai observé que l’horloge matérielle, qui utilise un quartz de montre, avait plutôt tendance à moins dériver que l’horloge système.
Concernant le décalage d’une ou deux heures avec NTP, il pourrait être dû à une incohérence entre l’heure réglée et le fuseau horaire (timezone), par exemple UTC au lieu de CET/CEST.