Czy istnieje istniejący mechanizm synchronizujący system linuksowy z NTP w trybie online oraz z przewidywalnym dryfowaniem RTC w trybie offline?
Obsługujemy zdalne „kolektory”: wbudowane systemy Linux, które zbierają i znaczniki czasowe danych czujnika. Potrzebujemy błędów zegara, aby pozostały na stosunkowo niskim poziomie, powiedzmy poniżej 5 sekund. Zwykle używamy NTP do synchronizowania ich zegarów, a to działa dobrze - dopóki system jest w trybie online.
Problem polega na tym, że niektóre kolektory mają bardzo złe łącza wysyłające, które mogą zejść na godziny, dni lub nawet tygodnie. To nie zatrzymuje lokalnego gromadzenia danych, ale bez NTP zegar systemowy w Linuksie dryfuje źle i dość nieprzewidywalnie.
OTOH, RTC sprzętu również mocno dryfuje, ale w stałym tempie. Szybkość dryfu RTC różni się w zależności od deski, ale jest stała dla każdej deski i może być mierzona.
Chyba potrzebujemy mechanizmu, który wykonuje następujące czynności:
- Zmierz współczynnik dryfu RTC tablicy przed jej wdrożeniem
- Dostosuj czas systemowy w sposób ciągły / regularnie za pośrednictwem NTP, jeśli to możliwe
- Regularnie dostosowuj czas systemowy z RTC, gdy NTP jest niedostępny. Weź pod uwagę znaną prędkość dryfu RTC.
- Opcjonalnie: Mierz i rejestruj współczynnik dryfu RTC trwający w trybie online (1)
Przez „mechanizm” mam na myśli dobrze utrzymane, udokumentowane oprogramowanie i / lub konfigurację, które mogą obsługiwać dwa stany „online” vs. „offline”, zapewnić synchronizację zegara systemowego z właściwym źródłem czasu (ntp vs. rtc), wykrywa zmianę stanu i poprawia dryf RTC. Nie ma większego znaczenia, czy jest on zaimplementowany jako specjalna konfiguracja / wtyczka ntpd, jako osobny demon, jako zadanie cron, czy też.
Spojrzałem na Chrony , ale zgodnie z jego dokumentacją próbuje przewidzieć dryf zegara systemowego , który w naszym przypadku dryfuje o wiele bardziej nieprzewidywalnie niż RTC. Wydaje się, że Chrony korzysta z RTC tylko po to, aby utrzymać czas podczas restartów.
(1) Uwaga: ntpd aktywuje „11-minutowy tryb” jądra (aktualizuj rtc z zegara systemowego co 11 minut). Wydaje się, że nie ma sposobu, aby obecne jądra i ntpd zapobiegły trybowi 11-minutowemu. Dlatego wszelkie informacje dotyczące dryfu rtc są tracone podczas działania ntpd (thx @billthor).
Aktualizacje / Edycje:
- Rozważamy dodanie zewnętrznego zegara radiowego dla sygnału MSF lub DCF77 (z siedzibą w Europie) przez USB lub szeregowy. Ale raczej staramy się, aby sprzęt był ubogi.
- Nasze kolektory znajdują się w pomieszczeniach, często w piwnicy. Dodanie zegarów GPS nie pomoże.
- Używamy Debiana 7. To oznacza hwclock z util-linux-2.20.1, ntpdate-4.2.6p5, ntpd z ntp-4.2.6.p5, chrony-1.24 (potencjalnie 1.30).
- Należy pamiętać, że naszym problemem nie jest to, że nie wiemy, jak używać
ntpdate(8)
,hwclock(8)
,date(1)
, itd. Proszę zobaczyć dodatkową sekcję kursywą o co mi chodzi z „mechanizmem”. - Dodano przypis dotyczący trybu „11 minut”
- Oto bardzo interesująca dyskusja na temat synchronizacji offline i dryfu RTC