Est-il possible d'obtenir une VM Virtualbox toujours démarrer à la même heure, si oui, comment?

9

J'essaie d'utiliser VB pour configurer une machine virtuelle Windows 7 à utiliser dans un cours de formation. Je souhaite que la machine virtuelle démarre toujours dans les mêmes conditions, en particulier:

  1. La VM démarre toujours à la même date et heure
  2. Le disque reste inchangé à la suite de l'exercice précédent

J'ai travaillé sur la façon de configurer un disque comme "immuable" qui devrait s'occuper de (2), mais je ne peux pas faire démarrer la VM en même temps. Après quelques recherches, j'ai trouvé ceci:

Une fois installés et démarrés, Virtualbox Guest Additions essaiera de synchroniser l'heure de l'invité avec l'heure de l'hôte. Cela peut être évité en interdisant au service client de lire l'horloge de l'hôte:

VBoxManage setextradata "VM name" "VBoxInternal / Devices / VMMDev / 0 / Config / GetHostTimeDisabled" 1

J'ai essayé cela avec la machine virtuelle arrêtée et avec elle démarrée, mais cela ne semble rien faire. Sur la même page de documentation, il y a aussi une mention d'un paramètre "--timesync-set-start" mais je ne vois aucune mention du format de réglage de la date et de l'heure. De l'aide serait la bienvenue.

Martin K
la source
Avec "il ne semble rien faire", voulez-vous dire "l'heure et la date du système sont quand même synchronisées avec l'hôte"?
Sopalajo de Arrierez
Cela devrait-il être une solution pour vous de régler l'heure et la date après le démarrage de Windows (quelques secondes plus tard, je veux dire)? Un simple script .cmd devrait le faire, je pense.
Sopalajo de Arrierez
Windows lui-même peut également être configuré pour synchroniser l'heure avec un serveur de temps Internet.
Thorbjørn Ravn Andersen

Réponses:

16

Vous devez effectuer les actions suivantes pour que l'heure de l'invité conserve ce qu'elle était:

1.Désactivez la synchronisation de l'heure de votre machine virtuelle:

1.1 Désactiver l'hôte à l'invité Timesync

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/TM/TSCTiedToExecution" 1

Pour revenir en arrière:

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 0

1.2 Désactiver GuestAddition Timesync

Utilisez regedit.exe pour modifier le registre.

Recherchez cette branche: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ VBoxService

Modifiez la valeur ImagePathde

system32\VBoxService.exe

à

system32\VBoxService.exe --disable-timesync

Redémarrez votre machine virtuelle ou redémarrez le service "VirtualBox Guest Additions Service".

2.Désactivez la synchronisation horaire de Windows.

Vérifiez les paramètres d'heure. Désactivez la synchronisation de l'heure Internet.

Source: http://www.ppq.ch/snippets/15-vobxtime

Madwyn
la source
Merci. Votre "1.2 Désactiver GuestAddition Timesync" est la seule option qui semblait fonctionner pour moi. Les modifications de l'hôte continuaient d'être annulées par VirtualBox. Je voudrais jeter un œil au fichier après avoir démarré la machine virtuelle et les nouvelles entrées xml d'extradata ont été supprimées.
Graymatter
5

Les étapes suivantes fonctionneront si la machine hôte est Windows / Linux.

  1. Si "machine cible" est Windows: Ouvrez "machine virtuelle cible" et appliquez "Panneau de configuration -> Date et heure -> Heure Internet -> Modifier les paramètres -> Désactiver" Synchroniser avec un serveur de temps Internet "".

  2. Copiez les lignes ci-dessous en tant que fichier "yourfilename.ps1" (Windows) / "yourfilename.sh" (Linux) sur la machine hôte. Modifiez ce fichier comme décrit à l'étape 3. 4. 5.


HÔTE: WINDOWS

$vbox_path="C:\Program Files\ORACLE\VirtualBox"
$vm_name="Win7_VB"
$start_utc=1444176000

