У меня есть Windows 7 и два компьютера Linux (Ubuntu 16.04) (W1, L1 и L2), подключенные через WiFi - проводное подключение, к сожалению, невозможно. Компьютеры Linux работают в хронологическом режиме для синхронизации времени, L1 установлен в качестве источника на L2, что прекрасно работает. Часы должны быть как можно ближе друг к другу, смещение в 50 мсек уже может вызвать проблемы. Но для систем Linux, использующих chrony, это не проблема. Теперь мне также нужно синхронизировать время на W1 с L1, и, к сожалению, для Windows нет хронологии. Поэтому я взял этот сценарий здесь с IP-адресом L1 как равноправный: https://gist.github.com/thedom85/dbeb58627adfb3d5c3af Единовременная синхронизация работает, но есть некоторые недостатки:
- Наиболее проблематичным является то, что время в системе Windows отходит от времени Linux довольно быстро. В среднем дрейф составляет примерно 1 с на 10 минут. Простое решение - частая повторная синхронизация часов - не работает из-за проблем 2 и 3
- В системе Windows синхронизация завершается успешно только в том случае, если есть основной временной сдвиг для мастера времени. Если это всего лишь несколько секунд, синхронизация не происходит.
- В системе Windows синхронизация применяется только после запуска сценария, затем отключения от WiFi и повторного подключения. Часы подскакивают в тот момент, когда соединение устанавливается снова.
Есть ли способы решить эти проблемы или есть лучшие подходы? К сожалению, я не могу просто направить все часы на некоторые высокоточные интернет-серверы времени или GPS, так как по крайней мере система Windows никогда не подключена к Интернету, а системы Linux также не могут полагаться на свое интернет-соединение. Сначала я подумал, что проблема 1 может быть вызвана хронированием, управляющим часами L1, но деактивация хронии после начальной синхронизации, похоже, не влияет на эту проблему.
Вот несколько фотографий, показывающих проблему. W1 постоянно отправляет сообщения в L2 с текущим временем L1, L2 добавляет свою временную метку по прибытии, и график показывает разницу между обеими временными метками, наблюдаемую L2.
РЕДАКТИРОВАТЬ: L1 и L2 оба от батареи - оба от одного и того же источника. Поскольку за RTC должна отвечать только батарея CMOS, я не думаю, что это может вызвать какие-либо проблемы. Однако оказалось, что это так. Питание этих компьютеров от сети переменного тока (например, AC -> преобразователь AC/DC -> компьютер вместо батареи -> преобразователь DC/DC -> компьютер) значительно уменьшает дрейф. Но это все еще не достаточно хорошо:
РЕДАКТИРОВАТЬ 2: Решение / Обходной путь Я отключил дрянную службу времени Windows (w32time) и вместо этого установил порт программы Linux NTP . С довольно агрессивными настройками частоты опроса это работает нормально: