Проблемы синхронизации времени между системами Linux и Windows

1

У меня есть 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 Единовременная синхронизация работает, но есть некоторые недостатки:

  1. Наиболее проблематичным является то, что время в системе Windows отходит от времени Linux довольно быстро. В среднем дрейф составляет примерно 1 с на 10 минут. Простое решение - частая повторная синхронизация часов - не работает из-за проблем 2 и 3
  2. В системе Windows синхронизация завершается успешно только в том случае, если есть основной временной сдвиг для мастера времени. Если это всего лишь несколько секунд, синхронизация не происходит.
  3. В системе Windows синхронизация применяется только после запуска сценария, затем отключения от WiFi и повторного подключения. Часы подскакивают в тот момент, когда соединение устанавливается снова.

Есть ли способы решить эти проблемы или есть лучшие подходы? К сожалению, я не могу просто направить все часы на некоторые высокоточные интернет-серверы синхронизации или время GPS, поскольку, по крайней мере, система Windows никогда не подключена к Интернету, а системы Linux также не могут полагаться на свое интернет-соединение. Сначала я подумал, что проблема 1 может быть вызвана хронированием, управляющим часами L1, но деактивация хронии после начальной синхронизации, похоже, не влияет на эту проблему.

Вот несколько фотографий, показывающих проблему. W1 постоянно отправляет сообщения в L2 с текущим временем L1, L2 добавляет свою временную метку по прибытии, и график показывает разницу между обеими временными метками, наблюдаемую L2. введите описание изображения здесь

РЕДАКТИРОВАТЬ: L1 и L2 оба от батареи - оба от одного и того же источника. Поскольку за RTC должна отвечать только батарея CMOS, я не думаю, что это может вызвать какие-либо проблемы. Однако оказалось, что это так. Питание этих компьютеров от сети переменного тока (таким образом, переменный ток -> преобразователь переменного тока в постоянный ток -> компьютер вместо батареи -> преобразователь постоянного тока -> компьютер) значительно уменьшает дрейф. Но это все еще недостаточно хорошо введите описание изображения здесь

РЕДАКТИРОВАТЬ 2: Решение / Обходной путь Я отключил дрянную службу времени Windows (w32time) и вместо этого установил порт программы Linux NTP . При довольно агрессивных настройках частоты опроса это работает нормально: введите описание изображения здесь

user3296542
источник
Спасибо за комментарий, я добавил версии ОС. К сожалению, это Windows 7. Я разместил его здесь, так как я нашел довольно много информации о синхронизации времени здесь в stackoverflow, но вы правы, это также подходит суперпользователю.
Вы говорите, что L2 использует L1 в качестве источника ntp, почему бы не сделать то же самое в Windows? Это просто regedit для этого, вы можете настроить его для синхронизации с любым сервером, который вы хотите? (Я не знаю, исправит ли это проблемы с синхронизацией, но, возможно, стоит попробовать.
djsmiley2k
Стандартный код синхронизации Windows NTP явно неадекватен, но вы должны быть в состоянии написать свой собственный клиент Windows NTP, который получает время от L1 и немедленно вызывает SetSystemTime()с полным разрешением в секунду. Поскольку вы изначально разместили на stackoverflow.com , я предполагаю, что вы сможете заниматься программированием.
AFH
Вы сказали, что компьютер с Windows никогда не подключен к Интернету, но я предполагаю, что он имеет подключение к локальной сети, поскольку вы пытаетесь использовать другой компьютер в качестве сервера времени. Находятся ли эти две машины в одной подсети, и можете ли вы пропинговать / устанавливать связь между машиной Windows и L1?
Насир Райли
Если это не виртуальные машины, дрейф в 1 секунду на 10 минут действительно плох! Возможно, вы захотите разобраться в причине этого.
мтак