У меня есть физический хост (ноутбук) под управлением Windows 10 с установленным и включенным Hyper-V, и у меня возникла проблема: в довольно простой гостевой установке Debian 9 часы не обновляются после того, как хост на некоторое время переводится в спящий режим, а затем снова пробуждается (я предполагаю, что гостевая система приостанавливается вместе с хостом).
Насколько я понимаю, эта проблема должна быть легко решена службами интеграции Hyper-V, которыеявляютсявключено как в настройках виртуальной машины (все службы интеграции включены), так и в гостевой (все hv_*
модули загружены), и одна из служб синхронизирует время и следит за его актуальностью.
Итак, почему это не работает в моем случае? У меня не установлен NTP, и я не хочу его устанавливать, частично из принципа (чтобы устранить проблему с Hyper-V в частности), а частично потому, что гость должен работать без подключения к Интернету и удаленных хостовых служб. Мой хостовый часовой пояс явно настроен на UTC (я много перемещаюсь с ноутбуком и не хочу и не хочу статически связывать гостя с определенным часовым поясом), и TZ
вместо этого использую переменную по мере необходимости.
Я прочитал кучу страниц на Microsoft и несколько статей Altaro, которые показались мне очень информативными, но не смогли просветить меня по этому вопросу. Я также прочитал несколько ответов на сайтах Stack Exchange, где половина рекомендует использовать NTP, а другая половина в основном о чем-то другом или просто не дает желаемых советов.
Я понимаю, что, возможно, есть какой-то сигнал, который не срабатывает на госте, когда хост выходит из спящего режима (как это было бы, если бы вы перевели гостя в спящий режим с помощью ACPI, например), но разве это не должно быть решенной проблемой?
Какие неполадки и где я могу устранить, чтобы быть уверенным, что я могу надежно закрыть крышку ноутбука (перевести его в спящий режим) и вернуться к гостю с актуальной временной меткой?
решение1
Проверь это:https://github.com/clearlinux/distribution/issues/39
Рабочее решение — отключить все остальные службы времени и использовать chrony, а не настраивать только источник времени LIS hyperv ptp0.
Обеспечьте доступность источника времени LIS с помощью:
ls /sys/class/ptp
ptp0
cat /sys/class/ptp/ptp0/clock_name
hyperv
Теперь установите chrony для вашего дистрибутива и проверьте расположение конфигурации, затем создайте конфигурацию, соответствующую расположению вашего устройства ptp?.
/etc/chrony.conf:
refclock PHC /dev/ptp0 trust
makestep 1 -1
Это позволит chrony скорректировать системное время через источник hyperv ptp0 за один большой шаг.
Время опроса можно сократить до 4 секунд (степень 2) с помощью:
refclock PHC /dev/ptp0 trust poll 2
PS: Похоже, это ошибка/недосмотр в hyperv/LIS.