Hai bisogno di esportare le VM Hyper-V e trasferirle da un host all’altro? E quanto a esportare una VM dalla tua workstation di sviluppo a un host Hyper-V in produzione? Se sì, sei nel posto giusto!
In questo articolo, imparerai come esportare ed importare una macchina virtuale utilizzando Hyper-V Manager e PowerShell. Pronto? Partiamo!
Prerequisiti
Questo articolo sarà un tutorial. Se hai intenzione di seguire passo dopo passo, avrai bisogno dei seguenti:
- PowerShell 7 o Windows PowerShell 5.1 – Questo tutorial si concentrerà su PowerShell 7, ma i comandi funzioneranno con Windows PowerShell 5.1.
- A Windows Server with Hyper-V enabled – This tutorial is based on the insider preview released March 2021, but any Windows Server from 2012R2 onward will suffice.
- A virtual machine guest – This tutorial is using an Alpine Linux guest because it’s light on resources. You can use any guest Operating System you like.
- A local Windows user account in the local administrators group on the Hyper-V host.
Passaggi per Esportare le VM Hyper-V
Se non sei un fan della riga di comando o hai solo una singola VM da salvare su disco, il gestore Hyper-V è una scelta solida. Presumendo che tu sia sul tuo host Hyper-V e che ci sia una macchina virtuale in esecuzione:
1. Nel menu di ricerca di Windows, digita “hyper”. La console del gestore Hyper-V dovrebbe apparire. Se è così, fai clic su di essa per aprirla.
2. Trova la VM da esportare, fai clic destro su di essa e fai clic su Esporta.

3. Successivamente, scegli una cartella dove salvare la VM e la configurazione e fai clic su Esporta.

Il luogo che scegli di salvare dovrebbe avere spazio di archiviazione sufficiente per la VM esportata. Questo varierà. Ricorda, puoi avere 60 GB allocati per il disco, ma questo non significa che il disco della VM sia cresciuto fino a 60 GB.
Una volta che Hyper-V inizia il processo di esportazione, vedrai lo stato dell’esportazione nella finestra Gestione Hyper-V.

4. Ora, conferma che tutti i file richiesti siano presenti. Dovresti vedere tre sotto-cartelle. Queste sotto-cartelle contengono tutti i file necessari per avviare la VM esportata; Snapshot, Dischi rigidi virtuali e Macchine virtuali.

- La cartella Snapshot contiene informazioni sullo snapshot per la VM. La cartella potrebbe essere vuota se non ci sono snapshot per la VM. In questa cartella vedrai le estensioni file VMCX, VMRS, e VMGS. Il file binario VMCX contiene informazioni di configurazione specifiche per la tua VM esportata. Il file binario VMRS contiene informazioni sullo stato di runtime della VM. Senza questo file, la VM non può avviarsi. Last but not least c’è il file VMGS. Non sono sicuro/a a cosa serva questo file. Se lo sai, lascia un commento.
Se hai esperienza precedente con Hyper-V, potresti aver notato qualcosa di diverso riguardo alle estensioni dei file. A partire da Windows Server 2016, Hyper-V non utilizza più file XML per le informazioni di configurazione e ha invece adottato file binari. Leggi di più su queste nuove estensioni.
Se la tua VM ha più di un checkpoint, vedrai più file VMCX, VMRS e VMGS per ogni checkpoint che la VM ha.

- La cartella Dischi rigidi virtuali contiene tutti i file dell’immagine del disco rigido o *.vhdx per la VM. Il file AVHDX o Disco rigido virtuale automatico è un disco di differenziazione utilizzato per i checkpoint della macchina virtuale. Se la tua macchina virtuale ha più di un checkpoint, vedrai più file AVHDX.

- La cartella Macchine virtuali contiene i file di configurazione della VM utilizzati per avviare la VM. Simile alla cartella degli snapshot, vedrai qui anche i file binari VMCX, VMRS e VMGS.

