Apakah ada mekanisme yang ada yang menyinkronkan sistem linux dengan NTP saat online, dan dengan RTC yang diprediksi melayang saat offline?
Kami mengoperasikan "kolektor" jarak jauh: sistem Linux tertanam yang mengumpulkan dan stempel waktu data sensor. Kami membutuhkan kesalahan jam mereka untuk tetap cukup kecil, katakanlah di bawah 5 detik. Biasanya kami menggunakan NTP untuk menyinkronkan jam mereka, dan itu berfungsi dengan baik - selama sistem online.
Masalahnya adalah beberapa kolektor memiliki uplink yang sangat buruk yang dapat turun selama berjam-jam, berhari-hari atau bahkan berminggu-minggu. Itu tidak menghentikan pengumpulan data lokal, tetapi tanpa NTP, jam sistem Linux melayang dengan buruk dan sangat tidak terduga.
OTOH, RTC perangkat keras melayang juga, tetapi pada tingkat yang konstan. Tingkat drift RTC bervariasi dari satu papan ke papan, tetapi konstan per papan dan dapat diukur.
Saya kira yang kita butuhkan adalah mekanisme yang melakukan hal berikut:
- Ukur tingkat drift RTC dari papan sebelum penempatannya
- Sesuaikan waktu sistem yang sedang berlangsung / secara teratur melalui NTP bila memungkinkan
- Sesuaikan waktu sistem secara teratur dari RTC ketika NTP tidak dapat dihindari. Mempertimbangkan laju penyimpangan RTC yang diketahui.
- Opsional: Ukur dan catat laju drift RTC yang sedang berlangsung saat online (1)
Dengan 'mekanisme' yang saya maksudkan adalah beberapa perangkat lunak dan / atau konfigurasi terpelihara dengan baik yang didokumentasikan yang dapat menangani dua status "online" vs. "offline", memastikan bahwa jam sistem disinkronkan dengan sumber waktu yang benar (ntp vs. rtc), mendeteksi perubahan status, dan memperbaiki drift RTC. Tidak masalah apakah itu diterapkan sebagai konfigurasi / plugin ntpd khusus, sebagai daemon terpisah, sebagai tugas cron, atau yang lain.
Saya telah melihat Chrony , tetapi menurut dokumentasinya ia mencoba untuk memprediksi penyimpangan jam sistem , yang dalam kasus kami melayang jauh lebih tak terduga daripada RTC. Chrony tampaknya menggunakan RTC hanya untuk menjaga waktu di reboot.
(1) Catatan ntpd mengaktifkan '11-menit mode 'kernel (perbarui rtc dari jam sistem setiap 11 menit). Sepertinya tidak ada cara dengan kernel saat ini dan ntpd untuk mencegah mode 11 menit. Oleh karena itu, setiap informasi rtc drift hilang saat ntpd berjalan (thx @billthor).
Pembaruan / pengeditan:
- Kami sedang mempertimbangkan untuk menambahkan jam radio eksternal untuk sinyal MSF atau DCF77 (kami berbasis di Eropa) melalui USB atau Serial. Tapi kami lebih memilih perangkat keras tetap ramping.
- Kolektor kami berada di dalam ruangan, sering di ruang bawah tanah. Jadi menambahkan jam GPS tidak akan membantu.
- Kami menggunakan Debian 7. Itu berarti hwclock dari util-linux-2.20.1, ntpdate-4.2.6p5, ntpd dari ntp-4.2.6.p5, chrony-1.24 (berpotensi 1.30).
- Perhatikan bahwa masalah kita bukanlah bahwa kita tidak tahu bagaimana menggunakan
ntpdate(8)
,hwclock(8)
,date(1)
, dll Silakan lihat bagian ditambahkan dalam huruf miring tentang apa yang saya maksud dengan 'mekanisme'. - Menambahkan catatan kaki tentang '11-menit mode '
- Berikut ini diskusi yang sangat menarik tentang penyinkronan offline dan penyimpangan RTC