Haga un clon de VirtualBox Machine que no provoque la reactivación de Windows después de instalar Windows

14

La mayoría de las guías para instalar Windows en VirtualBox para que actúen como una plantilla para trabajos rápidos de Windows le indican que siga algunos pasos para preparar la máquina virtual antes de instalar Windows (la mejor guía que encontré: grahamrhay.wordpress.com ; otra guía bastante buena: www .windowstablettv.com ). Desafortunadamente, no leí estas guías antes de instalar y activar Windows en la VM que quería usar como plantilla.

Quiero saber cómo clonar mi VM ya activa de tal manera que no requiera la reactivación de Windows.

Al buscar en el archivo de definición de VM de plantilla (el archivo VBOX o XML para la VM), el /VirtualBox/Machine/Hardwarenodo (ID de XPath) no tiene uuidatributo. Pero, si intento usar VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>para configurar un nuevo UUID para la plantilla VM, ¡la plantilla VM pierde su estado de activación! (Afortunadamente, hice una copia de seguridad de la plantilla). Entonces, para lograr mi objetivo, no puedo seguir esas guías pretendiendo que todavía no he instalado Windows.

palswim
fuente

Respuestas:

11

Afortunadamente, noté algo sobre todas mis máquinas virtuales que no había preparado como esas guías habían esbozado.

Corrí VBoxManage showvminfo <uuid|name>y noté que el UUIDvalor coincidía con el Hardware UUIDvalor, lo que me llevó a suponer que si alguna Definición de VM no tenía un uuidatributo en el /VirtualBox/Machine/Hardwarenodo, entonces la VM usaría el valor "Machine UUID" como el valor "Hardware UUID". Entonces, para mi VM de plantilla, tenía un "UUID de hardware" que podía usar; Solo tenía que encontrar cómo transferirlo a los clones que haría.

Para asegurarse de que el UUID se transfiera, puede tomar uno de dos enfoques:

  • Puede editar el archivo de definición de VM de plantilla directamente. El "UUID de hardware" solo se transferirá a los clones si /VirtualBox/Machine/Hardwaretiene el uuidatributo. Entonces, copie el /VirtualBox/Machine uuidatributo y agréguelo al /VirtualBox/Machine/Hardware uuidatributo. Probablemente desee reiniciar la base de datos de la máquina VirtualBox después de esto, cerrando / eliminando cualquier proceso de VirtualBox que esté ejecutando. (VBoxSVC a veces persiste en Windows; es posible que deba eliminarlo desde el Administrador de tareas).
  • Puede clonar su plantilla y crear una nueva VM de plantilla, y luego usarla VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>para configurar el "UUID de hardware" de la nueva plantilla en el "UUID de máquina" / "UUID de hardware" de la plantilla original. Digo que debe clonar la VM para crear una nueva VM de plantilla porque si intenta establecer el "UUID de hardware" con este comando en la plantilla original, no agregará el uuidatributo al /VirtualBox/Machine/Hardwarenodo, ya que aún puede implicarlo del "UUID de la máquina" y, por lo tanto, no copiará este valor a ningún clon que realice.
palswim
fuente
No está claro de qué VM estás hablando en el primer punto; también es mejor usarVBoxManage modifyvm --hardwareuuid <uuid>
CharlesB
2
El modifyvmcomando no establecerá el atributo de /VirtualBox/Machine/Hardwarenodo uuidsi pasa un UUID con el mismo valor que el atributo de /VirtalBox/Machinenodo de la VM uuid. Debe editar el archivo VBOX directamente.
palswim
3

Este script de PowerShell hace el trabajo:

  1. clone la máquina que ya está activada.
  2. cierre los precesos de virtualbox desde el administrador de tareas.
  3. ejecute este script, modificando las variables a sus valores.

Recuerde que los nombres de las máquinas virtuales distinguen entre mayúsculas y minúsculas.

$ORIGVirtualMachineName="BaseDevWin7"
$clonedVirtualMachineName="DevWin7a"
$vboxDir="c:\Program Files\Oracle\VirtualBox"
cd $vboxDir
$uid=$($($(.\VBoxManage.exe showvminfo $ORIGVirtualMachineName|select-string "Hardware UUID:").ToString()).Split())[4]
.\VBoxManage modifyvm $clonedVirtualMachineName --hardwareuuid $uid
Marcelo Saied
fuente
2

Gracias a las sugerencias anteriores, he clonado con éxito una máquina con Win7 invitado que se ejecuta en un host Kubuntu para fines de prueba sin reactivación.

Mi máquina ya estaba activada y (como se describió anteriormente) en realidad no tenía UUID de hardware.

Para mí, parece que el UUID de MACHINE es solo para la administración de Virtualbox, mientras que el UUID de HARDWARE es utilizado por la lógica de activación de Windows. Si no hay UUID de hardware, Virtualbox proporciona el UUID de la máquina al invitado, es decir, Microsoft conoce el UUID de la máquina.

Así es como funcionó bien sin reactivación en mi caso: 1) Copie la máquina virtual (carpeta) con el explorador de archivos normal. 2) Abra el archivo .vbox en un editor de texto simple. 3) Como no había ningún atributo UUID para el "hardware", copie el atributo UUID de la máquina (por ejemplo, uuid = "{xxx11111-2222-3333-4444-xxxxxxxxxxxx}") a la entrada "hardware". 4) Genere un nuevo UUID para la máquina, por ejemplo, con uuidgenerator.net. 5) Sobrescriba el VALOR de la máquina UUID con el valor UUID generado. => Listo.

Para administrar ambas máquinas en paralelo en VB Manager, es más complicado:
1. Cambiar el nombre del archivo .vdi del disco duro de los clones.
2. En la línea de comandos, proporcione un nuevo UUID al disco duro mediante el comando "VBoxManage internalcommands sethduuid .vdi. VBManager establecerá un nuevo UUID y lo mostrará.
3. En VB Manager agregue la nueva máquina. Edite la máquina agregando el nuevo archivo de disco duro (y elimine el vdi original, si aún está presente).

Ahora tiene ID únicos para todas las máquinas virtuales y discos duros. Puede administrar ambas máquinas dentro del Administrador de VB en paralelo.

Dieter Schlueter
fuente
1

Clon completo de la máquina. No lo comiences.

Desde la línea de comando:

VBoxManage modifyvm "Nombre de máquina virtual clonada" - hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Como UUID use la identificación de la máquina (o la identificación del hardware si está presente) de la máquina original.

Para obtener el uso de ese UUID:

VBoxManage showvminfo "Nombre de VM original"

Esto debería funcionar. Probado en Windows 10 invitado, ya activado.

usuario4691
fuente
Esto funciona en la mayoría de los casos, excepto cuando el UUID coincide con el atributo del /VirtalBox/Machinenodo de la VM uuid, como indican la pregunta y otro comentario .
palswim
0

La respuesta anterior funciona! Lo probé en una plantilla de Windows 10.

"Clone por completo la máquina. No la inicie. Desde la línea de comandos: VBoxManage modifyvm" Nombre de máquina virtual clonada "--hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Como UUID use la identificación de la máquina (o la identificación del hardware si está presente) del máquina original. Para obtener el uso de ese UUID: VBoxManage showvminfo "Nombre de VM original"

Esto debería funcionar. Probado en Windows 10 invitado, ya activado.

Revistas
fuente