Copiare VM di HyperV on the fly sullo stesso server

In HyperV le VM possono essere facilmente spostate tra server diversi con LiveMigration o con le funzioni di Esporta/Importa. Tuttavia l’operazione non è fattibile nel caso in cui si voglia copiare le VM su altre unità dello stesso server (per poi effettuare il classico switch tra le lettere delle due partizioni interessate), in quanto si perdono le ACL attribuite da Hyper ai singoli file e cartelle: se lo si esegue infatti ci si ritrova con VM inutilizzabili. Quindi, qualora sia possibile fermare le VM per il tempo necessario (diversamente LiveMigration), come fare se si vuole copiare le VM su unità diverse dello stesso server HyperV mantenendo il tutto consistente e funzionale? Semplice: basta usare da shell il comando XCOPY. XCOPY infatti ha innumerevoli switch funzionali tra cui quelli atti allo scopo.

Facciamo un esempio.

Supponiamo di avere le nostre VM nel percorso E:\HYPERV (il cui storage sia quasi saturo) e volerle spostare in toto nel percorso F:\HYPERV (in cui abbiamo spazio a sufficienza). L’unità F:, al completamento dell’operazione, sarà poi scambiata con l’unità E: tramite il classico switch di lettera delle partizioni. Così si saranno spostate le VM sullo storage disponibile senza che si perdano le ACL e che HyperV “se ne accorga”.

Con questo script, da eseguire con credenziali amministrative, si ottiene quanto desiderato in modo facile ed indolore.

rem Qui stoppiamo i servizi Hyperv
net stop vmms
net stop vmcompute
net stop HvHost

rem Attendiamo l’OK dell’operatore
pause

rem Copiamo fisicamente le VM tra le unità
XCOPY E:\HYPERV F:\HYPERV /E/I/H/K/O/X/Y

Alla fine dell’esecuzione sarà sufficiente cambiare la lettere della partizione E: in un’altra diversa (ad esempio in L:) e poi quella dell’unità F: in E: (usando Diskpart oppure il più semplice Disk management). Così avremo ricreato, agli occhi di HyperV, l’ambiente originale, ma nei fatti abbiamo ottenuto quanto richiesto.

Effettuato lo switch, potremo riavviare, con lo script che segue da shell (o da Gestione Servizi), i servizi di HyperV e riavremo le nostre VM operative.

rem Qui riavviamo i servizi Hyperv
net start HvHost
net start vmcompute
net start vmms

Quando si ha la necessità di spostare le VM su storage diversi dello stesso server e si ha la possibilità di spegnere le VM, XCOPY salva il sistemista. Diversamente HyperV su server diversi e via di LiveMigration.