I. Présentation
Lors de l’utilisation de machines virtuelles sous VMware ESXi, il peut arriver qu’une machine virtuelle soit visuellement allumée dans le client vSphere mais que le vSphere lui estime qu’elle est allumée. Cet état intermédiaire et plutôt curieux oblige une extinction forcée et manuelle en ligne de commandes de la VM concernée.
Lorsque l’on tentera d’éteindre depuis le client vSphere la VM, on obtiendra le message d’erreur suivant : « L’opération tentée ne peut être effectué dans l’état actuel (Désactivé). »
Avant de commencer, vous devez activer le SSH et le Shell sur votre serveur ESXi pour initier une connexion à distance en SSH (port 22).
II. Procédure
Commencez par lister toutes les VMs exécutées sur cet ESXi :
vim-cmd vmsvc/getallvms
On obtient une liste :
On repère l’identifiant (ID) de la VM que l’on souhaite éteindre, ici 268. On demande à obtenir l’état de cette VM :
vim-cmd vmsvc/power.getstate 268
Du point de vue de l’ESX, cette VM est allumée :
« Retrieved runtime info
Powered on »
On va tenter d’éteindre la machine virtuelle proprement mais il y a de fortes chances pour que ça ne fonctionne pas… Indiquez la commande ci-dessous avec votre ID :
vim-cmd vmsvc/power.off 268
Ceci ne fonctionne pas:
« Powering off VM:
Power off failed »
Désormais nous allons réaliser un arrêt forcé mais pour cela il faut obtenir le « World ID » correspondant à la VM. On va lister les processus VM en fonctionnement :
esxcli vm process list
On repère la ligne WorldID de la VM ciblée :
Ma VM avec l’ID 268 dispose du WorldID 4365, donc pour forcer l’arrêt cela donnera :
esxcli vm process kill -t force -w 4365
Enfin, on vérifie que la VM est bien éteinte avec la commande que l’on a utilisée précédemment :
vim-cmd vmsvc/power.getstate 268