Comment synchroniser correctement l'heure sous Linux en tant qu'invité virtuel après la reprise de l'hibernation par l'hôte?


19

J'utilise plusieurs boîtes virtuelles pour le développement et l'heure et la date correctes sont importantes pour moi lorsque je pousse les validations git. Je n'arrête pas mon hôte - il fonctionne pendant des mois sans redémarrer. Je ne l'hiberne que les nuits et les week-ends. Cela introduit un problème étrange sur mes systèmes d'exploitation invités (tous les debians de turnkeylinux.org) - après un certain temps, la date des systèmes d'exploitation invités est décalée de quelques jours.

Bien que tous les invités utilisent NTP, cela ne fonctionne pas s'il détecte que la date est décalée de quelques grandes valeurs (quelques heures semblent être suffisantes). Existe-t-il un moyen de forcer la synchronisation NTP même pour de grandes différences de temps? Ou toute autre solution qui permettrait de restaurer la date et l'heure correctes sur les boîtes d'invités après la reprise de l'hibernation de l'hôte?


1
Voir cette réponse pour plus de détails - fondamentalement, les ajouts des invités permettent une synchronisation d'horloge directe sans avoir besoin de NTP: superuser.com/questions/463106/…
Pierz

Réponses:


17

En bref: installez (le package ntp et) les compléments d'invité VirtualBox :)

  • Hôte: Windows 6.1 SP1, x64, 3 Go
  • VirtualBox: v4.3.6
  • Invité: Debian 7.3, 32 bits, 768 Ko

Depuis VirtualBox, attachez le fichier Oracle\VirtualBox\VBoxGuestAdditions.isoau système invité (Paramètres / Stockage) et en tant que root

cd /media/cdrom0
sh ./VBoxLinuxAdditions.run

L'aide de VirtualBox à "9.4. Configuration avancée pour les invités Linux et Solaris" décrit les étapes mais j'ai dû installer le paquet linux-headers-3.2.0-4-486, d'abord.
Ensuite, en tant que root,

/usr/lib/VBoxGuestAdditions/vboxadd setup
/usr/lib/VBoxGuestAdditions/vboxadd-service setup
/usr/lib/VBoxGuestAdditions/vboxadd setup

Ensuite, redémarrez l'invité.

J'ai vérifié en quittant le système invité ( Alt+ F4, puis en commandant VirtualBox pour enregistrer l'état de l'invité), en attendant 5 minutes, puis en redémarrant le système invité
Au début, l'horloge a été restaurée à partir de sa valeur précédente, mais après quelques secondes tout s'est bien passé (horloge synchronisée)


En fait, c'est ce que j'ai fini par faire :) Je n'ai tout simplement pas eu le temps de poster la réponse, donc le mérite vous revient.
SiliconMind

NTP n'est pas requis pour la synchronisation d'horloge des ajouts d'invités - il est effectué par le démon des ajouts d'invités (VBoxService).
Pierz

2
Pourquoi proposez-vous de répéter la première commande deux fois? Est-ce vraiment nécessaire?
RDP

@RDP <quote> Est-il vraiment nécessaire de répéter la première commande deux fois? </quote> Je ne me souviens pas, et la documentation a changé voir [ virtualbox.org/manual/ch09.html#idm7495]
Pierre

Vous devez également installer gcc et make. Ne pas les avoir manifestes comme une erreur lors du démarrage du service vboxadd. Mais vous n'obtenez pas la suggestion utile d'installer ces packages à moins d'exécuter explicitement vboxadd - VBoxLinuxAdditions.run ne l'expose pas.
Harry Tsai

1

Le serveur NTP n'a pas été conçu pour fonctionner à l'intérieur d'une machine virtuelle. Il nécessite une horloge système à haute résolution, avec des temps de réponse aux interruptions d'horloge qui sont entretenus avec un haut niveau de précision. Le client NTP peut fonctionner dans certaines solutions de virtualisation. Exécutez NTP sur le système d'exploitation de base de la machine, puis laissez vos différents systèmes d'exploitation invités profiter de la bonne horloge créée sur le système. Même cela peut ne pas être suffisant, car il peut y avoir des outils ou des options de noyau supplémentaires que vous devez activer pour que les clients de machine virtuelle puissent synchroniser correctement leurs horloges virtuelles avec l'horloge du système physique.

Source: prise en charge des problèmes connus de NTP

À partir de cette déclaration, et en lisant que votre partie importante est les temps de validation git, il serait alors trivial d'écrire un hook de pré-validation pour collecter l'heure de votre machine hôte, et vous pouvez l'obtenir simplement en demandant à votre machine hôte:

ssh hostmachine "date +%Y%m%d%H%M%s"


Merci mais ce n'est pas tout à fait une réponse :) J'utilise VirtualBox et il n'y a pas d'options pour la synchronisation de l'heure. Si ce n'est pas le NTP, alors quoi?
SiliconMind

Désolé, j'ai sauté le pas ... mais maintenant, avec un montage, j'ai clarifié ma pensée.
vgoff
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.