Quand le bricolage procure plus de joie que la technique
Je vous l’avoue volontiers : j’ai ressenti plus de satisfaction à changer deux pneus sur une vieille remorque qu’à résoudre un problème de corrélation entre VMDK, Windows et leurs volumes. Et pourtant, techniquement, le second défi était bien plus ardu.
Pourquoi ? Parce que trouver une méthode fiable pour établir cette corrélation VMDK aux volunes Windows sans activer l’option disk.EnableUUID est un véritable casse-tête…
L’option magique… qui ne sert à rien dans mon cas
En effet, disk.EnableUUID
permet de faire remonter le numéro de série des disques dans le guest OS. C’est pratique, propre… et inutilisable si votre parc de VM n’a pas cette option activée, et que vous ne pouvez pas la modifier facilement (surtout en prod).
Un outil maison pour une frustration bien réelle
C’est justement de cette frustration (et de cette obstination) qu’est né ce petit outil PowerShell : Get-VMStorageWinMapping
. Grâce à lui, vous obtenez une correspondance claire entre les fichiers VHD/VHDX utilisés par vos machines virtuelles Hyper-V et les volumes visibles dans Windows – sans bidouilles obscures ni dépendances risquées.
Les trois méthodes de corrélation VMDK aux volumes Windows
Pour résoudre une corrélation VMDK aux volumes Windows, j’ai testé trois approches..
Methode | Avantages | Inconvénient |
---|---|---|
Méthode par taille | – Facile à implémenter – Peu fiable si plusieurs disques ont la même taille | – Ne nécessite pas de configuration préalable – Peut causer des erreurs dans les environnements complexes avec des disques clonés ou similaires |
Méthode par SerialNumber | – On ne peut plus fiable | – Ne fonctionne que si l’option disk.EnableUUID est activée dans la VM |
Méthode par slot ID et target ID | – Très fiable pour établir la correspondance entre les disques et les slots – Permet une correspondance précise, même dans des environnements complexes | – Les slot ID VMware peuvent dépasser 1024, nécessitant un ajustement de bits pour retrouver le slot ID Windows, une notion qui n’est décrite nullepart |
Méthode 1 : la fausse bonne idée
Je ne vais pas m’attarder. On compare simplement la taille des fichiers VMDK avec celles des volumes dans Windows. Ça marche… sauf quand deux volumes font la même taille. Et dans les environnements pro, devinez quoi ? C’est courant.
Méthode 2 : la méthode miracle qui ne marche jamais en prod
Beaucoup la vendent comme la solution idéale. En réalité, elle repose sur l’activation de disk.EnableUUID
. Et pour ça, il faut éteindre la VM. Super pratique en production, n’est-ce pas ? Merci, mais non.
Méthode 3 : là où ça devient vraiment intéressant
Comparer les disques via leurs IDs semble prometteur. Mais quel ID utiliser ? Celui du disque ? Du bus ? Du slot ? De la carte SCSI ? Très vite, on s’y perd.
L’idée : exploiter la « location » affichée par Windows
Certains IDs ne se comparent pas tels quels. Ils nécessitent une conversion. C’est le cas du slot ID, aussi appelé ID de la carte SCSI. Windows ne l’affiche pas directement mais le traduit dans l’interface sous forme de « location » (ou « localisation » en français).

Quand j’ai mis en lumière cet ID, je me suis dit : génial, ce n’était pas sorcier. Mais en validant mon script à plus grande échelle, je suis tombé sur un Slot ID un peu singulier, présenté par VMware sous le numéro 1184 et observé sous Windows comme 161.
Un secret bien gardé
Après de longues conversations avec ChatGPT (il n’a pas réponse à tout, mais il aide à structurer ses idées), je suis tombé sur une liste d’IDs PCI étonnante :
ethernet0.pciSlotNumber = « 160 »
ethernet1.pciSlotNumber = « 1184 »
ethernet2.pciSlotNumber = « 192 »
ethernet3.pciSlotNumber = « 1216 »
ethernet4.pciSlotNumber = « 224 »
ethernet5.pciSlotNumber = « 1248 »
ethernet6.pciSlotNumber = « 256 »
ethernet7.pciSlotNumber = « 1280 »Si j’en crois l’ordre des pci slots on se rend compte qu’une carte sur deux à 1000 de plus qui semble venir de nul part
En regardant cette liste, on remarque qu’une carte sur deux a 1024 de plus, comme si ce bit supplémentaire venait de nulle part.
Une hypothèse… mais pas besoin qu’elle soit bonne
Hypothèse principale :
Ce décalage systématique de 1024 pourrait être une stratégie VMware pour identifier une deuxième « banque » de périphériques PCI ou une forme de séparation entre différents types de périphériques.
Il est possible que VMware attribue :
- Des slots normaux aux périphériques de base.
- Des slots supérieurs à 1000 à des périphériques considérés comme « secondaires » ou appartenant à un autre contrôleur virtuel.
Est-ce vrai ? Je ne suis pas sûr. Mais ça n’a pas tellement d’importance pour ce que je vais montrer ensuite.
Le secret percé : une histoire de bits
Je vous la fais courte. On a entamé une discussion sur la représentation binaire (c’était mon idée 😉), et là, tout s’éclaire. Voici un extrait de ce que j’ai observé :
VMware (décimal) | VMware (binaire) | Windows (décimal) | Windows (binaire) |
---|---|---|---|
160 | 00000000 10100000 | 160 | 00000000 10100000 |
1184 | 00000100 10100000 | 161 | 00000000 10100001 |
192 | 00000000 11000000 | 192 | 00000000 11000000 |
1216 | 00000100 11000000 | ? (à deviner) | ? |
Et nous avons tenté de poursuivre la logique:
VMware (décimal) | VMware (binaire) | Windows (décimal) | Windows (binaire) |
---|---|---|---|
160 | 00000000 10100000 | 160 | 00000000 10100000 |
1184 | 00000100 10100000 | 161 | 00000000 10100001 |
192 | 00000000 11000000 | 192 | 00000000 11000000 |
1216 | 00000100 11000000 | 193 | 00000000 11000001 |
224 | 00000000 11100000 | 224 | 00000000 11100000 |
1248 | 00000100 11100000 | 225 | 00000000 11100001 |
256 | 00000001 00000000 | 256 | 00000001 00000000 |
1280 | 00000101 00000000 | 257 | 00000001 00000001 |
Vous avez vu ? Un bit de poids fort à gauche devient un bit de poids faible à droite. En d’autres termes :
Windows = (VMware – 1024) + 1
Script PowerShell pour établir la corrélation VMDK aux volumes Windows
Ce script permet une corrélation VMDK Windows volume claire et automatisée, même sur des VMs complexes.
Voici un exemple d’appel simple :
.\Get-VMStorageWinMapping.ps1
En sortie, vous obtiendrez un tableau clair, avec pour chaque volume :
- Le nom du disque (Windows)
- La taille
- Le numéro de slot PCI
- Le nom du fichier VMDK associé (si déterminé)
- La lettre de volume correspondante
Envie de l’essayer ?
N’hésitez pas à l’adapter à vos besoins, l’améliorer ou même l’ouvrir en grand pour mieux le comprendre. Si vous trouvez une méthode encore plus fiable, je suis preneur !