Esiste un meccanismo esistente che sincronizza un sistema linux con NTP mentre è online e con un RTC alla deriva prevedibilmente mentre è offline?
Operiamo "collettori" remoti: sistemi Linux incorporati che raccolgono e timestamp i dati dei sensori. Abbiamo bisogno che i loro errori di clock rimangano ragionevolmente piccoli, diciamo sotto 5 secondi. Di solito utilizziamo NTP per sincronizzare i loro orologi, e questo funziona benissimo, purché il sistema sia online.
Il problema è che alcuni collezionisti hanno uplink pessimi che possono andare giù per ore, giorni o addirittura settimane. Ciò non impedisce la raccolta di dati locali, ma senza NTP, l'orologio del sistema Linux si sposta in modo errato e abbastanza imprevedibile.
OTOH, anche l'RTC dell'hardware va alla deriva pesantemente, ma a un ritmo costante. La velocità di deriva RTC varia da scheda a scheda, ma è costante per scheda e può essere misurata.
Immagino che ciò di cui abbiamo bisogno sia un meccanismo che faccia quanto segue:
- Misurare il tasso di deriva RTC di una scheda prima del suo spiegamento
- Regola l'ora di sistema in corso / regolarmente via NTP quando possibile
- Regola regolarmente l'ora di sistema da RTC quando l'NTP non è disponibile. Tenere conto del tasso di deriva RTC noto.
- Opzionale: misurare e registrare la velocità di deriva RTC in corso mentre si è online (1)
Con "meccanismo" intendo un software ben documentato e / o una configurazione ben documentata in grado di gestire i due stati "online" anziché "offline", assicurarsi che l'orologio di sistema sia sincronizzato con l'origine temporale corretta (ntp vs. rtc), rileva il cambio di stato e corregge la deriva RTC. Non importa se viene implementato come speciale configurazione / plug-in ntpd, come demone separato, cron job o altro.
Ho dato un'occhiata a Chrony , ma secondo la sua documentazione cerca di prevedere la deriva dell'orologio di sistema , che nel nostro caso va alla deriva molto più imprevedibilmente dell'RTC. Chrony sembra utilizzare RTC solo per mantenere il tempo durante i riavvii.
(1) Nota ntpd attiva la '11 -minute mode 'del kernel (aggiorna rtc dall'orologio di sistema ogni 11 minuti). Sembra che non ci siano modi con i kernel attuali e ntpd per impedire la modalità 11 minuti. Pertanto, qualsiasi informazione di deriva rtc viene persa mentre ntpd è in esecuzione (thx @billthor).
Aggiornamenti / Modifiche:
- Stiamo valutando di aggiungere un orologio radio esterno per il segnale MSF o DCF77 (basato in Europa) tramite USB o seriale. Ma preferiamo mantenere l'hardware snello.
- I nostri collezionisti si trovano all'interno, spesso nel seminterrato. Quindi l'aggiunta di orologi GPS non aiuta.
- Usiamo Debian 7. Ciò significa che hwclock da util-linux-2.20.1, ntpdate-4.2.6p5, ntpd da ntp-4.2.6.p5, chrony-1.24 (potenzialmente 1.30).
- Nota che il nostro problema non è che non sappiamo come utilizzare
ntpdate(8)
,hwclock(8)
,date(1)
, ecc Si prega di consultare la sezione aggiunta in corsivo su ciò che voglio dire con 'meccanismo'. - Aggiunta nota a piè di pagina sulla modalità '11 -minute '
- Ecco una discussione molto interessante sulla sincronizzazione offline e sulla deriva RTC