Hyper-V : impossible de charger une configuration de machine virtuelle

J’ai mis à niveau mon serveur hôte Hyper-V Windows 2008 vers Windows 2008 R2 la nuit dernière. La mise à niveau s’est bien passée, mais lorsqu’il s’est stabilisé sur la nouvelle version, j’ai trouvé deux machines virtuelles sur dix-sept manquantes dans l’interface de la console Hyper-V.

Dans le journal des événements Hyper-V, je vois :

Log Name:      Microsoft-Windows-Hyper-V-VMMS-Admin
Source:        Microsoft-Windows-Hyper-V-VMMS
Date:          6/4/2011 2:31:26 AM
Event ID:      16300
Task Category: None
Level:         Error
Keywords:
User:          SYSTEM
Computer:      elune
Description:
Cannot load a virtual machine configuration: General access denied error (0x80070005) (Virtual machine ID 5185AC13-4148-4AFE-9024-6E74FE3C9754)
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Hyper-V-VMMS" Guid="{6066F867-7CA1-4418-85FD-36E3F9C0600C}" />
    <EventID>16300</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8000000000000000</Keywords>
    <TimeCreated SystemTime="2011-04-05T18:31:26.432942100Z" />
    <EventRecordID>641</EventRecordID>
    <Correlation />
    <Execution ProcessID="1964" ThreadID="2064" />
    <Channel>Microsoft-Windows-Hyper-V-VMMS-Admin</Channel>
    <Computer>elune</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <UserData>
    <VmlEventLog xmlns:auto-ns2="http://schemas.microsoft.com/win/2004/08/events" xmlns="http://www.microsoft.com/Windows/Virtualization/Events">
      <VmName>
      </VmName>
      <VmId>5185AC13-4148-4AFE-9024-6E74FE3C9754</VmId>
      <ErrorMessage>%%2147942405</ErrorMessage>
      <ErrorCode>0x80070005</ErrorCode>
    </VmlEventLog>
  </UserData>
</Event>

Ces VM « manquantes » n’ont aucun instantané en ligne lié à elles. Même pour celles qui en avaient, j’ai supprimé et fusionné les instantanés selon les conseils de Microsoft, et elles ont « survécu ».

Il semble y avoir beaucoup de discussions sur « General access denied error (0x80070005) » en ce qui concerne le démarrage des machines virtuelles. Mais dans mon cas, c’est le service Hyper-V qui est incapable de charger la configuration, donc Hyper-V sait où se trouvent ces emplacements de configuration de VM mais n’a pas la permission d’y accéder ?

Les trois services Hyper-V sont lancés avec le compte LOCAL SYSTEM, et les dossiers « Virtual Machines » de ces VM accordent bien les permissions Contrôle total. Ce que j’observe des autres VM, c’est que leurs dossiers ont des ACE supplémentaires pour le groupe Virtual Machines et le GUID de la VM elle-même ?

J’ai essayé de dupliquer cette structure d’ACE, mais Windows ne peut pas localiser les principaux GUID de ces VM manquantes. Qu’est-ce qui causerait ce problème ?


Source : Server Fault

Eh bien, c’est un moyen étrange.

L’élément clé est que Windows/Hyper-V fait référence à une « liste » quelque part pour lui indiquer quelles machines virtuelles sont enregistrées auprès du serveur. Mes machines virtuelles sont dispersées sur plusieurs disques, il doit donc y avoir un référentiel centralisé. Qui se trouve être :

C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines

Il y a des liens symboliques qui font référence aux emplacements physiques des fichiers XML de configuration réels. J’ai remarqué que les liens des VM problématiques avaient une icône de « verrou ».

J’ai modifié l’ACL de sécurité du lien symbolique problématique. En effet, il n’a pas le compte NT Virtual Machine comme les autres, j’ai donc accordé le Contrôle total au groupe Users. J’ai redémarré le service Hyper-V Virtual Machine Management, et il pouvait à nouveau charger les VM manquantes. Il semble fonctionner sans les comptes Virtual Machine.

Je n’ai toujours pas obtenu les réponses approfondies complètes que je cherchais pour expliquer exactement ce que Hyper-V exige de ces comptes Virtual Machine, mais au moins la configuration originale de la machine virtuelle peut être réutilisée.