Transfert d’une machine virtuelle entre deux hyperviseurs Hyper-V R2

Je voulais partager avec vous une petite astuce bien pratique sur les hyperviseurs Hyper-V.

En effet il y a quelque temps je souhaitais déplacer une machine virtuelle d’un hyperviseur à un autre, et comme ces deux hyperviseurs n’étaient pas en cluster, je devais passer par la fonction d’export/import de la console Hyper-V.

Seulement voilà, je ne suis pas vraiment fan de cette fonction, en effet à plusieurs reprises j’ai eu des messages d’erreurs soit à l’export, ou encore pire à l’import de ma vm. Pas besoin de préciser que je n’avais aucune envie de passer 3 jours à investiguer sur ce problème, qui plus est, est totalement aléatoire, bref…

Je me suis donc dit, pourquoi ne pas simplement copier le contenu du répertoire de la VM entre mes 2 hyperviseurs, ce que j’ai fait, cela implique de créer une nouvelle VM sur l’hyperviseur de destination et de lui attacher le VHD existant…ok (sans parler des éventuels problèmes d’accès aux fichiers de la VM source, lockés par hyper-v)

MAIS, quid de l’identifiant de la VM ? vous savez ce petit fichier .xml stocké dans le répertoire de la vm et qui contient toute la configuration matérielle de la machine virtuelle (entre autre)…y compris toute la configuration réseau..

Alors oui, il est toujours possible de refaire la configuration, d’appliquer l’adresse IP existante et tout ca…mais bon, moi je cherchais une solution plus efficace.

J’ai donc chercher une autre solution, en me focalisant sur la possibilité de récupérer l’ID de la machine, ou plus exactement le fichier .xml correspondant.

ET j’ai trouvé mon bonheur :

En effet, il s’avère que la liaison entre la machine virtuelle présente dans la console Hyper-V et le fichier .xml du répertoire de données n’est en fait qu’un simple “lien statique” situé dans le répertoire suivant :

“%systemdrive%\ProgramData\Microsoft\windows\Hyper-V\Virtual Machines\”

Je vous invite à aller parcourir ce répertoire quand vous aurez 2 minutes…

J’ai donc trouvé le moyen de recréer ce lien via une simple ligne de commande, que voici : (a exécuter sur l’hyperviseur cible évidemment)

image

Il est entendu que dans mon exemple, le fichier .xml de ma VM est : “017A2917-3E58-44B5-9459-78A27A297C99.xml” et que le répertoire ou sont situés les fichiers de configuration sont : “D:\VM\SERVEUR\

La-dessus, un petite redémarrage du service de gestion des machines virtuelles, ou “net stop vmms & net start vmms” dans un cmd pour les puristes, et hop la VM apparait désormais dans la console.

Reste maintenant à autoriser le démarrage et l’exécution de cette VM à un compte très particulier, qui est en fait le compte système de la machine virtuelle. Comme un exemple vaut mieux que des explications, je vous laisse découvrir les commandes ci-dessous :

La commande ci-dessous donne les accès au “lien statique” pour le compte de la VM

image

La commande ci-dessous donne les accès à tout le répertoire de la VM pour le compte de la VM

image

ATTENTION:

Si le chemin de destination de la VM est différent du chemin source, par exemple « D:\ » au lieu de « E:\ » il faudra modifier le fichier .XML de la vm pour lui indiquer le nouveau chemin, notamment pour récupérer le fichier .VHD (PATHNAME type)

Et voilà, il vous reste juste à démarrer la VM, ou un nouveau redémarrage du service Hyper-v si besoin, et vous retrouvez votre machine virtuelle comme si rien ne s’était passé !!

A bientôt pour une prochaine astuce Sourire

Publicités
Galerie | Cet article, publié dans Articles, est tagué , , , , , , , , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s