Проблема
У мене така ж проблема, і я не знайшов хорошого рішення. Ось що я знайшов:
Проблема полягає в тому, що після резюме, системний та апаратний годинник годин у гостя відрізняються:
root @ guest: ~ # дата; годинник
Сб 11 жовтня 13:09:38 UTC 2014
Сб 11 жовтня 13:10:42 2014 -0,454380 секунд
Про господаря вони погоджуються:
root @ four: ~ # дата; годинник
Сб 11 жовтня 13:11:35 UTC 2014
Сб 11 жовтня 13:11:36 2014 -1.000372 секунд
Рішенням було б запустити hwclock --hctosys
гостя після його відновлення. Однак я не знайшов способу зробити це лише із змінами в гостьовій системі, оскільки гість не помічає, що це призупинено та відновлено.
QEmu Guest Agent
Існує можливість запустити програмне забезпечення під назвою QEmu Guest Agent для гостя та сповістити від хоста про оновлення годинника гостьової системи з годинникового апаратного годинника гостя. Однак на сторінці згадується, що гостьовий агент робить хоста і гостя вразливими для атак один на одного через проблеми з аналізатором JSON (принаймні, я вважаю, що порушений код також працює на хості, я не впевнений у цьому ). У будь-якому випадку, ось як це налаштувати:
Налаштуйте послідовний канал virtio для агента, як зазначено у wiki wiki libvirt (див. Також документацію щодо формату домену libvirt ).
Після того, як серійний канал буде доступний, встановіть та запустить гостьовий агент QEmu на гостях. (Debian:. apt-get install --no-install-recommends qemu-guest-agent
)
Увімкніть зсув годинника призупиненням, очікуванням та відновленням. Потім запустіть таку команду на хості, щоб її виправити: virsh qemu-agent-command backup '{"execute":"guest-set-time"}'
Сторінка wiki, що використовується, virsh qemu-agent-command
не підтримується , але я не знайшов жодної іншої команди, яка виконує цю роботу.
Я знайшов дві дискусії щодо автоматизації в рамках libvirt заклику до guest-set-time
резюме від призупинення:
Однак поки що нічого не було реалізовано, наскільки я міг бачити.
Я знайшов інформацію про те, як подати команди гостьовому агенту на вікі сайту 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 у кроні (див. Вище).
хронія вирішує проблему. Openntpd не підходить, оскільки його коефіцієнт виправлення занадто низький і, здається, не може бути налаштований. systemd-timesyncd також не повністю вирішує проблему, оскільки інтервал опитування не може бути налаштований.
Я протестував наступні версії Debian демонів NTP: openntpd 20080406p-10, chrony 1.30-1 та systemd 215-5 + b1.