Se tutte e tre le cartelle sono presenti e contengono file, l’esportazione è stata eseguita con successo.
Utilizzo di PowerShell per esportare una VM
Se sei un fan della riga di comando o hai molte VM da esportare, anche utilizzare PowerShell per esportare una VM è un’ottima opzione. Per esportare un Hyper-V con PowerShell, utilizza il cmdlet Export-VM
. Per farlo, supponendo che tu sia sul tuo host Hyper-V e la tua VM sia offline:
1. Apri una console PowerShell.
2. Interroga l’host Hyper-V per ottenere un inventario delle tue VM e il nome della VM da esportare. Questo tutorial esporterà una VM chiamata Alpine Linux 01
.

Export-VM
command3. Crea una cartella per esportare la VM. Questo tutorial esporterà la VM a C:\Export_VM.
4. Ora esporta la VM utilizzando il cmdlet Export-VM
, fornendo il nome della macchina virtuale per il parametro Name
, il percorso della cartella in cui salvarla per il parametro Path
, e il parametro PassThru
.
Il parametro
PassThru
è facoltativo per restituire l’oggetto VM esportato. In caso contrario,Export-VM
non restituirà alcun output.

Quando una VM è in esecuzione,
Export-VM
non salverà automaticamente la memoria. Se desideri salvare i contenuti della memoria in esecuzione nella VM, utilizza il parametro-CaptureLiveState CaptureSavedState
conExport-VM
. Scopri di più sulla tecnologia utilizzata per catturare la memoria.
5. Ora rimuovi la VM da Hyper-V. Non preoccuparti! L’hai salvata!
Utilizzando Hyper-V Manager per importare una VM
Dopo aver esportato la VM, è successo un disastro e la VM è scomparsa. Nessun problema! L’hai già esportata su disco. Riprendiamola. Per farlo, presumendo che tu sia di nuovo sul tuo host Hyper-V:
1. Apri Hyper-V Manager.
2. Fai clic sull’elemento di menu Importa macchina virtuale situato sul lato destro della finestra di Hyper-V Manager. Ti verrà presentata la procedura guidata Importa macchina virtuale. Fai clic su Avanti.

3. Successivamente, inserisci il percorso della macchina virtuale esportata che desideri importare e clicca su Avanti. Per questo tutorial, la VM è salvata in C:\Export_VM\Alpine Linux 01.
A differenza dell’importazione tramite PowerShell, la procedura guidata individuerà automaticamente il file VMCX della VM per te.

4. Una volta che Hyper-V individua i file di configurazione della VM all’interno della cartella (in questo esempio, C:\Exported_VM\Alpine Linux 01\Virtual Machines\), Hyper-V ti chiederà di selezionare una macchina virtuale da importare. Scegli la VM che desideri importare e clicca su Avanti.

5. Successivamente, scegli il tipo di importazione che desideri eseguire. Innanzitutto, esploriamo più nel dettaglio le opzioni.
Quando scegli l’opzione ‘Registra la macchina virtuale sul posto (usa l’ID univoco esistente)’, stai assumendo che i file VM esportati siano nella loro posizione finale, il che significa che non stai spostando la VM in una nuova cartella. I file VM esportati diventano lo stato in esecuzione della macchina virtuale. L’UID non cambia.
L’UID è ciò che Hyper-V utilizza per identificare una macchina virtuale. Se Hyper-V rileva che lo stesso UID è attualmente registrato, riceverai un errore.
Quando ripristini la macchina virtuale, puoi scegliere una posizione o utilizzare la posizione predefinita di Hyper-V per copiare i file della macchina virtuale esportata.
Quando copi la macchina virtuale, è simile al ripristino di una VM esportata, ma con un nuovo ID univoco (UID). Un nuovo UID rende possibile ridistribuire la stessa macchina virtuale più volte sugli stessi o diversi host Hyper-V.
Per la dimostrazione, selezioniamo il Tipo di Importazione Copia della macchina virtuale. Copiare la VM genererà un nuovo ID univoco (UID). Ogni VM Hyper-V è identificata da un UID. Questa opzione va bene per ora, quindi clicca su Avanti.

