¿Es posible obtener una máquina virtual Virtualbox que siempre se inicie desde el mismo tiempo? De ser así, ¿cómo?

9

Estoy tratando de usar VB para configurar una VM de Windows 7 para usar en un curso de capacitación. Quiero que la máquina virtual siempre se inicie desde las mismas condiciones, en particular:

  1. La VM siempre comienza en la misma fecha y hora
  2. El disco permanece sin cambios como resultado del ejercicio anterior

He resuelto cómo configurar un disco como "inmutable" que debería encargarse de (2), pero no puedo hacer que la VM se inicie al mismo tiempo. Después de mirar alrededor, encontré esto:

Una vez instalado e iniciado, VirtualBox Guest Additions intentará sincronizar la hora del invitado con la hora del host. Esto se puede evitar prohibiendo que el servicio al huésped lea el reloj del host:

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

Intenté esto con la máquina virtual apagada y con ella iniciada, pero no parece hacer nada. En la misma página de documentación también se menciona un parámetro "--timesync-set-start", sin embargo, no puedo ver ninguna mención del formato para configurar la fecha y la hora. La ayuda sería bienvenida.

Martin K
fuente
Con "no parece hacer nada", ¿quiere decir que la fecha y hora del sistema se sincronizan de todos modos con el host?
Sopalajo de Arrierez
¿Debería ser una solución para usted establecer la hora y la fecha después del arranque de Windows (quiero decir unos segundos más tarde)? Un simple script .cmd debería hacer eso, creo.
Sopalajo de Arrierez
El propio Windows también puede configurarse para sincronizar la hora con un servidor de hora de Internet.
Thorbjørn Ravn Andersen

Respuestas:

16

Debe realizar las siguientes acciones para que el tiempo del invitado mantenga lo que era:

1. Desactive la sincronización de tiempo de su máquina virtual:

1.1 Desactivar sincronización de host a invitado

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

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

Para volver atrás:

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

1.2 Deshabilitar GuestAddition Timesync

Utilice el regedit.exe para modificar el registro.

Busque esta rama: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ VBoxService

Cambiar el valor ImagePathde

system32\VBoxService.exe

a

system32\VBoxService.exe --disable-timesync

Reinicie su VM o reinicie el servicio "VirtualBox Guest Additions Service".

2. Desactive la sincronización horaria de Windows.

Verifique la configuración de tiempo. Desactiva la sincronización horaria de internet.

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

Madwyn
fuente
Gracias. Su "1.2 Desactivar GuestAddition Timesync" es la única opción que parecía funcionar para mí. VirtualBox revierte los cambios de host. Echaría un vistazo al archivo después de iniciar la VM y se eliminaron las nuevas entradas xml de extradatos.
Graymatter
5

Los siguientes pasos funcionarán si la máquina host es Windows / Linux.

  1. Si "máquina de destino" es Windows: abra "máquina virtual de destino" y aplique "Panel de control -> Fecha y hora -> Hora de Internet -> Cambiar configuración -> Desactivar" Sincronizar con un servidor de hora de Internet "".

  2. Copie las líneas a continuación como archivo "yourfilename.ps1" (Windows) / "yourfilename.sh" (Linux) en la máquina host. Edite este archivo como se describe en el paso 3. 4. 5.


ANFITRIÓN: VENTANAS

$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

Anfitrión: 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. Actualice "vbox_path" con la ruta de instalación de VirtualBox. (Anfitrión: Windows)
  2. Actualice "vm_name" con el nombre de VirtualBox Image que se iniciará.
  3. Actualice "start_utc" con http://www.epochconverter.com/ . La máquina de destino comenzará siempre con el tiempo "start_utc". Epoch Converter
  4. Abra "Windows PowerShell" desde el menú Inicio como administrador . (Anfitrión: Windows)
  5. Ejecute el siguiente comando y responda la pregunta como [Y]. (Anfitrión: Windows)

    Set-ExecutionPolicy RemoteSigned
    
  6. Ejecute con el botón derecho en "yourfilename.ps1" y seleccione "Ejecutar con PowerShell" para iniciar la máquina de destino. (Anfitrión: Windows)

  7. Inicie un comando de ejecución de Terminal de Linux a continuación para iniciar la máquina de destino (Host: Linux)

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

Nota: Utilice siempre el paso 8 (Host: Windows) / paso 9 (Host: Linux) para ejecutar la máquina virtual de destino.

Onur Turhan
fuente
Para los usuarios que tienen un host Linux, he creado un script bash basado en esta respuesta que puedes encontrar aquí: gist.github.com/breautek/be83414034b973d53691645d6e178bb4 Simplemente guárdalo como startvm.sh chmod +x startvm.shy úsalo ./startvm.shpara ejecutarlo. Probablemente también funcione en un host Mac, pero no lo he probado.
Norman Breau
1

Para responder a la pregunta original del OP (MartinK): ¿Es posible obtener una Virtualbox VM que siempre comience desde la misma hora? De ser así, ¿cómo?

Es posible simplemente por

(a) Establecer la propiedad "GetHostTimeDisabled" = 1, usando el comando VBoxManage en la línea de comando (en modo fuera de línea, es decir, antes de iniciar la VM)

(b) Inicie una VM, desde un SnapShot guardado tomado anteriormente. (a la hora de inicio deseada)

No se requieren más comandos, cada vez que esto funciona. (probado para Windows Guest en Windows Hosts)

Esta respuesta está más cerca de la respuesta anterior de Oliver Salzburg, excepto que se perdió el ajuste de parámetros "GetHostTimeDisabled". OfCourse Internet Time Sync (NTP) debe estar deshabilitado, en la instantánea guardada.

Bhishmar
fuente
0

Usa instantáneas.

  1. Para crear una nueva instantánea, solo use el botón Tomar instantánea en la descripción general de Instantáneas :

    ingrese la descripción de la imagen aquí

  2. Asigne un nombre a la instantánea y guárdela.

  3. Cuando desee iniciar el estado fijo más adelante, vuelva a su instantánea anterior con el botón Restaurar instantánea :

    ingrese la descripción de la imagen aquí

Si desea asegurarse de que su instantánea siempre tenga la misma fecha, probablemente desee deshabilitar la sincronización horaria de Internet en Windows desmarcando la casilla de verificación Sincronizar con un servidor horario de Internet en el cuadro de diálogo de configuración del reloj.

Der Hochstapler
fuente
Creo que es una excelente solución y me soluciona el problema. Parece entonces que si uso una instantánea no necesito preocuparme por hacer que el disco sea "inmutable", ¿estoy en lo cierto? Además, aunque no necesito esto para resolver mi problema, tengo curiosidad sobre el propósito de los comandos VBoxManage que mencioné en mi publicación anterior (y cómo hacer que funcionen)
Martin K
Consulte la documentación sobre ese comando: virtualbox.org/manual/ch09.html#disabletimesync No veo qué beneficio tendría un disco inmutable o lo que realmente significa en este contexto.
Der Hochstapler
Según mi publicación original, ya he visto la documentación a la que se refiere e intenté que funcione, sin embargo, no hizo nada. Debo estar perdiendo algo, pero ¿qué?
Martin K