是否存在现有的机制,该机制可在线上使Linux系统与NTP同步,而在离线时与可预测的RTC同步?
我们操作远程“收集器”:嵌入式Linux系统,用于收集传感器数据并为其添加时间戳。我们需要他们的时钟误差保持在较小的水平,例如小于5秒。通常,我们使用NTP来同步他们的时钟,并且只要系统在线,就可以正常工作。
问题在于某些收集器的上行链路非常糟糕,可能会中断数小时,数天甚至数周。这不会停止本地数据收集,但是如果没有NTP,Linux系统时钟就会严重漂移并且非常不可预测。
OTOH,硬件的RTC漂移也很大,但速率恒定。RTC漂移率因板而异,但每块板都是恒定的,可以测量。
我想我们需要的是一种可以执行以下操作的机制:
- 部署前测量电路板的RTC漂移率
- 尽可能通过NTP不断/定期调整系统时间
- 当NTP不可用时,可以通过RTC定期调整系统时间。考虑已知的RTC漂移率。
- 可选:在线测量并记录正在进行的RTC漂移率(1)
所谓“机制”,是指一些维护良好且有据可查的软件和/或配置,可以处理“在线”与“离线”两种状态,确保系统时钟与正确的时间源(ntp与ntp)同步。 rtc),检测状态变化并校正RTC漂移。是否将其实现为特殊的ntpd配置/插件,作为单独的守护程序,作为cron作业还是其他无关紧要。
我看过Chrony,但是根据它的文档,它试图预测系统时钟的漂移,在我们的情况下,它的漂移远比RTC不可预测。Chrony似乎仅使用RTC来保持重启后的时间。
(1)注意ntpd激活内核的“ 11分钟模式”(每11分钟从系统时钟更新一次rtc)。当前的内核和ntpd似乎无法阻止11分钟模式。因此,在ntpd运行时,任何rtc漂移信息都会丢失(thx @billthor)。
更新/编辑:
- 我们正在考虑通过USB或串行接口为MSF或DCF77信号(我们位于欧洲)添加一个外部无线电时钟。但是我们宁愿保持硬件精益。
- 我们的收藏家通常位于室内,通常在地下室。因此,添加GPS时钟将无济于事。
- 我们使用Debian7。这意味着util-linux-2.20.1中的hwclock,ntpdate-4.2.6p5,ntp-4.2.6.p5中的ntpd,chrony-1.24(可能为1.30)。
- 请注意,我们的问题不在于我们不知道如何使用
ntpdate(8)
,hwclock(8)
,date(1)
等,请参阅附加部分斜体什么,我与“机制”的意思。 - 添加了有关“ 11分钟模式”的脚注
- 这是关于离线同步和RTC漂移的非常有趣的讨论