Crea un clone di VirtualBox Machine che non causa la riattivazione di Windows dopo l'installazione di Windows


14

La maggior parte delle guide per l'installazione di Windows su VirtualBox per fungere da modello per i rapidi lavori di Windows ti dicono di fare alcuni passi per preparare la macchina virtuale prima di installare Windows (la migliore guida che ho trovato: grahamrhay.wordpress.com ; un'altra guida abbastanza buona: www .windowstablettv.com ). Sfortunatamente, non ho letto queste guide prima di installare e attivare Windows sulla VM che volevo usare come modello.

Voglio sapere come clonare la mia VM già attiva in modo tale da non richiedere la riattivazione da Windows.

Esaminando il file di definizione VM modello (il file VBOX o XML per la VM), il /VirtualBox/Machine/Hardwarenodo (ID XPath) non ha alcun uuidattributo. Ma, se provo a utilizzare VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>per impostare un nuovo UUID per la VM modello, allora la VM modello perde il suo stato di attivazione! (Per fortuna, avevo fatto un backup del modello.) Quindi, per raggiungere il mio obiettivo, non posso semplicemente seguire quelle guide fingendo di non aver ancora installato Windows.

Risposte:


11

Per fortuna, ho notato qualcosa su tutte le mie macchine virtuali che non avevo preparato come avevano indicato quelle guide.

Ho corso VBoxManage showvminfo <uuid|name>e ho notato che il UUIDvalore corrispondeva al Hardware UUIDvalore, portandomi a ipotizzare che se una definizione di macchina virtuale non avesse un uuidattributo nel /VirtualBox/Machine/Hardwarenodo, la macchina virtuale avrebbe usato il valore "UUID macchina" come valore "UUID hardware". Quindi, per la mia VM modello, aveva un "UUID Hardware" che potevo usare; Dovevo solo trovare il modo di trasferirlo su qualsiasi clone che avrei creato.

Per garantire che l'UUID venga trasferito, puoi adottare uno dei due approcci:

  • È possibile modificare direttamente il file di definizione VM modello. "UUID hardware" verrà trasferito ai cloni solo se /VirtualBox/Machine/Hardwareha l' uuidattributo. Quindi, copia l' /VirtualBox/Machine uuidattributo e aggiungilo /VirtualBox/Machine/Hardware uuidall'attributo. Probabilmente vuoi reinizializzare il database del computer VirtualBox dopo questo, chiudendo / uccidendo qualsiasi processo VirtualBox che stai eseguendo. (VBoxSVC a volte persiste su Windows; potrebbe essere necessario ucciderlo dal Task Manager.)
  • È possibile clonare il modello e creare una nuova VM modello, quindi utilizzare VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>per impostare il "UUID hardware" del nuovo modello sul "UUID macchina" / "UUID hardware" del modello originale. Dico che devi clonare la macchina virtuale per creare un nuovo modello di macchina virtuale perché se provi a impostare "UUID hardware" con questo comando sul modello originale, non aggiungerà l' uuidattributo al /VirtualBox/Machine/Hardwarenodo, poiché può ancora implicarlo dall '"UUID macchina", quindi non copierà questo valore su alcun clone che crea.

Non è chiaro di quale VM stai parlando nel primo punto; inoltre è meglio usareVBoxManage modifyvm --hardwareuuid <uuid>
CharlesB,

2
Il modifyvmcomando non imposterà l' attributo del /VirtualBox/Machine/Hardwarenodo uuidse si passa un UUID con lo stesso valore dell'attributo del /VirtalBox/Machinenodo della VM uuid. È necessario modificare direttamente il file VBOX.
Palswim,

3

Questo script PowerShell funziona:

  1. clonare la macchina che è già attivata.
  2. chiudi le virtualbox precesses dal task manager.
  3. esegui questo script, modificando le variabili ai tuoi valori.

Ricorda che i nomi delle macchine virtuali fanno distinzione tra maiuscole e minuscole.

$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

Grazie ai suggerimenti di cui sopra ho clonato con successo una macchina con guest Win7 in esecuzione su un host Kubuntu a scopo di test senza riattivazione.

La mia macchina era già attivata e (come descritto sopra) in realtà non aveva UUID hardware.

Per me sembra che l'UUID MACCHINA sia solo per la gestione di Virtualbox, mentre l'UUID HARDWARE è usato dalla logica di attivazione di Windows. Se non esiste alcun UUID hardware, Virtualbox fornisce l'UUID macchina al guest, ovvero Microsoft conosce l'UUID macchina.

Ecco come ha funzionato bene senza riattivazione nel mio caso: 1) Copia la macchina virtuale (cartella) con un normale browser di file. 2) Apri il file .vbox in un semplice editor di testo. 3) Poiché non vi era alcun attributo UUID per "hardware", copiare l'attributo UUID macchina (ad es. Uuid = "{xxx11111-2222-3333-4444-xxxxxxxxxxxx}") nella voce "hardware". 4) Genera un nuovo UUID per la macchina, ad es. Con uuidgenerator.net. 5) Sovrascrivi la macchina UUID VALUE con il valore UUID generato. => Fatto.

Per gestire entrambe le macchine in parallelo in VB Manager è più complicato:
1. Rinominare il file .vdi del disco rigido del clone.
2. Nella riga di comando fornire un nuovo UUID al disco rigido tramite il comando "Comandi interni VBoxManage sethduuid .vdi. VBManager imposterà un nuovo UUID e lo visualizzerà.
3. In VB Manager aggiungere il nuovo computer. Modificare il computer aggiungendo il nuovo file del disco rigido (e rimuovi vdi originale, se ancora presente).

Ora hai ID univoci per tutte le macchine virtuali e i dischi rigidi. È possibile gestire entrambe le macchine all'interno di VB Manager in parallelo.


1

Clonazione completa della macchina. Non avviarlo

Dalla riga di comando:

VBoxManage editvm "Cloned VM name" --hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Come UUID usa l'id macchina (o id hardware se presente) dalla macchina originale.

Per ottenere l'UUID che usi:

VBoxManage showvminfo "Nome VM originale"

Questo dovrebbe funzionare. Testato su guest Windows 10, già attivato.


Funziona nella maggior parte dei casi tranne quando l'UUID corrisponde all'attributo del /VirtalBox/Machinenodo della VM uuid, come indicato dalla domanda e da un altro commento .
palswim,

0

La risposta sopra funziona! L'ho provato su un modello di Windows 10.

"Clonazione completa della macchina. Non avviarla. Dalla riga di comando: VBoxManage editvm" Cloned VM name "- hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Poiché l'UUID usa l'ID macchina (o l'id hardware se presente) dal macchina originale Per ottenere l'UUID da utilizzare: VBoxManage showvminfo "Nome VM originale"

Questo dovrebbe funzionare. Testato su guest Windows 10, già attivato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.