È possibile avviare sempre una VM Virtualbox dallo stesso momento, se sì come?


9

Sto cercando di utilizzare VB per configurare una macchina virtuale Windows 7 da utilizzare in un corso di formazione. Voglio che la macchina virtuale si avvii sempre dalle stesse condizioni, in particolare:

  1. La macchina virtuale si avvia sempre alla stessa data e ora
  2. Il disco rimane invariato come risultato dell'esercizio precedente

Ho scoperto come configurare un disco come "immutabile" che dovrebbe occuparsi di (2), ma non riesco a far avviare contemporaneamente la VM. Dopo aver guardato in giro ho trovato questo:

Una volta installato e avviato, Virtualbox Guest Additions proverà a sincronizzare l'ora ospite con l'ora host. Ciò può essere impedito vietando al servizio guest di leggere l'orologio host:

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

L'ho provato con la VM spenta e avviata, ma sembra non fare nulla. Nella stessa pagina di documentazione c'è anche una menzione di un parametro "--timesync-set-start", tuttavia non vedo alcuna menzione del formato per l'impostazione della data e dell'ora. L'aiuto sarebbe il benvenuto.


Con "sembra non fare nulla", vuoi dire "l'ora e la data del sistema vengono sincronizzate comunque con l'host"?
Sopalajo de Arrierez,

Dovrebbe essere una soluzione per te impostare ora e data dopo l'avvio di Windows (qualche secondo dopo, intendo)? Una semplice sceneggiatura .cmd dovrebbe farlo, credo.
Sopalajo de Arrierez,

Windows stesso potrebbe anche essere configurato per sincronizzare l'ora con un time server di Internet.
Thorbjørn Ravn Andersen,

Risposte:


16

È necessario eseguire le seguenti azioni per far sì che il tempo degli ospiti mantenga quello che era:

1.Disabilitare la sincronizzazione temporale della macchina virtuale:

1.1 Disabilitare Host to Guest Timesync

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

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

Per tornare indietro:

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

1.2 Disabilitare GuestAddition Timesync

Utilizzare regedit.exe per modificare il registro.

Trova questo ramo: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ VBoxService

Cambia il valore in ImagePathda

system32\VBoxService.exe

per

system32\VBoxService.exe --disable-timesync

Riavviare la VM o riavviare il servizio "VirtualBox Guest Additions Service".

2. Disabilitare la sincronizzazione temporale di Windows.

Controlla le impostazioni dell'ora. Disabilita la sincronizzazione dell'ora di Internet.

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


Grazie. "1.2 Disable GuestAddition Timesync" è l'unica opzione che sembra funzionare per me. Le modifiche dell'host continuavano a essere ripristinate da VirtualBox. Vorrei dare un'occhiata al file dopo aver avviato la VM e le nuove voci xml extradata sono state rimosse.
Graymatter,

5

I seguenti passaggi funzioneranno, se la macchina host è Windows / Linux.

  1. Se "macchina target" è Windows: Apri "macchina virtuale target" e applica "Pannello di controllo -> Data e ora -> Ora Internet -> Modifica impostazioni -> Disabilita" Sincronizza con un server orario Internet "".

  2. Copia le righe sottostanti come file "yourfilename.ps1" (Windows) / "yourfilename.sh" (Linux) sul computer host. Modificare questo file come descritto al passaggio 3. 4. 5.


HOST: 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

HOST: 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. Aggiorna "vbox_path" con il percorso di installazione di VirtualBox. (Host: Windows)
  2. Aggiorna "vm_name" con il nome dell'immagine VirtualBox che verrà avviato.
  3. Aggiorna "start_utc" utilizzando con http://www.epochconverter.com/ . La macchina target inizierà sempre con l'ora "start_utc". Convertitore di epoca
  4. Apri "Windows PowerShell" dal menu Start come amministratore . (Host: Windows)
  5. Esegui il comando seguente e rispondi alla domanda come [Y]. (Host: Windows)

    Set-ExecutionPolicy RemoteSigned
    
  6. Esegui con il tasto destro del mouse su "yourfilename.ps1" e seleziona "Esegui con PowerShell" per avviare il computer di destinazione. (Host: Windows)

  7. Avviare un terminale Linux eseguire il comando belows per avviare la macchina target (Host: Linux)

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

Nota: utilizzare sempre il passaggio 8 (Host: Windows) / passaggio 9 (Host: Linux) per eseguire la macchina virtuale di destinazione.


Per gli utenti che hanno un host Linux, ho creato uno script bash basato su questa risposta che puoi trovare qui: gist.github.com/breautek/be83414034b973d53691645d6e178bb4 Basta salvarlo come startvm.sh chmod +x startvm.she utilizzarlo ./startvm.shper eseguirlo. Probabilmente funzionerà anche su un host Mac, ma non l'ho provato.
Norman Breau,

1

Per rispondere alla domanda originale dell'OP (MartinK): È possibile avviare sempre una VM Virtualbox dallo stesso momento, in caso affermativo come?

È possibile semplicemente

(a) Impostazione della proprietà "GetHostTimeDisabled" = 1, utilizzando il comando VBoxManage dalla riga di comando (in modalità offline, ovvero prima di avviare la VM)

(b) Avviare una macchina virtuale, da uno SnapShot salvato precedentemente. (all'ora di inizio desiderata)

Non sono necessari altri comandi, ogni volta che funziona. (testato per Windows Guest negli host Windows)

Questa risposta è più vicina alla risposta precedente di Oliver Salzburg, tranne per il fatto che ha perso il set di parametri "GetHostTimeDisabled". OfCourse Internet Time Sync (NTP) deve essere disabilitato, nell'istantanea salvata.


0

Usa le istantanee.

  1. Per creare una nuova istantanea, basta usare il pulsante Scatta istantanea nella panoramica Istantanee :

    inserisci qui la descrizione dell'immagine

  2. Assegna un nome all'istantanea e salvala.

  3. Quando si desidera avviare lo stato fisso in un secondo momento, ripristinare l'istantanea precedente con il pulsante Ripristina istantanea :

    inserisci qui la descrizione dell'immagine

Se vuoi assicurarti che la tua istantanea abbia sempre la stessa data, probabilmente vorrai disabilitare la sincronizzazione dell'ora di Internet in Windows deselezionando la casella Sincronizza con un server dell'ora di Internet nella finestra di dialogo di configurazione dell'orologio.


Questa è un'ottima soluzione e risolve il problema per me, credo. Sembra quindi che se utilizzo un'istantanea non devo preoccuparmi di rendere il disco "immutabile" - ho ragione? Inoltre, anche se non ho bisogno di questo per risolvere il mio problema, sono curioso di sapere lo scopo dei comandi VBoxManage che ho menzionato nel mio precedente post (e come farli funzionare)
Martin K,

Fare riferimento alla documentazione relativa a quel comando: virtualbox.org/manual/ch09.html#disabletimesync Non vedo quali benefici avrebbe un disco immutabile o cosa significhi effettivamente in questo contesto.
Der Hochstapler,

Per quanto riguarda il mio post originale, ho già esaminato la documentazione a cui ti riferisci e ho provato a farlo funzionare, tuttavia non ha fatto nulla. Mi manca qualcosa - ma cosa?
Martin K,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.