A sincronização de tempo RTC não está funcionando (CONFIG_RTC_SYSTOHC)

5

Eu tenho a opção CONFIG_RTC_SYSTOHC ativada no meu kernel:

Device Drivers  --->
    [*] Real Time Clock  --->
        [*]   Set the RTC time based on NTP synchronization

A ajuda diz:

CONFIG_RTC_SYSTOHC:

If you say yes here, the system time (wall clock) will be stored in the RTC
specified by RTC_HCTOSYS_DEVICE approximately every 11 minutes if userspace
reports synchronized NTP status.

No entanto, o relógio do meu hardware não está sendo sincronizado. Eu tenho RTC_HCTOSYS_DEVICE definido corretamente:

CONFIG_RTC_HCTOSYS_DEVICE="rtc0"

A ajuda acima citada diz que a sincronização funciona se "se o espaço do usuário reportar o status do NTP sincronizado". O que isso significa? Eu estou usando ntpdate para sincronizar meu tempo regularmente (a cada 4 horas) usando o cron.

Como posso dizer ao meu sistema que sou ntp sincronizado e que quero que meu relógio de hardware seja sincronizado?

    
por Michael Boies 23.02.2015 / 16:42

3 respostas

3

Executar ntpdate de um cronjob ajustará a hora do sistema toda vez que for executado, mas isso não significa que seu sistema está "NTP sincronizado" (o relógio pode alternar entre as sincronizações periódicas) e o kernel não será automaticamente sincronizar o RTC.

Existe algum motivo específico pelo qual você está executando ntpdate de um cronjob em vez de executar ntpd ? ntpd manterá um tempo muito mais preciso, terá mais verificação de erros (para que um servidor de horário errôneo não cause caos para você) e disciplina a frequência de clock do sistema para compensar o desvio do oscilador.

Adicionalmente, ele irá reportar o "status sincronizado NTP" para o kernel, o qual irá então periodicamente configurar o hwclock.

Na página ntpdate man:

ntpdate can be run manually as necessary to set the host clock, or it can be run from the host startup script to set the clock at boot time. This is useful in some cases to set the clock initially before starting the NTP daemon ntpd. It is also possible to run ntpdate from a cron script. However, is important to note that ntpdate with contrived cron scripts is no substitute for the NTP daemon, which uses sophisticated algorithms to maximize accuracy and reliability while minimizing resource use. Finally, since ntpdate does not discipline the host clock frequency as does ntpd, the accuracy using ntpdate is limited.

Em geral, é melhor usar ntpd para manter seu relógio sincronizado, a menos que você tenha um motivo específico para isso (por exemplo, um sistema remoto ou isolado em que a transferência de dados é muito cara).

    
por 20.11.2015 / 15:34
2

Desde que você já tenha agendado o ntp time updates via ntpupdate , por que não adicionar apenas a sincronização de hardware para esse cron (ou fazer um segundo)? Eu usei esse mesmo método em alguns dos RHEL 3 & 4 caixas para manter seus relógios sincronizados.

0 */4 * * * ntpdate mytimeserver.com && ( hwclock --adjust; hwclock -w )

Este cron atualizará o clock do hardware para a hora do sistema se ntpdate for bem-sucedido. Mais informações sobre o hwclock commands .

Nota adicionada:

mytimeserver.com para mim é um vip interno com alguns servidores de tempo para redundância. Se você não tiver acesso à mesma coisa, deverá alterar o ntp server para diferentes pools ntp para que cada sistema não dependa de um e apenas um servidor ntp.

Servidor 1:

0 */4 * * * ntpdate 0.pool.ntp.org  && ( hwclock --adjust; hwclock -w )

Servidor 2:

0 */4 * * * ntpdate 1.pool.ntp.org  && ( hwclock --adjust; hwclock -w )
    
por 24.02.2015 / 20:00
1

ntpdate não desativa STA_UNSYNC flag quando ajustar a hora do sistema. Assim, o kernel acha que o tempo do sistema é inválido e não atualiza o RTC. Ele não limpa STA_UNSYNC porque usa adjtime() para definir a hora do sistema em vez de adjtimex() .

Para usar o recurso CONFIG_RTC_SYSTOHC , você precisa usar a ferramenta que limpa STA_UNSYNC flag, ou seja, ntpd .

Pode ser que o problema seja relatado para ntpdate desenvolvedores.

    
por 16.11.2016 / 11:46