VirtualBox: Zeit-Synchronisation deaktivieren
Praktisch als Ergänzung zum Beitrag VMware Workstation Player: Zeit-Synchronisation deaktivieren, diesmal allerdings für VirtualBox, eine Anleitung zum Deaktivieren des Abgleichs von Datum und Uhrzeit.
Im Gegensatz zu VMware genügt zum Deaktivieren der Zeit-Synchronisation ein Befehl:
VBoxManage setextradata "VM name" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1
Die virtuelle Maschine sollte selbstverständlich zum Zeitpunkt des Ausführens des Befehls beendet sein. Idealerweise sollte VirtualBox ebenfalls geschlossen sein, andernfalls kann es vorkommen, das die Änderung nicht übernommen wird.
Beim Starten der virtuellen Maschine wird die aktuelle Uhrzeit vom Host übernommen. Stellt man nun in der virtuellen Maschine ein anderes Datum bzw. eine andere Uhrzeit ein, so läuft diese dann weiter bis zum nächsten Neustart.
Nicht übersehen darf man die Zeit-Synchronisation die innerhalb der virtuellen Maschine seitens des dort installierten Betriebssystems stattfindet. Bei Windows und Linux beispielsweise der Abgleich via NTP über das Internet.
Möchte man bereits ab dem Startvorgang der virtuellen Maschine ein anderes Datum mitgeben, so muss dies vorab über den Befehl
VBoxManage modifyvm "VM name" --biossystemtimeoffset <ms>
realisiert werden. Das setzt voraus, das man die Differenz in Millisekunden kennt. Wie man diese Zeit ermitteln kann, wird in diesem Beitrag erläutert:
Winaero – How to set the BIOS date in VirtualBox
Wichtig zu wissen ist, das der Offset fest in die Konfigurationsdatei der virtuellen Maschine eingetragen wird, d.h. es wird dann immer mit diesem Wert gestartet, der (natürlich) dann nicht mehr zum gewünschten Zeitpunkt passt und praktisch jedesmal vor dem Start aktualisiert werden muss.
Als Batch-Skript für Windows sieht das Ganze, gemeint ist Sync deaktivieren, Differenz ermitteln und VM starten, so aus:
@echo off rem Konfiguration set VMname=Debian set VMdate=08/01/2018 set VBoxPath=C:\Program Files\Oracle\VirtualBox rem Zeit-Differenz von heute bis zum definierten Zeitpunkt ermitteln powershell ([datetime]'%VMdate%' - [datetime]::Now) | find "TotalMilliseconds :" > temp.txt set /p MS=< temp.txt del temp.txt /q rem Variable beschneiden ("TotalMilliseconds :" und rem alles nach dem Komma, inkl. dem Komma selbst entfernen, da die Zeit als Ganzzahl angegeben werden muss) set MS=%MS:~20,-5% rem Zeit-Sychronisation mit dem Host deaktivieren "%VBoxPath%\VBoxManage" setextradata "%VMname%" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1 rem Offset setzen "%VBoxPath%\VBoxManage" modifyvm "%VMname%" --biossystemtimeoffset "%MS%" rem Virtuelle Maschine starten "%VBoxPath%\VBoxManage" startvm "%VMname%"
Quellen:
Oracle VM VirtualBox – User Manual – 8.8. VBoxManage modifyvm (–biossystemtimeoffset <ms>)
Schon immer Technik-Enthusiast, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen. Die Schwerpunkte liegen auf der Netzwerkinfrastruktur, den Betrieb von Servern und Diensten.
Hallo,
mit welchen Betriebssystemen ist diese Lösung lauffähig?
Thomas
Der VboxManage-Befehl ansich ist plattformunabhängig. Das Skript ist Windows-only, erfolgreich getestet unter Windows 8.1 und 10. Vmtl. geht auch Windows 7, wurde allerdings nicht probiert.
Hallo
wo und wie muss ich die Batchdatei einbinden damit mein System ( Win7 ) in virtual box immer mit dem von mir gewünschtem Datum startet?
Gruß Klaus
Das Skript an einem gewünschten Ort ablegen und den VM-Namen und das Start-Datum anpassen.
Es wird kein spezieller Ort oder ehöten Rechte benötigt.
Einzig muss man daran denken, das man die VM dann immer über das Skript und nicht direkt aus VirtualBox heraus startet.
danke für deine Antwort.
Ich habe jetzt dein Skript als CMD Datei ausgeführt. ich habe „VMname“ durch den Namen der Maschine „SKS“ im ganzen Skrpit ersetzt. das Skript wird auch ausgeführt glaube ich zumindest weil ich bekomme keine Fehlermeldung, aber die BOX startet nicht automatisch. Was mache ich falsch?
Im Skript muss nur im Abschnitt „Konfiguration“ bei der Variabeln „VMname“ der Name eingetragen werden:
rem Konfiguration
set VMname=Debian <- Den Namen der VM eintragen
set VMdate=08/01/2018
Sonst muss eigentlich nichts geändert werden, außer man hat VirtualBox an anderer Stelle installiert als per Vorgabe vorgesehen. In einem solchen Fall muss noch der Pfad angepasst werden:
set VBoxPath=C:Program FilesOracleVirtualBox
Zur weiteren Eingrenzung was evtl. schief läuft kann man am Ende des Skript schlicht ein „Pause“ einfügen und es dann nochmal ausführen und sich die Meldungen ansehen.
Hallo Andy,
habe dein Script runtergezogen und kann damit auch meine Virtuelle Maschine starten. Nur leider läuft das WindowsDatum einfach weiter…
Moin Andy,
vielen Dank für die Lösung. Mir ist aufgefallen, dass die Zeit nicht so geschickt gekürzt wird. Hier “
set MS=%MS:~20,-5%
„wird immer 5 stellen gekürzt . Dabei egal ob nach dem Komma. Mein Vorschlag ist die PowerShell schon die Zeit ohne Komma zu berechnen. So hätte ich es mit gedacht “
powershell [math]::ceiling(([datetime]’%VMdate%‘ – [datetime]::Now).TotalMilliseconds) > temp.txt
„. Damit brauchts auch die Kürzung nicht mehr.