Проблема
У меня та же проблема, и я не нашел хорошего решения. Вот что я нашел:
Проблема в том, что после возобновления системные и аппаратные часы на гостевой машине отличаются:
root @ guest: ~ # date; Hwclock
Сб 11 окт 13:09:38 UTC 2014
Сб 11 октября 13:10:42 2014 - 0,454380 секунд
На хосте они согласны
root @ four: ~ # дата; Hwclock
Сб 11 окт 13:11:35 UTC 2014
Сб 11 окт 13:11:36 2014 -1.000372 секунды
Решением было бы запустить hwclock --hctosys
гостя после его возобновления. Однако я не нашел способа сделать это с изменениями только в гостевой системе, так как гость не замечает, что она приостановлена и возобновлена.
Гостевой агент QEmu
Существует возможность запуска программного обеспечения под названием QEmu Guest Agent на госте и уведомления от хоста об обновлении часов гостевой системы с часов гостевого оборудования. Однако на странице упоминается, что гостевой агент делает хост и гостя уязвимыми для атак друг друга из-за проблем с анализатором JSON (по крайней мере, я считаю, что уязвимый код также запускается на хосте, я не уверен в этом ). В любом случае, вот как это настроить:
Настройте последовательный канал virtio для агента, как указано в вики libvirt (см. Также документацию по формату домена libvirt ).
После того, как последовательный канал станет доступным, установите и запустите гостевой агент QEmu. (Debian:. apt-get install --no-install-recommends qemu-guest-agent
)
Запустите смещение часов путем приостановки, ожидания и возобновления. Затем выполните следующую команду на хосте, чтобы исправить это: virsh qemu-agent-command backup '{"execute":"guest-set-time"}'
страница вики, которая использует, virsh qemu-agent-command
не поддерживается , но я не нашел другой команды, которая выполняет эту работу.
Я нашел две дискуссии об автоматизации в libvirt, призывающем к guest-set-time
возобновлению из suspend:
Тем не менее, ничего не было реализовано, насколько я мог видеть.
Я нашел информацию о том, как отправлять команды гостевому агенту на вики-сайте stoney-cloud.org .
Я также попытался установить tickpolicy="catchup"
в конфигурации таймера libvirt, но это не решило проблему.
NTP
Альтернативой использованию агента может быть использование демона ntp или периодический вызов ntpdate из задания cron. Я бы не рекомендовал последнее, так как это может привести к тому, что время уходит назад, что может запутать программы (например, сервер Dovecot IMAP не пытается обрабатывать время, идущее в обратном направлении, и может завершиться).
Я пробовал следующие ntp демоны:
openntpd : очень медленно корректирует время со скоростью около 2 секунд за 60 минут в моем тесте. Смещение по времени составило 120 секунд. Кроме того, openntpd выдает ошибку, если смещение по времени слишком велико и, в моем тесте, полностью не корректирует время в этом случае. Преимущества openntpd: Может работать как обычный пользователь в chroot.
chrony : исправляет временное смещение в 120 секунд за 30 минут в моем тесте. Chrony может быть настроен для работы в качестве обычного пользователя. поддержка chroot не реализована. Интервал опроса NTP-сервера можно настроить для каждого NTP-сервера.
systemd-timesyncd : исправляет смещение по времени на 120 секунд за 30 секунд в моем тесте. Работает как обычный пользователь по умолчанию. Однако интервал опроса NTP-серверов увеличивается до 2048 секунд, поэтому приостановка / возобновление не будет обнаруживаться в течение 34 минут после возобновления в худшем случае. Кажется, это не настраивается. Кроме того, я наблюдал, как timesyncd изменяет время назад, что вызывает те же проблемы, что и вызов ntpdate в cron (см. Выше).
хроника решает проблему. Openntpd не подходит, потому что его уровень коррекции слишком низок и, кажется, не настраивается. systemd-timesyncd также не решает проблему полностью, потому что интервал опроса не настраивается.
Я протестировал следующие версии Debian демонов NTP: openntpd 20080406p-10, chrony 1.30-1 и systemd 215-5 + b1.
libvirt поддерживает синхронизацию гостевого времени с 2015 года . На Debian Stretch и позже ищите опцию
SYNC_TIME
в/etc/default/libvirt-guests
:Вы можете проверить синхронизацию времени из хост-системы с помощью:
Эта команда должна вернуться
{"return":{}}
в случае успеха.источник
Я использую аналогичный способ для синхронизации времени после приостановки / возобновления виртуальной машины, но я думаю, что лучше попытаться угадать, что она должна синхронизироваться в правильном направлении и длиннее короткой разницы, которая может быть исправлена NTPD.
https://gist.github.com/jhrcz/7138803
PS. Новый журнал изменений Centos 6.7 говорит, что это может быть сделано автоматически только с источником часов kvm-clock.
источник