Ist es möglich, eine Virtualbox-VM immer zur gleichen Zeit zu starten, wenn ja, wie?

9

Ich versuche, mit VB eine Windows 7-VM für die Verwendung in einem Schulungskurs einzurichten. Ich möchte, dass die virtuelle Maschine immer unter den gleichen Bedingungen startet, insbesondere:

  1. Die VM startet immer zum gleichen Datum und zur gleichen Uhrzeit
  2. Die Festplatte bleibt aufgrund der vorherigen Übung unverändert

Ich habe herausgefunden, wie man eine Festplatte als "unveränderlich" konfiguriert, was sich um (2) kümmern sollte, aber ich kann die VM nicht gleichzeitig starten. Nach einigem Hin und Her fand ich Folgendes:

Nach der Installation und dem Start versuchen die Virtualbox Guest Additions, die Gastzeit mit der Hostzeit zu synchronisieren. Dies kann verhindert werden, indem dem Gästeservice das Lesen der Host-Uhr untersagt wird:

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

Ich habe dies versucht, während die VM heruntergefahren und gestartet wurde, aber es scheint nichts zu tun. Auf derselben Dokumentationsseite wird auch ein Parameter "--timesync-set-start" erwähnt. Das Format zum Einstellen von Datum und Uhrzeit kann jedoch nicht erwähnt werden. Hilfe wäre willkommen.

Martin K.
quelle
Meinen Sie mit "es scheint nichts zu tun" "die Systemzeit und das Systemdatum werden trotzdem mit dem Host synchronisiert"?
Sopalajo de Arrierez
Sollte es eine Lösung für Sie sein, Uhrzeit und Datum nach dem Windows-Start festzulegen (einige Sekunden später, meine ich)? Ein einfaches .cmd-Skript sollte das tun, denke ich.
Sopalajo de Arrierez
Windows selbst ist möglicherweise auch so konfiguriert, dass die Zeit mit einem Internet-Zeitserver synchronisiert wird.
Thorbjørn Ravn Andersen

Antworten:

16

Sie müssen die folgenden Aktionen ausführen, damit die Gastzeit so bleibt, wie sie war:

1. Deaktivieren Sie die Zeitsynchronisierung Ihrer virtuellen Maschine:

1.1 Deaktivieren Sie 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

So kehren Sie zurück:

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

1.2 Deaktivieren Sie GuestAddition Timesync

Verwenden Sie die Datei regedit.exe, um die Registrierung zu ändern.

Suchen Sie diesen Zweig: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ VBoxService

Ändern Sie den Wert in ImagePathvon

system32\VBoxService.exe

zu

system32\VBoxService.exe --disable-timesync

Starten Sie Ihre VM neu oder starten Sie den Dienst "VirtualBox Guest Additions Service" neu.

2. Deaktivieren Sie die Zeitsynchronisierung von Windows.

Überprüfen Sie die Zeiteinstellungen. Deaktivieren Sie die Internet-Zeitsynchronisierung.

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

Madwyn
quelle
Vielen Dank. Ihr "1.2 Disable GuestAddition Timesync" ist die einzige Option, die für mich zu funktionieren schien. Die Hoständerungen wurden von VirtualBox immer wieder zurückgesetzt. Ich würde mir die Datei ansehen, nachdem ich die VM gestartet und die neuen extradata xml-Einträge entfernt hatte.
Graymatter
5

Die folgenden Schritte funktionieren, wenn der Hostcomputer Windows / Linux ist.

  1. Wenn "Zielcomputer" Windows ist: Öffnen Sie "Virtuelle Zielmaschine" und wenden Sie "Systemsteuerung -> Datum und Uhrzeit -> Internetzeit -> Einstellungen ändern -> Deaktivieren Sie" Mit einem Internet-Zeitserver synchronisieren "an.

  2. Kopieren Sie die folgenden Zeilen als Datei "yourfilename.ps1" (Windows) / "yourfilename.sh" (Linux) auf dem Hostcomputer. Bearbeiten Sie diese Datei wie in Schritt 3 beschrieben. 4. 5.


Host: Fenster

$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

