Чи існує механізм, який синхронізує систему Linux з NTP під час роботи в Інтернеті та з передбачуваним дрейфом RTC під час роботи в режимі офлайн?
Ми управляємо віддаленими "колекторами": вбудованими системами Linux, які збирають і датують датчики часових позначок. Нам потрібні помилки годинника, щоб вони залишалися досить маленькими, скажімо, нижче 5 секунд. Зазвичай ми використовуємо NTP для синхронізації їхніх годин, і це працює чудово - доки система не працює в Інтернеті.
Проблема полягає в тому, що деякі колектори мають дуже погані посилання, які можуть спускатися годинами, днями і навіть тижнями. Це не зупиняє локальний збір даних, але без NTP, системний годинник Linux рухається погано і зовсім непередбачувано.
Щодо іншого, RTC апаратних засобів також сильно рухається, але з постійною швидкістю. Швидкість дрейфу RTC змінюється від дошки до борту, але є постійною на борт і може бути виміряна.
Я думаю, що нам потрібен механізм, який робить наступне:
- Виміряйте швидкість дрейфу RTC плати до її розгортання
- Коли можливо, регулюйте системний час, що триває / регулярно через NTP
- Регулярно регулюйте системний час від RTC, коли НТП недоступний. Враховуйте відому швидкість руху RTC.
- Необов’язково: Виміряйте та запишіть швидкість руху RTC, що триває, під час роботи в Інтернеті (1)
Під "механізмом" я маю на увазі деякий доглянутий, задокументований фрагмент програмного забезпечення та / або конфігурацію, який може обробляти два стани "онлайн" проти "офлайн", переконайтесь, що системний годинник синхронізований з правильним джерелом часу (ntp vs. rtc), виявити зміну стану та виправити для дрейфу RTC. Не має великого значення, чи реалізована вона як спеціальна конфігурація / плагін ntpd, як окремий демон, як робота з cron тощо.
Я дивився на Chrony , але відповідно до його документації він намагається передбачити зміну системного годинника , який у нашому випадку переміщається набагато непередбачуваніше, ніж RTC. Chrony, здається, використовує RTC лише для того, щоб тримати час на перезавантаження.
(1) Примітка ntpd активує ядро "11-хвилинний режим" (оновлювати rtc від системного годинника кожні 11 хвилин). Здається, немає поточних ядер та ntpd для запобігання 11-хвилинного режиму. Тому будь-яка інформація про дрейф rtc втрачається під час запуску ntpd (thx @billthor).
Оновлення / редагування:
- Ми розглядаємо можливість додати зовнішній радіотехнічний годинник для сигналу MSF або DCF77 (ми базуємося в Європі) через USB або серійний. Але ми швидше тримаємо апаратне забезпечення.
- Наші колектори розташовані в приміщенні, часто в підвалі. Тож додавання GPS-годинників не допоможе.
- Ми використовуємо Debian 7. Це означає, що годинник від util-linux-2.20.1, ntpdate-4.2.6p5, ntpd від ntp-4.2.6.p5, chrony-1.24 (потенційно 1.30).
- Зверніть увагу , що наша проблема полягає не в тому , що ми не знаємо , як використовувати
ntpdate(8)
,hwclock(8)
,date(1)
і т.д. ласка , дивіться розділ додані в курсиві про те, що я маю в виду з «механізмом». - Додано виноску про режим '11 хвилини '
- Ось дуже цікава дискусія про офлайн-синхронізацію та дрейф RTC