Có một cơ chế hiện có đồng bộ hóa hệ thống linux với NTP khi trực tuyến và với RTC có thể dự đoán khi đang ngoại tuyến không?
Chúng tôi vận hành các "bộ thu" từ xa: các hệ thống nhúng Linux thu thập và đánh dấu thời gian dữ liệu cảm biến. Chúng tôi cần các lỗi đồng hồ của họ để ở mức nhỏ hợp lý, nói dưới 5 giây. Thông thường chúng tôi sử dụng NTP để đồng bộ hóa đồng hồ của họ và hoạt động tốt - miễn là hệ thống trực tuyến.
Vấn đề là một số nhà sưu tập có đường dẫn rất xấu có thể xuống hàng giờ, hàng ngày hoặc thậm chí vài tuần. Điều đó không dừng việc thu thập dữ liệu cục bộ, nhưng không có NTP, đồng hồ hệ thống Linux bị trôi dạt và khá khó lường.
OTOH, RTC của phần cứng cũng bị trôi rất nhiều, nhưng với tốc độ không đổi. Tốc độ trôi RTC thay đổi từ bảng này sang bảng khác, nhưng không đổi trên mỗi bảng và có thể đo được.
Tôi đoán những gì chúng ta cần là một cơ chế thực hiện như sau:
- Đo tốc độ trôi RTC của một bảng trước khi triển khai
- Điều chỉnh thời gian hệ thống liên tục / thường xuyên qua NTP khi có thể
- Điều chỉnh thời gian hệ thống thường xuyên từ RTC khi NTP không thể truy cập được. Hãy biết tỷ lệ trôi RTC được biết đến.
- Tùy chọn: Đo và ghi lại tốc độ trôi RTC đang diễn ra trong khi trực tuyến (1)
Với 'cơ chế', tôi có nghĩa là một số phần mềm và / hoặc cấu hình được bảo trì tốt, có thể xử lý hai trạng thái "trực tuyến" so với "ngoại tuyến", đảm bảo rằng đồng hồ hệ thống được đồng bộ hóa với nguồn thời gian chính xác (ntp vs. rtc), phát hiện sự thay đổi trạng thái và sửa lỗi cho sự trôi dạt RTC. Nó không quan trọng lắm cho dù nó được triển khai như một cấu hình / plugin đặc biệt ntpd, như một trình nền riêng biệt, như một công việc định kỳ, hoặc cách khác.
Tôi đã xem Chrony , nhưng theo tài liệu của nó, nó cố gắng dự đoán sự trôi dạt của đồng hồ hệ thống , trong trường hợp của chúng tôi trôi dạt khó lường hơn nhiều so với RTC. Chrony dường như chỉ sử dụng RTC để giữ thời gian cho các lần khởi động lại.
(1) Lưu ý ntpd kích hoạt chế độ '11 -minute 'của kernel (cập nhật rtc từ đồng hồ hệ thống cứ sau 11 phút). Dường như không có cách nào với các nhân và ntpd hiện tại để ngăn chặn chế độ 11 phút. Do đó, bất kỳ thông tin trôi dạt rtc nào bị mất trong khi ntpd đang chạy (thx @billthor).
Cập nhật / chỉnh sửa:
- Chúng tôi đang xem xét để thêm đồng hồ radio bên ngoài cho tín hiệu MSF hoặc DCF77 (chúng tôi có trụ sở tại Châu Âu) thông qua USB hoặc Nối tiếp. Nhưng chúng tôi thay vì giữ cho phần cứng nạc.
- Bộ sưu tập của chúng tôi được đặt trong nhà, thường ở tầng hầm. Vì vậy, thêm đồng hồ GPS sẽ không giúp đỡ.
- Chúng tôi sử dụng Debian 7. Điều đó có nghĩa là hwclock từ produc-linux-2.20.1, ntpdate-4.2.6p5, ntpd từ ntp-4.2.6.p5, chrony-1.24 (có khả năng 1.30).
- Lưu ý rằng vấn đề của chúng tôi không phải là chúng ta không biết làm thế nào để sử dụng
ntpdate(8)
,hwclock(8)
,date(1)
, vv Xin vui lòng xem phần bổ sung trong nghiêng về những gì tôi có nghĩa với 'cơ chế'. - Đã thêm chú thích về chế độ '11 -minute '
- Đây là một cuộc thảo luận rất thú vị về đồng bộ hóa ngoại tuyến và trôi dạt RTC