Migrer une machine virtuelle VMware ESXi vers Proxmox VE ne consiste pas seulement à convertir un fichier VMDK. Il faut préserver la cohérence applicative, préparer les pilotes invités, recréer la topologie réseau et valider le démarrage sur un matériel virtuel différent. Ce guide décrit une méthode reproductible, adaptée à une migration ponctuelle comme à une série de bascules planifiées.
La procédure ci-dessous vise principalement les VM Windows et Linux exécutées sur ESXi, avec import dans Proxmox VE via qm importdisk. Elle privilégie une fenêtre d’arrêt contrôlée afin d’éviter tout écart de données entre le disque source et la VM migrée.
Préparer la migration et inventorier la VM source
Avant toute conversion, relevez la configuration complète de la VM dans vSphere ou directement sur l’hôte ESXi :
- Nombre de vCPU et mémoire.
- Type de firmware : BIOS ou UEFI.
- Présence éventuelle d’un vTPM.
- Contrôleur de disque VMware : LSI Logic, PVSCSI, SATA ou NVMe.
- Nombre et taille des disques virtuels.
- VLAN ou groupe de ports connecté à chaque carte réseau.
- Adresse IP, masque, passerelle, DNS et routes statiques.
- Adresse MAC si elle est utilisée dans des règles DHCP, firewall ou licences.
- Dépendances applicatives : base de données, réplication, sauvegardes, services clusterisés.
Arrêtez proprement la VM avant la copie finale. Pour une migration avec indisponibilité maîtrisée, la séquence recommandée est la suivante :
- Réaliser une première copie des fichiers VMDK pendant que la VM fonctionne, si le volume est important.
- Planifier la bascule.
- Arrêter les services applicatifs.
- Arrêter le système invité.
- Copier une dernière fois les disques VMDK.
- Convertir, importer et démarrer dans Proxmox VE.
Sur ESXi, les disques sont généralement stockés dans un datastore. Une copie via SSH peut suffire pour une VM modeste, mais évitez de copier un VMDK alors que des snapshots VMware sont actifs ou que la VM continue à écrire dessus.
Exemple de copie depuis un hôte Proxmox vers ESXi :
mkdir -p /var/lib/vz/import/esxi-vm01
scp root@esxi01:/vmfs/volumes/datastore1/VM01/VM01.vmdk \
/var/lib/vz/import/esxi-vm01/
Dans la pratique, il est souvent plus fiable de lancer la copie depuis ESXi vers un partage NFS, SMB ou un serveur intermédiaire, puis de transférer les fichiers vers le nœud Proxmox.
Vérifiez également la nature du VMDK. Un disque VMware peut être composé de plusieurs fichiers, notamment un petit fichier descripteur et un fichier de données -flat.vmdk. Le fichier descripteur est celui qu’il faut fournir aux outils de conversion.
ls -lh /var/lib/vz/import/esxi-vm01/
Exemple de résultat attendu :
VM01.vmdk
VM01-flat.vmdk
Ne convertissez pas directement le fichier VM01-flat.vmdk si le fichier VM01.vmdk existe : le descripteur contient les informations de géométrie et de format nécessaires.
Préparer les systèmes invités, surtout Windows
Le principal échec de démarrage après migration concerne Windows qui ne dispose pas du pilote du contrôleur de stockage VirtIO. Si vous importez le disque puis attachez immédiatement celui-ci en VirtIO Block ou VirtIO SCSI, Windows peut afficher un écran bleu INACCESSIBLE_BOOT_DEVICE.
La solution la plus sûre consiste à installer les pilotes VirtIO avant l’arrêt de la VM source. Téléchargez l’ISO virtio-win depuis le dépôt Fedora VirtIO, montez-la dans la VM VMware et installez au minimum : Pour aller plus loin, consultez l’état de l’art de Proxmox VE.
- Le pilote de stockage
viostorouvioscsi. - Le pilote réseau
NetKVM. - Le service invité QEMU, si vous souhaitez utiliser l’agent invité Proxmox.
- Éventuellement le pilote de ballooning mémoire.
Pour Windows Server, l’installation peut être réalisée via le gestionnaire de périphériques ou depuis l’invite de commande élevée. Exemple d’installation forcée des pilotes depuis le média VirtIO monté en D: :
pnputil /add-driver D:\vioscsi\2k22\amd64\vioscsi.inf /install
pnputil /add-driver D:\NetKVM\2k22\amd64\netkvm.inf /install
Adaptez le chemin au système concerné : 2k19, 2k22, w10, w11, etc. Vérifiez ensuite dans le gestionnaire de périphériques que les pilotes sont présents dans le magasin de pilotes Windows.
Pour les distributions Linux courantes, les pilotes VirtIO sont généralement inclus dans le noyau. Vérifiez néanmoins que l’initramfs contient les modules requis :
lsinitramfs /boot/initrd.img-$(uname -r) | grep -E 'virtio|virtio_blk|virtio_scsi'
Sur Debian ou Ubuntu, regénérez l’initramfs si nécessaire :
update-initramfs -u -k all
Sur les systèmes utilisant LVM, UUID, multipath ou des règles udev spécifiques, documentez les dépendances avant migration. Un changement d’interface réseau ou de chemin de disque peut modifier certains identifiants visibles par le système.
Créer la VM cible dans Proxmox VE
Créez d’abord une VM vide dans Proxmox VE. Le numéro d’identifiant utilisé dans cet exemple est 101, le stockage cible est local-lvm, et le bridge réseau est vmbr0.
Pour une VM Linux utilisant le firmware BIOS et un disque importé en SCSI VirtIO :
qm create 101 \
--name vm01-migree \
--memory 8192 \
--cores 4 \
--cpu host \
--scsihw virtio-scsi-single \
--net0 virtio,bridge=vmbr0 \
--ostype l26
Pour une VM Windows récente utilisant UEFI, ajoutez une partition EFI et choisissez la machine Q35 :
qm create 101 \
--name win01-migree \
--memory 8192 \
--cores 4 \
--cpu host \
--machine q35 \
--bios ovmf \
--efidisk0 local-lvm:0,efitype=4m,pre-enrolled-keys=1 \
--scsihw virtio-scsi-single \
--net0 virtio,bridge=vmbr0 \
--ostype win11
Le firmware doit correspondre à celui de la VM VMware. Une VM installée en BIOS hérité ne démarrera pas automatiquement en UEFI, et inversement. Si vous ne connaissez pas le type de firmware d’origine, vérifiez les paramètres de la VM dans vSphere avant la création.
Pour réduire les risques sur une migration Windows, vous pouvez démarrer une première fois avec un contrôleur SATA ou avec une interface disque émulée plus universelle, puis basculer vers VirtIO après validation. Cela a toutefois un coût de performance et ne remplace pas l’installation préalable des pilotes.
Convertir et importer les disques VMDK
Deux approches sont pertinentes :
- Import direct par
qm importdisk, qui s’appuie sur les outils QEMU. - Conversion explicite avec
qemu-img convert, puis import du fichier converti.
La première est généralement la plus simple. La seconde est utile lorsque vous voulez inspecter le disque, imposer un format ou transférer un fichier déjà converti.
Import direct avec qm importdisk
La syntaxe de base est :
qm importdisk <VMID> <source-vmdk> <storage> --format <raw|qcow2>
Exemple d’import au format raw vers un stockage LVM-thin :
qm importdisk 101 \
/var/lib/vz/import/esxi-vm01/VM01.vmdk \
local-lvm \
--format raw
Le format raw est généralement recommandé sur local-lvm, ZFS, Ceph RBD ou tout stockage bloc gérant déjà ses propres mécanismes de snapshots et de thin provisioning.
Après l’import, vérifiez la configuration :
qm config 101
Vous verrez typiquement un disque non utilisé :
unused0: local-lvm:vm-101-disk-0
Attachez-le ensuite au contrôleur SCSI VirtIO :
qm set 101 \
--scsihw virtio-scsi-single \
--scsi0 local-lvm:vm-101-disk-0 \
--boot order=scsi0
Pour un disque système Windows dont le pilote VirtIO n’a pas été préparé, utilisez provisoirement SATA :
qm set 101 \
--sata0 local-lvm:vm-101-disk-0 \
--boot order=sata0
Une fois Windows démarré, installez le pilote VirtIO, éteignez la VM, puis rattachez le disque en SCSI VirtIO. Faites cette manipulation dans une fenêtre de maintenance : le nom de périphérique et l’ordre de boot changent.
Pour un stockage de type répertoire, par exemple local, importez plutôt au format qcow2 :
qm importdisk 101 \
/var/lib/vz/import/esxi-vm01/VM01.vmdk \
local \
--format qcow2
Le format qcow2 est utile pour les snapshots QEMU sur stockage fichier. Il ajoute cependant une couche de métadonnées et peut être moins performant qu’un volume raw dans certains scénarios intensifs en I/O. Pour aller plus loin, consultez notre dossier sur les alternatives à VMware.
Conversion avec qemu-img convert
Avant une conversion, inspectez le disque :
qemu-img info /var/lib/vz/import/esxi-vm01/VM01.vmdk
Conversion VMDK vers qcow2 :
qemu-img convert -p -f vmdk -O qcow2 \
/var/lib/vz/import/esxi-vm01/VM01.vmdk \
/var/lib/vz/import/esxi-vm01/VM01.qcow2
Conversion VMDK vers raw :
qemu-img convert -p -f vmdk -O raw \
/var/lib/vz/import/esxi-vm01/VM01.vmdk \
/var/lib/vz/import/esxi-vm01/VM01.raw
L’option -p affiche la progression. L’option -f vmdk force le format source et évite une détection ambiguë. Après conversion, vérifiez le fichier produit :
qemu-img info /var/lib/vz/import/esxi-vm01/VM01.qcow2
Importez ensuite le résultat :
qm importdisk 101 \
/var/lib/vz/import/esxi-vm01/VM01.qcow2 \
local \
--format qcow2
Ou, pour un fichier raw importé dans local-lvm :
qm importdisk 101 \
/var/lib/vz/import/esxi-vm01/VM01.raw \
local-lvm \
--format raw
Pour une VM possédant plusieurs disques, répétez l’opération pour chaque VMDK et respectez l’ordre logique des volumes. Par exemple, si scsi0 correspond au système et scsi1 aux données :
qm set 101 --scsi0 local-lvm:vm-101-disk-0
qm set 101 --scsi1 local-lvm:vm-101-disk-1
qm set 101 --boot order=scsi0
Reproduire la connectivité réseau sans créer de conflit
La configuration réseau VMware ne migre pas automatiquement. Dans Proxmox VE, il faut associer la carte virtuelle à un bridge, puis reproduire le VLAN si nécessaire.
Exemple de carte VirtIO connectée au bridge vmbr0 avec VLAN 120 :
qm set 101 --net0 virtio,bridge=vmbr0,tag=120
Si le bridge Proxmox transporte les VLAN en trunk, vérifiez que celui-ci est configuré avec vlan-aware yes dans
