Faire un clone de VirtualBox Machine qui ne provoque pas la réactivation de Windows après l'installation de Windows


14

La plupart des guides d'installation de Windows sur VirtualBox pour servir de modèle pour les travaux Windows rapides vous disent de prendre quelques mesures pour préparer la machine virtuelle avant d' installer Windows (le meilleur guide que j'ai trouvé: grahamrhay.wordpress.com ; un autre assez bon guide: www .windowstablettv.com ). Malheureusement, je n'ai pas lu ces guides avant d'installer et d'activer Windows sur la machine virtuelle que je voulais utiliser comme modèle.

Je veux savoir comment cloner ma machine virtuelle déjà active d'une manière qui ne nécessiterait pas une réactivation à partir de Windows.

En regardant dans le modèle de fichier de définition de machine virtuelle (le fichier VBOX ou XML pour la machine virtuelle), le /VirtualBox/Machine/Hardwarenœud (XPath ID) n'a aucun uuidattribut. Mais, si j'essaie d'utiliser VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>pour définir un nouvel UUID pour la machine virtuelle de modèle, la machine virtuelle de modèle perd son statut d'activation! (Heureusement, j'avais fait une sauvegarde du modèle.) Donc, pour atteindre mon objectif, je ne peux pas simplement suivre ces guides en prétendant que je n'ai pas encore installé Windows.

Réponses:


11

Heureusement, j'ai remarqué quelque chose sur toutes mes machines virtuelles que je n'avais pas préparé comme ces guides l'avaient décrit.

J'ai couru VBoxManage showvminfo <uuid|name>et j'ai remarqué que la UUIDvaleur correspondait à la Hardware UUIDvaleur, ce qui m'amène à supposer que si une définition de machine virtuelle n'avait pas d' uuidattribut dans le /VirtualBox/Machine/Hardwarenœud, la machine virtuelle utiliserait la valeur "UUID machine" comme valeur "UUID matériel". Donc, pour ma machine virtuelle de modèle, il y avait un "UUID matériel" que je pouvais utiliser; Je devais juste trouver comment le transférer sur tous les clones que je ferais.

Pour vous assurer que les transferts UUID, vous pouvez adopter l'une des deux approches:

  • Vous pouvez modifier directement le modèle de fichier de définition de machine virtuelle. Le "Hardware UUID" ne sera transféré aux clones que s'il /VirtualBox/Machine/Hardwarepossède l' uuidattribut. Copiez donc l' /VirtualBox/Machine uuidattribut et ajoutez-le à l' /VirtualBox/Machine/Hardware uuidattribut. Vous voudrez probablement réinitialiser la base de données de la machine VirtualBox après cela, en fermant / tuant tout processus VirtualBox que vous exécutez. (VBoxSVC s'attarde parfois sur Windows; vous devrez peut-être le supprimer à partir du Gestionnaire des tâches.)
  • Vous pouvez cloner votre modèle et créer une nouvelle machine virtuelle de modèle, puis utiliser VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>pour définir "l'UUID matériel" du nouveau modèle sur "l'UUID de la machine" / "l'UUID matériel" du modèle d'origine. Je dis que vous devez cloner la machine virtuelle pour créer un nouveau modèle de machine virtuelle, car si vous essayez de définir le "Hardware UUID" avec cette commande sur le modèle d'origine, il n'ajoutera pas l' uuidattribut au /VirtualBox/Machine/Hardwarenœud, car il peut toujours l'impliquer de la "Machine UUID", et ne copiera donc pas cette valeur dans un clone qu'il crée.

On ne sait pas de quelle VM vous parlez au premier point; il est également préférable d'utiliserVBoxManage modifyvm --hardwareuuid <uuid>
CharlesB

2
La modifyvmcommande ne définira pas l' attribut de /VirtualBox/Machine/Hardwarenœud uuidsi vous transmettez un UUID avec la même valeur que l' attribut de /VirtalBox/Machinenœud de la machine virtuelle uuid. Vous devez modifier le fichier VBOX directement.
palswim

3

Ce script PowerShell fait le travail:

  1. cloner la machine déjà activée.
  2. fermez les pré-requis de virtualbox depuis le gestionnaire de tâches.
  3. exécutez ce script, en modifiant les variables à vos valeurs.

N'oubliez pas que les noms des machines virtuelles sont sensibles à la casse.

$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

2

Grâce aux conseils ci-dessus, j'ai réussi à cloner une machine avec un invité Win7 fonctionnant sur un hôte Kubuntu à des fins de test sans réactivation.

Ma machine était déjà activée et (comme décrit ci-dessus) n'avait en fait aucun UUID matériel.

Pour moi, il semble que l'UUID MACHINE est uniquement destiné à la gestion de Virtualbox, tandis que l'UUID HARDWARE est utilisé par la logique d'activation de Windows. S'il n'y a pas d'UUID matériel, Virtualbox fournit l'UUID de la machine à l'invité, c'est-à-dire que Microsoft connaît l'UUID de la machine.

Voici donc comment cela a bien fonctionné sans réactivation dans mon cas: 1) Copiez la machine virtuelle (dossier) avec le navigateur de fichiers normal. 2) Ouvrez le fichier .vbox dans un simple éditeur de texte. 3) Comme il n'y avait pas d'attribut UUID pour le "matériel", copiez l'attribut UUID de la machine (par exemple uuid = "{xxx11111-2222-3333-4444-xxxxxxxxxxxx}") dans l'entrée "matériel". 4) Générez un nouvel UUID pour la machine, par exemple avec uuidgenerator.net. 5) Remplacez la valeur UUID de la machine par la valeur UUID générée. => Terminé.

Pour gérer les deux machines en parallèle dans VB Manager, il est plus difficile:
1. Renommez le fichier .vdi du disque dur des clones.
2. En ligne de commande, fournissez un nouvel UUID au disque dur via la commande "VBoxManage internalcommands sethduuid .vdi. VBManager définira un nouvel UUID et l'affichera.
3. Dans VB Manager, ajoutez la nouvelle machine. Modifiez la machine en ajoutant le nouveau fichier de disque dur (et supprimez le vdi d'origine, s'il est toujours présent).

Vous disposez désormais d'ID uniques pour toutes les machines virtuelles et tous les disques durs. Vous pouvez gérer les deux machines dans VB Manager en parallèle.


1

Clonage complet de la machine. Ne le lancez pas.

Depuis la ligne de commande:

VBoxManage modifyvm "Nom de machine virtuelle clonée" --hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

En tant qu'UUID, utilisez l'ID de la machine (ou l'ID matériel, le cas échéant) de la machine d'origine.

Pour obtenir l'utilisation de cet UUID:

VBoxManage showvminfo "Nom de machine virtuelle d'origine"

Cela devrait fonctionner. Testé sur l'invité Windows 10, déjà activé.


Cela fonctionne dans la plupart des cas, sauf lorsque l'UUID correspond à l' attribut du /VirtalBox/Machinenœud de la machine virtuelle uuid, comme l' indiquent la question et un autre commentaire .
palswim

0

La réponse ci-dessus fonctionne! Je l'ai testé sur un modèle Windows 10.

"Clonage complet de la machine. Ne la démarrez pas. À partir de la ligne de commande: VBoxManage modifyvm" Nom de la machine virtuelle clonée "--hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Comme UUID, utilisez l'ID de la machine (ou l'ID du matériel si présent) à partir du machine d'origine. Pour obtenir cet UUID, utilisez: VBoxManage showvminfo "Original VM name"

Cela devrait fonctionner. Testé sur l'invité Windows 10, déjà activé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.