суббота, 4 марта 2017 г.

Проблема с синхронизацией времени на Windows 7

Несмотря на моё скептическое отношение к семейству Windows, иногда приходится разбираться с некоторыми проблемами, которые могут иметь место в этой ОС.

При очередном включении домашнего компьютера под управлением Windows 7 мне поступила претензия в отсутствии Интернет. При этом браузер обращал внимание на то, что время на локальном компьютере отличается, а так как сертификаты ...

Короче говоря, весь сыр бор объяснялся тем, что в материнской плате "скисла" батарейка и система стала "жить" в 2008 году.

Так как новой батарейки под рукой, естественно, не оказалось, то стал вопрос о желательности синхронизации времени через Интернет после включения компьютера и загрузки операционной системы. Казалось бы, простая ситуация и её разрешение возможно в 2 клика мышкой, но нет – сюрприз.

Несмотря на правильные установки параметров времени, и даже назначение ближайшего сервера времени вместо, например, time.windows.com ситуация не изменилась. Время не синхронизировалось по причине сбоя синхронизации.

"Корень зла" содержится в том, что при расхождении времени между локальным компьютером и временем Интернет более чем в 15 часов служба синхронизации времени перестаёт осуществлять операцию коррекции имеющегося в системе времени на правильное.

Для решения этой проблемы в настройки Windows, содержащиеся в реестре, необходимо внести ряд изменений.

Перейдите в ветку реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config



Найдите MaxNegPhraseCorrection и MaxPosPhraseCorrection и установите им шестнадцатиричные значения ffffffff (буква f 8 раз подряд), которые являются максимально допустимыми.




Примечание. Первоначальными значениями являются 0x0000d2f0


На всякий случай, проверьте значение LargePhraseOffset


Выставьте интервал обновления, исходя из того, что в десятичном формате оно указывает количество секунд, по истечении которых будет произведено очередное обращение с серверу точного времени.

HCLM\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpClient



Найдите параметр SpecialPollInterval. Он как раз и определяет, с какой периодичностью клиент обращается к серверу точного времени. Значение параметра установлено в секундах.


Измените интервал в десятичной системе исчисления из расчёта:
1 минута = 60 секунд,
1 час = 60 минут = 3600 секунд,
1 сутки = 24 часа = 1440 минут = 86400 секунд.

На одном из ресурсов, посвящённом описанию механизма синхронизации времени в Windows, было отмечено, что если этот интервал меньше значения 14400 (240 минут = 4 часа), то сервер NTP может поставить IP-адрес в бан по причине большого числа запросов. Насколько это соответствует истине – мне не известно. Но шлюз на MikroTik по своему алгоритму проверяет соответствие своих часов по 4-6 раз за час.

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



В приведенном примере адрес сервера точного времени time.net.org. Такого сервера в действительности не существует, он является локальным сервером времени, расположенном на роутере MikroTik. Для своих нужд найдите ближайший к себе сервер точного времени.

Например, можно воспользоваться сведениями, указанными на http://www.ntp-servers.net, http://www.timeserver.ru, http://gladilov.org.ru/ntp

Упомянутые выше изменения в реестре Windows можно внести одним файлом c расширением reg. Создайте в блокноте файл с содержанием:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\w32Time\Config]
"MaxNegPhraseCorrection"=dword:ffffffff
"MaxPosPhraseCorrection"=dword:ffffffff

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\w32Time\Parameters]
"NtpServer"="time.net.org,0x01"

Сохраните его как, например, Timecorrect.reg  После этого его можно запустить и необходимые изменения будут записаны в реестр. Значение "NtpServer"="time.net.org,0x01" измените на своё (см. текст выше). Скачать этот файл.

Если Ваш брандмауэр работает в конфигурации очень высокой безопасности, то можете создать в нём разрешающие правила для входящих и исходящих подключений на протокол UDP порт 123.

Для коррекции времени можно использовать файл с расширением bat, содержание которого составляет строка: w32tm /resync  Этот файл bat должен быть запущен под правами администратора системы (запуск от имени администратора).

Создайте в блокноте текстовый файл с содержанием w32tm /resync и сохраните его как файл с расширением bat, например, timesync.bat

Но, как показала практика, и запуска этого файла оказалось мало. Командная строка выдала:
Обнаружена следующая ошибка: Служба не запущена (0x80070426)

Оказывается, служба времени в Windows 7 (в Windows XP было иначе) не будет отключаться только в том случае, если она была запущена вручную через окно "Службы" или с помощью кнопки синхронизации "Обновить сейчас" в окне "Время и дата".

Чтобы исправить эту ситуацию, в командной строке (с правами администратора), введите следующие команды:

1. net stop w32time – останавливаем службу времени, если запущена.
2. w32tm /debug /disable – отключаем режим отладки.
3. w32tm /unregister – удаляем регистрацию службы.
4. w32tm /register – снова регистрируем службу.
5. sc triggerinfo w32time start/networkon stop/networkoff – указываем запуск службы при подключении к сети и остановку при отключении от сети.

После команды 5 Вы должны увидеть:

[SC] ChangeServiceConfig2: успех

Перезагрузка.

Пробуем снова в командной строке с правами администратора запустить bat-файл с содержанием:

w32tm /resync
pause

Вторая строка pause необходима для того, чтобы увидеть результат выполнения команды w32tm /resync.


Так и хочется воскликнуть: боже мой, как всё запущено! А ведь исходя из описания службы можно подумать, что она, всё-таки, работает после старта системы, хотя и с задержкой:


Теперь возвращаюсь к вопросу коррекции времени. Так как служба времени будет стартовать только после появления сети (которая не совсем сразу появляется, а только после получения адреса IP), то саму коррекцию надо немного задержать.

Простым способом реализации запуска с задержкой после старта системы является ПО Startup delayer. Описание можно почитать здесь. По запросу в поисковике сразу найдётся большой выбор источников, с которых эту программу можно скачать.

Итак, в моём случае коррекция времени производится через 4 минуты и 15 секунд после старта системы.




А установленное время корректируется через каждый час:


Некоторые сведения, которые были использованы при разбирательстве с вопросом о синхронизации времени в Windows 7 Вы можете найти в приводимых выдержках с Интернет, которые опубликованы на этой странице.

P.S. Если не помогло, то гарантировано работает альтернативный синхронизатор времени.


1 комментарий:

  1. К сожалению, ничего не выходит. Хотя [SC] ChangeServiceConfig2: успех - присутствует. А запуск команды синхронизации на локальный ПК (через командную строку) даёт такой ответ: Синхронизация не выполнена, поскольку нет доступных данных о времени.

    ОтветитьУдалить