Canalblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU
PROSERVIA : Pôle Conseil Expertise
Publicité
Newsletter
Archives
PROSERVIA : Pôle Conseil Expertise
22 juin 2012

Un outil pour déplacer une Machine Virtuelle Hyper-V sans l'exporter

Hyper-V est un magnifique outil, avec lequel la performance et la stabilité sont au rendez-vous. Mais coté administration, les outils laissent un peu à désirer, et malgré qu'une bonne partie des opérations courantes que l'on pourrait espérer avoir sont disponibles, elles n'en sont pas moins difficiles d'usage. On peut espérer que tout cela sera amélioré avec Windows Server 2008 R2.

Mais en attendant, les outils d'administration d'Hyper-V ne permettent que l'import d'une VM qui a au préalable déjà été exportée. Bien entendu, cela ne peut ne peut se faire que si la machine hôte originale est encore en fonctionnement. Dans le cas d'un serveur qui crash, exporter une VM deviens immédiatement plus complexe... voir impossible.

Il existe, ça et la, quelques techniques qui expliquent, à grand coup de mklink et icacls, comment recréer les liens symboliques et les permissions pour les fichiers de configuration de la VM. Mais cela reste particulièrement complexe et fastidieux, puisqu'il ne faut pas en oublier, et respecter un ordre bien précis, surtout si l'on veut effectuer l'opération d'attachement d'une VM sur un serveur live.

Après avoir trituré Hyper-V, ses symlinks et son interface WMI, j'ai donc créé un petit outil en mode GUI qui permet d'attacher et de détacher une VM qui n'a pas été exportée.

Quelques notes à son propos :

  • Une VM ne peut être détachée que si elle est en mode "Saved" ou "Stopped".
  • Il n'est pas nécessaire d'arrêter le service Hyper-V, toutes les modifications sont détectées en live par Hyper-V.
  • Une VM ne peux être importée que si elle comporte au moins un disque dur sur le controlleur IDE 0.
  • Tous les fichiers de la VM doivent être sous la même racine, HDD et Snapshots.
  • Tous les fichiers qui sont modifiés sont sauvegardés à coté des originaux, les fichiers de données ne sont pas modifiés, ni déplacés.
  • .NET 3.5 doit être installé.

Je mettrais à disposition les sources sous peu, ainsi qu'une version console.

Il y aura forcément des bugs, n'hésitez pas à m'en faire part. Je ne pourrais peut-être rien y faire, puisque il s'agit d'un outil qui effectue une opération qui (à priori) n'est pas prévue ou supportée par Microsoft.

L'outil est à télécharger ici.

--> Je vous conseille de voir ce post, je dois tester cet outil pour permettre des récupérations d'urgence!  

http://blogs.codes-sources.com/jay/archive/2009/02/19/outil-pour-d-placer-une-vm-hyper-v-sans-l-exporter.aspx


Publicité
Commentaires
K
hello,<br /> <br /> j'ai tenté avec une VM de test. Détachée, fichiers déplacés vers un autre disque et erreurs dés que j'essaye de remonter la VM. J'ai essayé de déplacer fichiers de la VM et fichier vhd dans le meme repertoire, mais idem.<br /> <br /> <br /> <br /> 30/12/2012 12:59:12 : Trying to detach VM Torrents<br /> <br /> 30/12/2012 12:59:12 : Removing Configuration symlink [C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\17B027E8-A75F-498A-BF7E-92F0C3251997.xml]<br /> <br /> 30/12/2012 12:59:12 : Removing Snapshot symlink []<br /> <br /> 30/12/2012 12:59:12 : Done<br /> <br /> 30/12/2012 13:03:46 : Trying to attach VM in D:\VMs\Torrents<br /> <br /> 30/12/2012 13:03:46 : System.Exception: No VM can be found in the specified directory.<br /> <br /> à HyperVMover.HyperVUtils.AttachVM(String hyperVRootPath, String path)<br /> <br /> à VMMove.Models.VMListView.LinkMachine(String path)<br /> <br /> à VMMove.MainWindow.linkButton_Click(Object sender, RoutedEventArgs e)<br /> <br /> 30/12/2012 13:04:17 : Trying to attach VM in D:\VMs\Torrents<br /> <br /> 30/12/2012 13:04:17 : System.Exception: No VM can be found in the specified directory.<br /> <br /> à HyperVMover.HyperVUtils.AttachVM(String hyperVRootPath, String path)<br /> <br /> à VMMove.Models.VMListView.LinkMachine(String path)<br /> <br /> à VMMove.MainWindow.linkButton_Click(Object sender, RoutedEventArgs e)<br /> <br /> 30/12/2012 13:04:40 : Trying to attach VM in D:\VMs\Torrents\Virtual Machines<br /> <br /> 30/12/2012 13:04:40 : System.Exception: No VM can be found in the specified directory.<br /> <br /> à HyperVMover.HyperVUtils.AttachVM(String hyperVRootPath, String path)<br /> <br /> à VMMove.Models.VMListView.LinkMachine(String path)<br /> <br /> à VMMove.MainWindow.linkButton_Click(Object sender, RoutedEventArgs e)<br /> <br /> 30/12/2012 13:04:56 : Trying to attach VM in D:\VMs\Torrents\Virtual Machines\17B027E8-A75F-498A-BF7E-92F0C3251997<br /> <br /> 30/12/2012 13:04:56 : System.Exception: No VM can be found in the specified directory.<br /> <br /> à HyperVMover.HyperVUtils.AttachVM(String hyperVRootPath, String path)<br /> <br /> à VMMove.Models.VMListView.LinkMachine(String path)<br /> <br /> à VMMove.MainWindow.linkButton_Click(Object sender, RoutedEventArgs e)<br /> <br /> 30/12/2012 13:05:40 : Trying to attach VM in D:\VMs\Torrents<br /> <br /> 30/12/2012 13:05:40 : System.Exception: No VM can be found in the specified directory.<br /> <br /> à HyperVMover.HyperVUtils.AttachVM(String hyperVRootPath, String path)<br /> <br /> à VMMove.Models.VMListView.LinkMachine(String path)<br /> <br /> à VMMove.MainWindow.linkButton_Click(Object sender, RoutedEventArgs e)
Publicité
Publicité
Publicité