#DO NOT CHANGE ANYTHING BELOW THIS LINE
$now_utc_ms=[int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalMilliseconds
$dif_utc_ms=$start_utc * 1000 - $now_utc_ms
Write-Host "START UTC:" $start_utc*1000 " DIF UTC:" $dif_utc_ms " NEW UTC:" $now_utc_ms

cd $vbox_path
VBoxManage setextradata $vm_name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
VBoxManage setextradata $vm_name "VBoxInternal/TM/TSCTiedToExecution" 1
VBoxManage modifyvm     $vm_name --biossystemtimeoffset $dif_utc_ms
VBoxManage startvm      $vm_name
Start-Sleep -s 5

HÔTE: LINUX

#!/bin/sh
vbox_path="/usr/bin/"
vm_name="Win7_VB"
start_utc=1444176000

#DO NOT CHANGE ANYTHING BELOW THIS LINE
now_utc_ms=$(($(date +%s)*1000))
dif_utc_ms=$(($(($start_utc * 1000)) - $now_utc_ms))
echo "START UTC:" $(($start_utc * 1000)) " DIF UTC:" $dif_utc_ms "NOW UTC:" $now_utc_ms

cd $vbox_path
VBoxManage setextradata $vm_name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
VBoxManage setextradata $vm_name "VBoxInternal/TM/TSCTiedToExecution" 1
VBoxManage modifyvm     $vm_name --biossystemtimeoffset $dif_utc_ms
VBoxManage startvm      $vm_name
sleep 5
  1. Mettez à jour "vbox_path" avec le chemin d'installation de VirtualBox. (Hôte: Windows)
  2. Mettez à jour "vm_name" avec le nom de VirtualBox Image qui sera démarré.
  3. Mettez à jour "start_utc" à l'aide de http://www.epochconverter.com/ . La machine cible démarrera toujours avec l'heure "start_utc". Convertisseur d'époque
  4. Ouvrez "Windows PowerShell" dans le menu Démarrer en tant qu'administrateur . (Hôte: Windows)
  5. Exécutez la commande suivante et répondez à la question par [Y]. (Hôte: Windows)

    Set-ExecutionPolicy RemoteSigned
    
  6. Exécutez avec un clic droit sur "votrefichier.ps1" et sélectionnez "Exécuter avec PowerShell" pour démarrer la machine cible. (Hôte: Windows)

  7. Démarrer une commande Linux Terminal execute ci-dessous pour démarrer la machine cible (hôte: Linux)

    chmod +x yourfilename.sh && sh yourfilename.sh
    

Remarque: Utilisez toujours l'étape 8 (hôte: Windows) / étape 9 (hôte: Linux) pour exécuter la machine virtuelle cible.

Onur Turhan
la source
Pour les utilisateurs qui ont un hôte Linux, j'ai créé un script bash basé sur cette réponse que vous pouvez trouver ici: gist.github.com/breautek/be83414034b973d53691645d6e178bb4 Enregistrez-le simplement sous startvm.sh chmod +x startvm.shet utilisez-le ./startvm.shpour l'exécuter. Fonctionnera probablement aussi sur un hôte mac, mais je ne l'ai pas testé.
Norman Breau
1

Pour répondre à la question originale de l'OP (MartinK): Est-il possible d'obtenir une VM Virtualbox toujours démarrer à la même heure, si oui comment?

Il est possible simplement en

(a) Définition de la propriété "GetHostTimeDisabled" = 1, à l'aide de la commande VBoxManage sur la ligne de commande (en mode hors ligne, c'est-à-dire avant de démarrer la machine virtuelle)

(b) Démarrez une machine virtuelle, à partir d'un instantané enregistré précédemment. (à l'heure de début souhaitée)

Aucune autre commande n'est requise, chaque fois que cela fonctionne. (testé pour Windows Guest dans les hôtes Windows)

Cette réponse est plus proche de la réponse précédente d'Oliver Salzburg, sauf qu'il a manqué le paramétrage "GetHostTimeDisabled". OfCourse Internet Time Sync (NTP) doit être désactivé, dans l'instantané enregistré.

Bhishmar
la source
0

Utilisez des instantanés.

  1. Pour créer un nouvel instantané, utilisez simplement le bouton Prendre un instantané dans la vue d'ensemble des instantanés :

    entrez la description de l'image ici

  2. Nommez l'instantané et enregistrez-le.

  3. Lorsque vous souhaitez démarrer l'état fixe ultérieurement, revenez à votre instantané précédent avec le bouton Restaurer l'instantané :

    entrez la description de l'image ici

Si vous voulez vous assurer que votre instantané a toujours la même date, vous souhaiterez probablement désactiver la synchronisation de l'heure Internet dans Windows en décochant la case Synchroniser avec un serveur de temps Internet dans la boîte de dialogue de configuration de l'horloge.

Der Hochstapler
la source
C'est une excellente solution et résout le problème pour moi, je pense. Il semble donc que si j'utilise un instantané, je n'ai pas besoin de me soucier de rendre le disque "immuable" - ai-je raison? De plus, même si je n'en ai pas besoin pour résoudre mon problème, je suis curieux de savoir à quoi servent les commandes VBoxManage que j'ai mentionnées dans mon post précédent (et comment les faire fonctionner)
Martin K
Veuillez vous référer à la documentation de cette commande: virtualbox.org/manual/ch09.html#disabletimesync Je ne vois pas quel avantage un disque immuable aurait ou ce qu'il signifie réellement dans ce contexte.
Der Hochstapler
Selon mon article d'origine, j'ai déjà examiné la documentation à laquelle vous vous référez et j'ai essayé de la faire fonctionner - mais cela n'a rien fait. Je dois manquer quelque chose - mais quoi?
Martin K