J’ai récemment migré des machines virtuelles depuis VMware ESXi vers Proxmox VE et rencontré quelques problèmes au cours du processus. Voici mes notes au cas où ça pourrait aider.
VMware ESXi et Proxmox VE sont tous deux compatibles OVF. Le but est d’exporter une VM au format OVF depuis VMware ESXi puis d’importer l’OVF sur Proxmox VE.
Si VMware ESXi est accessible depuis Proxmox VE, on peut utiliser VMware OVF Tool directement depuis Proxmox VE afin d’exporter et copier l’OVF en un seul coup.
.bundle
(nécessite un compte VMware, qu’on peut créer gratuitement).chmod +x
puis l’éxecuter.Utilisation :
# ovftool vi://<username>@<host>:<port>/
Si on utilise SSL avec un certificat auto-signé, ajouter --noSSLVerify
.
OVF Tool demandera le mot de passe et listera les objets disponibles :
# ovftool --noSSLVerify vi://root@XXX.XXX.XXX.XXX:443/
Enter login information for source vi://XXX.XXX.XXX.XXX/
Username: root
Password: ***************
Error: Found wrong kind of object (ResourcePool). Possible completions are:
vm1
vm2
dir1/
dir2/
On peut récursivement lister les objets, e.g. ici avec un répertoire :
# ovftool --noSSLVerify vi://root@XXX.XXX.XXX.XXX:443/dir1/
Enter login information for source vi://XXX.XXX.XXX.XXX/
Username: root
Password: ***************
Error: Found wrong kind of object (ResourcePool). Possible completions are:
vm3
Lors de l’accès à une VM, les détails de la VM à exporter via OVF s’affichent :
# ovftool --noSSLVerify vi://root@XXX.XXX.XXX.XXX:443/dir1/vm3
Enter login information for source vi://XXX.XXX.XXX.XXX/
Username: root
Password: ***************
OVF version: 1.0
VirtualApp: false
Name: vm3
Download Size: Unknown
Deployment Sizes:
Flat disks: 100.00 GB
Sparse disks: Unknown
Networks:
Name: Foo
Description: Bar
Virtual Machines:
Name: vm3
Operating System: debian10_64guest
Virtual Hardware:
Families: vmx-13
Number of CPUs: 4
Cores per socket: 4
Memory: 6.00 GB
Disks:
Index: 0
Instance ID: 9
Capacity: 50.00 GB
Disk Types: SCSI-VirtualSCSI
Index: 1
Instance ID: 10
Capacity: 50.00 GB
Disk Types: SCSI-VirtualSCSI
NICs:
Adapter Type: VmxNet3
Connection: Foo
References:
File: /12/ParaVirtualSCSIController0:0
File: /12/ParaVirtualSCSIController0:1
Une fois la VM à exporter identifiée, on peut enregistrer l’OVF dans un fichier local sur Proxmox VE :
# ovftool --noSSLVerify vi://root@XXX.XXX.XXX.XXX:443/dir2/vm4 .
Enter login information for source vi://XXX.XXX.XXX.XXX/
Username: root
Password: ***************
Opening VI source: vi://root@XXX.XXX.XXX.XXX:443/dir2/vm4
Opening VI source: vi://root@XXX.XXX.XXX.XXX:443/dir2/vm4
Opening OVF target: .
Writing OVF package: ./vm4/vm4.ovf
Disk progress: 12%
[...]
Transfer Completed
Completed successfully
Pour certaines VM, j’ai eu cette erreur :
# ovftool --noSSLVerify vi://root@XXX.XXX.XXX.XXX:443/dir2/vm4
Enter login information for source vi://XXX.XXX.XXX.XXX/
Username: root
Password: ***************
Error: Fault cause: vim.fault.FileNotFound
Avec l’OVF disponible localement, on peut importer la VM via l’outil en ligne de commande qm
.
Utilisation :
qm importovf <id> path/to/file.ovf <proxmox_storage>
On peut également spécifier --format <qcow2 | raw | vmdk>
pour utiliser un format d’image disque spécifique lors de l’import.
À noter que cela n’aura aucun effet si on importe dans un stockage ZFS car ce dernier utilise une émulation block device et n’autorise que raw
.
Exemple avec l’OVF plus haut :
qm importovf 400 vm4/vm4.ovf local-zfs
transferred 0.0 B of 50.0 GiB (0.00%)
[...]
transferred 50.0 GiB of 50.0 GiB (100.00%)
La VM devrait maintenant être disponible dans l’interface web de Proxmox VE.
Vérifier la configuration importée. En particulier :
Une fois satisfait, essayer de démarrer la VM. Avec la VM opérationnelle, on peut :
# apt install qemu-guest-agent
# systemctl status qemu-guest-agent
# ls /usr/lib/vmware-tools
# systemctl status vmware
# which vmware-toolbox
# which vmware-toolbox-cmd
# dpkg -l | grep -I vm
# apt search open-vm-tools
# vmware-uninstall-tools.pl
# apt purge open-vm-tools
Certaines VM ne démarraient pas après avoir passé le bootloader, ne trouvant pas les partitions du disque.
initramfs
.Sur les systèmes basés sur Debian :
/etc/initramfs-tools/modules
:virtio_blk
virtio_scsi
initramfs
et arrêter la VM :# update-initramfs -u
# shutdown now
Je soupçonne qu’un problème similaire pourrait se produire avec le périphérique réseau si le module virtio_net
manque également.
Pour consulter la liste des modules chargés :
# lsmod | grep virtio
virtio_net 53248 0
net_failover 20480 1 virtio_net
virtio_console 32768 1
virtio_balloon 20480 0
virtio_blk 20480 0
virtio_scsi 20480 2
scsi_mod 249856 4 virtio_scsi,sd_mod,libata,sg
virtio_pci 28672 0
virtio_ring 28672 6 virtio_console,virtio_balloon,virtio_scsi,virtio_pci,virtio_blk,virtio_net
virtio 16384 6 virtio_console,virtio_balloon,virtio_scsi,virtio_pci,virtio_blk,virtio_net