GASTGEBER: 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. Aktualisieren Sie "vbox_path" mit dem VirtualBox-Installationspfad. (Host: Windows)
  2. Aktualisieren Sie "vm_name" mit dem Namen des VirtualBox-Images, das gestartet wird.
  3. Aktualisieren Sie "start_utc" mit http://www.epochconverter.com/ . Der Zielcomputer startet immer mit der Zeit "start_utc". Epochen-Konverter
  4. Öffnen Sie "Windows PowerShell" im Startmenü als Administrator . (Host: Windows)
  5. Führen Sie den folgenden Befehl aus und beantworten Sie die Frage als [Y]. (Host: Windows)

    Set-ExecutionPolicy RemoteSigned
    
  6. Führen Sie es mit der rechten Maustaste auf "yourfilename.ps1" aus und wählen Sie "Mit PowerShell ausführen", um den Zielcomputer zu starten. (Host: Windows)

  7. Starten eines Linux-Terminals Ausführungsbefehl unten zum Starten des Zielcomputers (Host: Linux)

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

Hinweis: Verwenden Sie immer Schritt 8 (Host: Windows) / Schritt 9 (Host: Linux), um die virtuelle Zielmaschine auszuführen.

Onur Turhan
quelle
Für Benutzer mit einem Linux-Host habe ich basierend auf dieser Antwort ein Bash-Skript erstellt, das Sie hier finden: gist.github.com/breautek/be83414034b973d53691645d6e178bb4 Speichern Sie es einfach als startvm.sh chmod +x startvm.shund verwenden Sie es ./startvm.sh, um es auszuführen. Funktioniert wahrscheinlich auch auf einem Mac-Host, aber ich habe es nicht getestet.
Norman Breau
1

So beantworten Sie die ursprüngliche Frage des OP (MartinK): Ist es möglich, eine Virtualbox-VM immer zur gleichen Zeit zu starten, wenn ja, wie?

Es ist einfach durch möglich

(a) Festlegen der Eigenschaft "GetHostTimeDisabled" = 1 mit dem Befehl VBoxManage in der Befehlszeile (im Offline-Modus, dh vor dem Starten der VM)

(b) Starten Sie eine VM von einem zuvor aufgenommenen gespeicherten SnapShot. (zur gewünschten Startzeit)

Jedes Mal, wenn dies funktioniert, sind keine weiteren Befehle erforderlich. (getestet für Windows Guest in Windows Hosts)

Diese Antwort ist näher an der früheren Antwort von Oliver Salzburg, außer dass er den Parametersatz "GetHostTimeDisabled" verpasst hat. OfCourse Internet Time Sync (NTP) sollte im gespeicherten Snapshot deaktiviert sein.

Bhishmar
quelle
0

Verwenden Sie Schnappschüsse.

  1. Um einen neuen Schnappschuss zu erstellen, verwenden Sie einfach die Schaltfläche Schnappschuss erstellen in der Übersicht der Schnappschüsse :

    Geben Sie hier die Bildbeschreibung ein

  2. Benennen Sie den Schnappschuss und speichern Sie ihn.

  3. Wenn Sie den festen Status zu einem späteren Zeitpunkt starten möchten, kehren Sie mit der Schaltfläche Snapshot wiederherstellen zu Ihrem vorherigen Snapshot zurück :

    Geben Sie hier die Bildbeschreibung ein

Wenn Sie sicherstellen möchten, dass Ihr Snapshot immer das gleiche Datum hat, möchten Sie wahrscheinlich die Internetzeitsynchronisierung in Windows deaktivieren, indem Sie das Kontrollkästchen Mit einem Internetzeitserver synchronisieren im Dialogfeld " Uhrenkonfiguration" deaktivieren .

Der Hochstapler
quelle
Das ist eine hervorragende Lösung und behebt das Problem für mich, denke ich. Wenn ich dann einen Schnappschuss verwende, muss ich mich nicht darum kümmern, die Festplatte "unveränderlich" zu machen - habe ich Recht? Auch wenn ich dies nicht brauche, um mein Problem zu lösen, bin ich gespannt auf den Zweck der VBoxManage-Befehle, die ich in meinem vorherigen Beitrag erwähnt habe (und wie man sie zum Laufen bringt)
Martin K
Weitere Informationen zu diesem Befehl finden Sie in der Dokumentation zu: virtualbox.org/manual/ch09.html#disabletimesync Ich sehe nicht, welchen Nutzen eine unveränderliche Festplatte haben würde oder was sie in diesem Zusammenhang tatsächlich bedeutet.
Der Hochstapler
Gemäß meinem ursprünglichen Beitrag habe ich mir bereits die Dokumentation angesehen, auf die Sie sich beziehen, und versucht, sie zum Laufen zu bringen - sie hat jedoch nichts bewirkt. Mir muss etwas fehlen - aber was?
Martin K