em um servidor centos 6.5 acabei de executar o ntp com:
service ntpd start
Ele fixou a hora do sistema, mas a hora do hardware ainda está errada. Isso é normal? Como posso consertar isso?
relatórios ntpstat:
unsynchronized
polling server every 64s
Responder1
Primeiro de tudo: o horário do hardware em um sistema Linux é armazenado em UTC, portanto, é esperado um deslocamento relacionado ao seu fuso horário. E sim, isso causa problemas durante a inicialização dupla.
Além disso, um sistema Linux nem sempre e imediatamente propagará o horário NTP para o RTC ("relógio de hardware"), mas deve fazê-lo pelo menos no desligamento.
Responder2
É possível que o NTP esteja realmente corrigindo a hora, mas lentamente. Normalmente faz isso para evitar que os programas se preocupem por terem passado N segundos em uma fração de segundo. Muitos programas usam o tempo para ordenar seu trabalho internamente.
Portanto, o relógio muda para aumentar ou diminuir os segundos apenas ligeiramente, digamos 0,1 segundo a cada segundo (ou até menos). Pode levar algum tempo para sincronizar os dois relógios.
Verifique a diferença horária e veja se ela diminui com o tempo.
Se a diferença persistir após um desligamento “ordenado” (ou seja, um desligamento, e não um desligamento do hardware), você deverá verificar se o sistema está programado corretamente. No meu sistema, isso é feito em um arquivo de comando executado no desligamento:
/etc/rc.d/rc.0 contém:
# Save the system time to the hardware clock using hwclock --systohc.
if [ -x /sbin/hwclock ]; then
# Check for a broken motherboard RTC clock (where ioports for rtc are
# unknown) to prevent hwclock causing a hang:
if ! grep -q -w rtc /proc/ioports ; then
CLOCK_OPT="--directisa"
fi
if grep -q "^UTC" /etc/hardwareclock 2> /dev/null ; then
echo "Saving system time to the hardware clock (UTC)."
/sbin/hwclock $CLOCK_OPT --utc --systohc
else
echo "Saving system time to the hardware clock (localtime)."
/sbin/hwclock $CLOCK_OPT --localtime --systohc
fi
fi
Você pode tentar o comando manualmente: sudo hwclock --systohc
. Se isso não funcionar, você pode ter um problema de hardware.
A importância de ter os dois relógios sincronizados? Depende de qual software você está executando. O relógio do hardware é usado para definir o sysclock na inicialização. Até que o NTP entre em ação, sua máquina usará esse tempo. Qualquer arquivo usado durante esse lapso é marcado com a hora incorreta. Isso pode ser importante para alguns...
Responder3
Como as respostas existentes ignoram o fato mais importante, estou lhe dizendo: o NTP ajusta orelógio do sistema(relógio de software). No entanto, ajustar o relógio do sistema no Linuxnãoajustar o relógio do hardware(Na verdade, eu escrevi um patch há cerca de 20 anos que corrige esse problema, mas nunca foi aceito).
O que os sistemas atuais normalmente fazem é atualizar o relógio do hardware a partir da hora do sistema durantelimpardesligamento ou em um trabalho periódico.
O problema com a atualização do relógio do hardware é que o kernel não sabe se o relógio do hardware está configurado para a hora local ou UTC, portanto, é necessário aplicar algum deslocamento desconhecido ao atualizar o relógio do hardware. A outra questão é que o Linux tinha algum código quebrado (não verifiquei nos últimos 20 anos) para atualizar os minutos e segundos do relógio do hardware a partir do relógio do sistema se este estiver marcado como "sincronizado".
O código antigo já foi:
* If we have an externally synchronized Linux clock, then update
* CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
* called as close as possible to 500 ms before the new second starts.
*/
if ((time_status & STA_UNSYNC) == 0 &&
xtime.tv_sec > last_rtc_update + 660 &&
xtime.tv_usec >= 500000 - ((unsigned) tick) / 2 &&
xtime.tv_usec <= 500000 + ((unsigned) tick) / 2) {
if (set_rtc_mmss(xtime.tv_sec) == 0)
last_rtc_update = xtime.tv_sec;
else
last_rtc_update = xtime.tv_sec - 600; /* do it again in 60 s */