Windows: запретить синхронизацию времени по аппаратному источнику
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 06.06.24 03:12
Оценка:
У меня есть виртуальная машина QEMU-KVM с гостевой Windows 10, в которой иногда требуется установить дату на несколько лет назад и запустить некую длительную задачу, в течение которой дата должна оставаться в прошлом. Я отключаю интернет-синхронизацию, выставляю нужную дату и ожидаю, что оно будет держаться, пока я не верну всё обратно. Вместо этого в некий момент происходит сброс времени на текущую реальную дату. В журнале вижу событие, что "System time synchronized with the hardware clock. Process: '' (PID 4).". Проверка показала, что эта синхронизация происходит с периодичностью ровно в 1 час. Попытался проследить через Process Monitor, но ничего странного в этот момент не ловится. Ну то есть видно, что да, псевдо-процесс System в ожидаемый момент времени вдруг берёт и лезет в реестр в раздел настроек времени и часовых поясов и начинает что-то там читать (аналогичные действия выполняет cmd.exe, когда я запускаю там команду date для смены даты), но вот конкретного триггера этой деятельности я обнаружить не могу.

Смотрел в планировщик задач, там в разделе Time Synchronization две задачи: ForceSynchronizeTime с неизвестным кастомным обработчиком и SynchronizeTime, стартующая сервис w32time. Согласно колонке Last Run Time, ни та, ни другая в момент авто-синхронизации не запускались. На всякий случай задизейблил обе. Ожидаемо, не помогло.
Гуглил. Рекомендуют установить параметр RealTimeIsUniversal в реестре, включающий UTC-время в биосе вместо локального. Установил, не помогло.
Также на одном ресурсе видел предложение остановить гостевого агента Qemu; попробовал, не помогло.

Пока обхожусь костылём с фоновым процессом, ежесекундно мониторящим дату и переставляющим её обратно, если обнаруживает синхронизацию, а все операции в моём скрипте, зависящие от текущей даты, обернул в цикл-повтор при возникновении ошибки. Но это ужасно криво. Хотелось бы найти способ вообще избавиться от этого сброса даты. Куда ещё можно ткнуться?
Почему же, ё-моё, ты нигде не пишешь «ё»?
синхронизация времени
Re: Windows: запретить синхронизацию времени по аппаратному источнику
От: aik Австралия  
Дата: 06.06.24 03:48
Оценка: 6 (1) +1
Здравствуйте, CaptainFlint, Вы писали:

CF>Куда ещё можно ткнуться?


https://www.qemu.org/docs/master/system/invocation.html

-rtc [base=utc|localtime|datetime][,clock=host|rt|vm][,driftfix=none|slew]

Полно опций, неужто не работает?
Re[2]: Windows: запретить синхронизацию времени по аппаратному источнику
От: vsb Казахстан  
Дата: 06.06.24 03:56
Оценка:
Здравствуйте, aik, Вы писали:

CF>>Куда ещё можно ткнуться?


aik>https://www.qemu.org/docs/master/system/invocation.html


aik>-rtc [base=utc|localtime|datetime][,clock=host|rt|vm][,driftfix=none|slew]


aik>Полно опций, неужто не работает?


Должно работать, я так делал, всё отлично работало.
Re[2]: Windows: запретить синхронизацию времени по аппаратному источнику
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 06.06.24 11:30
Оценка:
Здравствуйте, aik, Вы писали:

aik>https://www.qemu.org/docs/master/system/invocation.html


aik>-rtc [base=utc|localtime|datetime][,clock=host|rt|vm][,driftfix=none|slew]


aik>Полно опций, неужто не работает?


Не совсем понимаю, при чём тут опции запуска? У меня смена даты выполняется изнутри гостя. Система может вообще не знать, что она виртуальная, ей просто надо выставить текущую дату назад, выполнить задачу, вернуть дату обратно. Всё это автоматизированно, в пределах одной сессии, без перезагрузки.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[3]: Windows: запретить синхронизацию времени по аппаратному источнику
От: aik Австралия  
Дата: 06.06.24 12:33
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

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


Мне показалось проблема что винда сама вытаскивает время из железа. Если ей подсунуть -rtc vm, она не сможет вернуть дату на место сама, а ты сможешь, из своего скрипта, вернуться к начальной дате.
Re[4]: Windows: запретить синхронизацию времени по аппаратному источнику
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 06.06.24 23:48
Оценка: 3 (1)
Здравствуйте, aik, Вы писали:

aik>Мне показалось проблема что винда сама вытаскивает время из железа. Если ей подсунуть -rtc vm, она не сможет вернуть дату на место сама, а ты сможешь, из своего скрипта, вернуться к начальной дате.


Ага, вроде, разобрался. Я думал, речь о подсовывании таймера со сдвинутым временем, а оказалось, опция отдаёт приоритет гостю на управление таймером. Кажется, это должно помочь, да. Пришлось, правда, расковырять по исходникам теги либвирта, чтобы понять, как заставить его передать именно такую опцию в командную строку qemu-kvm. Оказалось, это <timer name='rtc' track='guest'/>. Добавил, запустил — кажется, работает, не сбрасывает.

Спасибо!
Почему же, ё-моё, ты нигде не пишешь «ё»?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.