web-dev-qa-db-fra.com

Comment synchroniser l'heure au réveil de l'hôte dans VirtualBox?

J'utilise une boîte basée sur Ubuntu 12.04 à l'intérieur de Vagrant en utilisant VirtualBox. Jusqu'à présent, tout va bien - sauf une chose:

Supposons que le VM est en cours d'exécution. Ensuite, l'hôte passe en mode veille. Après l'avoir à nouveau réveillé, le VM est toujours en cours d'exécution, mais son l'horloge interne continue là où elle s'est arrêtée lorsque l'hôte est tombé. Cela signifie donc essentiellement: mettre l'hôte en veille pendant 15 minutes, le réveiller à nouveau, puis l'horloge interne de la machine virtuelle a 15 minutes de retard.

Comment puis-je résoudre ce problème (régler l'heure manuellement n'est pas une option pour des raisons évidentes ;-))? Existe-t-il un moyen d'exécuter un script à l'intérieur d'un Vagrant VM chaque fois que le système hôte change son état?

J'ai lu dans la documentation que par défaut les VirtualBox Guest Additions synchronisent l'heure avec l'hôte toutes les 10 secondes. Apparemment, cela ne se produit pas, mais je ne trouve aucun endroit où il est désactivé. Alors des idées?

PS: les compléments invités sont installés et correspondent à la version de VirtualBox utilisée.

51
Golo Roden

La documentation manque ici de détails.

Ce que VirtualBox fait toutes les 10 secondes, ce n'est qu'un léger ajustement (quelque chose comme 0,005 seconde). Ce n'est que lorsque la différence de temps atteint un seuil (20 minutes par défaut) qu'une "vraie" resynchronisation est effectuée.

Vous pouvez réduire le seuil (c'est-à-dire à 10 secondes) avec la commande suivante:

VBoxManage guestproperty set <vm-name> "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold" 10000
56
Emyl

En résumant les réponses de @zilupe et @Slobodan Kovacevic, la solution consiste à ajouter ce qui suit à Vagrantfile:

config.vm.provider 'virtualbox' do |vb|
   vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
end

Cela synchronisera les horloges à chaque fois que la désynchronisation devient> 1 s (1000 ms)

25
Daniel Garmoshka

Je donne une autre solution pour synchroniser l'heure entre l'invité et l'hôte sans installer l'ajout d'invité Virtualbox:

  1. installez ntp sur votre invité, et dé-commentez ces lignes dans /etc/ntp.conf:

    disable auth
    broadcastclient
    

Ensuite, redémarrez ntp avec service ntp restart

  1. Diffusion active sur votre hôte:

    • Pour les utilisateurs Linux, modifiez votre /etc/ntp.conf fichier et configurer la diffusion (vous devez adapter l'IP):

      diffuser 192.168.123.255

    • Pour les utilisateurs de Windows, activez le service " Windows Time ". Vous pouvez alors lire cette page pour le configurer pour diffuser le temps

    Ensuite, redémarrez le service de temps sur l'hôte.

6
fred727

Pour que je puisse faire fonctionner la synchronisation temporelle, je devais faire ceci:

vboxmanage setextradata «machine-name» "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 0

Il active la synchronisation horaire. C'était, pour une raison quelconque, éteint.

4
ctrl-alt-delor

J'ai trouvé une solution:

  1. installer ntpdate
  2. ajouter l'autorisation "s" pour ntpdate, cela permet aux utilisateurs non root d'exécuter ntpdate en tant que root: Sudo chmod u+s /usr/sbin/ntpdate
  3. ajouter une ligne dans ~/.bashrc: ntpdate -u ntp.ubuntu.com

Après cela, chaque fois que vous vous connectez au système Linux, l'heure sera synchronisée une fois.

2
mengqi

vous pouvez installer les ajouts d'invité VirtualBox dans le VM pour synchroniser l'heure automatiquement par VB.

1
che---