El problema
Tengo el mismo problema y no he encontrado una buena solución. Esto es lo que encontré:
El problema es que después de reanudar, los tiempos de reloj del sistema y hardware en el invitado son diferentes:
root @ guest: ~ # fecha; hwclock
Sáb 11 oct 13:09:38 UTC 2014
Sáb 11 de octubre 13:10:42 2014 -0.454380 segundos
En el host, están de acuerdo:
raíz @ cuatro: ~ # fecha; hwclock
Sáb 11 de octubre 13:11:35 UTC 2014
Sáb 11 de octubre 13:11:36 2014 -1.000372 segundos
La solución sería ejecutar hwclock --hctosys
el invitado después de que se haya reanudado. Sin embargo, no he encontrado una manera de hacer esto solo con cambios en el sistema invitado, ya que el invitado no se da cuenta de que se suspende y se reanuda.
Agente invitado de QEmu
Existe la posibilidad de ejecutar un software llamado QEmu Guest Agent en el invitado y notificar desde el host para actualizar el reloj del sistema invitado desde el reloj de hardware invitado. Sin embargo, la página menciona que el agente invitado hace que el host y el invitado sean vulnerables a los ataques entre sí debido a problemas con un analizador JSON (al menos creo que el código afectado también se ejecuta en el host, no estoy seguro de eso ) De todos modos, aquí está cómo configurar eso:
Configure un canal serie virtio para el agente como se menciona en la wiki de libvirt (consulte también la documentación del formato de dominio de libvirt ).
Una vez que el canal en serie esté disponible, instale e inicie el QEmu Guest Agent en el invitado. (Debian:. apt-get install --no-install-recommends qemu-guest-agent
)
Dispare el reloj compensado suspendiendo, esperando y reanudando. Luego ejecute el siguiente comando en el host para corregirlo: virsh qemu-agent-command backup '{"execute":"guest-set-time"}'
la página wiki que usa novirsh qemu-agent-command
es compatible , pero no he encontrado ningún otro comando que haga el trabajo.
Encontré dos discusiones sobre la automatización dentro de libvirt de la llamada a guest-set-time
reanudar desde la suspensión:
Sin embargo, nada se ha implementado todavía por lo que pude ver.
Encontré información sobre cómo enviar comandos al agente invitado en wiki de stoney-cloud.org .
También intenté establecer tickpolicy="catchup"
la configuración del temporizador libvirt pero esto no resolvió el problema.
NTP
Una alternativa al uso del agente sería usar un demonio ntp o llamar periódicamente a ntpdate desde un trabajo cron. No recomendaría este último, ya que puede hacer que el tiempo retroceda, lo que puede confundir a los programas (por ejemplo, el servidor Dovecot IMAP no intenta manejar el tiempo que retrocede y puede terminar).
Probé los siguientes demonios ntp:
openntpd : corrige el tiempo muy lentamente a una velocidad de aproximadamente 2 segundos por 60 minutos en mi prueba. El tiempo de compensación fue de 120 segundos. Además, openntpd arroja un error si el desplazamiento de tiempo es demasiado grande y, en mi prueba, falla completamente en corregir el tiempo en ese caso. Ventajas de openntpd: puede ejecutarse como usuario normal en chroot.
chrony : corrige un desfase de 120 segundos en 30 minutos en mi prueba. chrony se puede configurar para ejecutarse como usuario normal. El soporte chroot no está implementado. El intervalo de sondeo del servidor NTP se puede configurar para cada servidor NTP.
systemd-timesyncd : corrige un desplazamiento de tiempo de 120 segundos en 30 segundos en mi prueba. Se ejecuta como usuario normal de forma predeterminada. Sin embargo, el intervalo de sondeo de los servidores NTP aumenta hasta 2048 segundos, por lo que no se detectaría una suspensión / reanudación hasta 34 minutos después de la reanudación en el peor de los casos. Esto no parece ser configurable. Además, he observado que timesyncd retrocede el tiempo, lo que causa los mismos problemas que llamar a ntpdate en un cron (ver arriba).
Chrony resuelve el problema. Openntpd no es adecuado porque su tasa de corrección es demasiado baja y no parece ser configurable. systemd-timesyncd tampoco resuelve completamente el problema, porque su intervalo de sondeo no es configurable.
Probé las siguientes versiones de Debian de los demonios NTP: openntpd 20080406p-10, chrony 1.30-1 y systemd 215-5 + b1.
libvirt admite sincronización de tiempo de invitado desde 2015 . En Debian Stretch y luego busque la opción
SYNC_TIME
en/etc/default/libvirt-guests
:Puede probar la sincronización horaria desde el sistema host con:
Este comando debería volver
{"return":{}}
al éxito.fuente
Utilizo una forma similar para sincronizar el tiempo después de suspender / reanudar VM, pero creo que es mejor tratar de adivinar, que debería sincronizarse en la dirección correcta y es más largo que una pequeña diferencia, que NTPD podría solucionar.
https://gist.github.com/jhrcz/7138803
PD. El nuevo registro de cambios de centos 6.7 dice que esto podría hacerse automáticamente con solo la fuente de reloj kvm-clock.
fuente