6. Poiché hai scelto l’opzione Copia, puoi cambiare la posizione in cui sono memorizzati i file della macchina virtuale. Clicca su Avanti per accettare i valori predefiniti per questo tutorial.

7. Infine, scegli una posizione per la VM nota come Cartella di Archiviazione. La Cartella di Archiviazione è dove risiederanno i file VHDX e AVHDX. Per questo tutorial, accetta la posizione predefinita e clicca su Avanti.

8. Rivedi la pagina di riepilogo e quando sei pronto, clicca su Fine per iniziare l’importazione.

Quando Hyper-V completa l’importazione, torna alla finestra Gestione Hyper-V, e ora vedrai la VM importata, come mostrato di seguito.

Utilizzare PowerShell per Importare una VM
Se l’importazione di una VM tramite Gestione Hyper-V non è la tua cosa, nessun problema. Usa PowerShell! Per importare una VM con PowerShell, utilizzerai il cmdlet Import-VM. Considera il seguente scenario:
Hai esportato una VM, ed è posizionata in C:\Exported_VM\, e diciamo che viene eliminata accidentalmente, o forse è necessaria su un host Hyper-V diverso? Dato che è già esportata, è essenzialmente backup e può essere facilmente importata, quindi ripristinando la VM.
Se il comando Export-VM
salva una VM su disco, il comando Import-VM
fa l’opposto; legge una VM dal disco e la importa in Hyper-V.
1. Supponendo che tu abbia già aperto una console di PowerShell e ti trovi nella directory dove hai esportato una VM (C:\Exported_VM). Prima, esegui il comando Get-ChildItem
con lo switch Recurse
per elencare tutti i file e prendi nota del nome del file con l’estensione *.vmcx usando il codice qui sotto:
Potresti vedere più file .vmcx dipendenti dal fatto che la VM esportata abbia snapshot o meno. L’unico che ti serve per avviare la VM è il file VMCX situato nella cartella delle macchine virtuali.
Potresti vedere un output simile all’esempio sotto riportato:

2. Successivamente, utilizza il comando Import-VM
con il parametro Path
per specificare il file di configurazione delle VM (ottenuto nel passaggio precedente).
Ecco fatto! Hai registrato la VM al suo posto, utilizzando lo stesso UID che la VM aveva quando è stata esportata.

3. Ora verifica che l’UID sia lo stesso del nome del file .vmcx quando la VM è stata esportata. Puoi farlo utilizzando il codice qui sotto per interrogare WMI:
Dovresti vedere un output simile all’esempio seguente:

L’esempio sopra è stato un’importazione diretta dal file di configurazione della VM, e la VM ha mantenuto l’UID originale. In un ambiente di produzione, potresti voler generare un nuovo UID per evitare che una vecchia VM venga confusa con una nuova VM. Ecco dove entra in gioco il parametro Copy
.
L’importazione di una macchina virtuale utilizzando il parametro
Copy
copierà i file dalla posizione originale (C:\Exported_VM\) nei percorsi configurati del server Hyper-V. Quando utilizzato conGenerateNewId
, la VM può essere importata più volte sullo stesso server Hyper-V con un nuovo identificatore univoco (UID).
Questa volta, la VM importata non contiene lo stesso UID dell’esportazione. Vedrai gli UID vecchio e nuovo nella schermata sottostante:

Hyper-V ora copia la VM nei percorsi predefiniti che hai visto precedentemente importando una VM utilizzando Hyper-V Manager, ma attribuisce alla VM un nuovo UID.
Passaggi successivi
In questa guida, hai imparato come esportare e importare una VM Hyper-V utilizzando PowerShell e il manager Hyper-V integrato.
Ora che sai come esportare e importare macchine virtuali Hyper-V, prova a configurare l’Attivazione Automatica delle Macchine Virtuali (AVMA) per attivare le macchine virtuali Windows Server ospitate su Hyper-V.