Comment dépanner et arrêter une machine virtuelle qui ne répond pas sur VMware ESXi

Gérer une machine virtuelle bloquée ou ne répondant plus sur ESXi peut s’avérer très problématique, surtout lorsque les commandes d’arrêt classiques restent sans effet. Parfois, la VM se bloque complètement dans un état anormal, et tenter de l’arrêter depuis vSphere ou via les commandes d’alimentation habituelles génère des erreurs telles que « une autre tâche est déjà en cours » ou « l’opération ne peut pas être effectuée ».Dans ce cas, il faut intervenir de force et l’arrêter brutalement. Attention cependant : cette opération est comparable à la déconnexion brutale d’une machine physique, ce qui peut entraîner une perte de données dans le système d’exploitation invité. C’est pourquoi il est préférable de vérifier au préalable si un autre processus verrouille ses fichiers ou si des snapshots ou des sauvegardes sont en cours d’exécution.

Avant de procéder à l’arrêt de processus, assurez-vous que la machine virtuelle n’est impliquée dans aucune opération critique ni sauvegarde, sous peine de corrompre le disque ou de devoir restaurer une sauvegarde. Ces étapes nécessitent généralement un accès SSH à l’hôte ESXi ou une session PowerCLI depuis la machine où vous gérez vCenter.

Comment forcer l’arrêt d’une machine virtuelle bloquée dans ESXi

Identifiez l’hôte ESXi problématique et la machine virtuelle.

  • Commencez par identifier l’hôte ESXi qui exécute la machine virtuelle bloquée. Pour ce faire, utilisez le client vSphere : accédez à l’ onglet Résumé de la machine virtuelle, puis, sous Objet associé, vérifiez l’ hôte.
  • Vérifiez que le protocole SSH est activé sur cet hôte ESXi. Si ce n’est pas le cas, accédez à Gérer > Services dans l’interface web de l’hôte et démarrez SSH.

Se connecter via SSH et lister les machines virtuelles en cours d’exécution

  • Utilisez votre client SSH préféré (comme OpenSSH intégré à Windows ou PuTTY) et connectez-vous à l’hôte.
  • Exécutez esxcli vm process listcette commande : elle affiche toutes les machines virtuelles en cours d’exécution et leurs identifiants de processus (identifiants du monde).Par exemple, vous verrez une liste avec les noms des machines virtuelles, leurs identifiants du monde et leurs états ; pratique pour identifier la machine virtuelle bloquée.

Trouvez et terminez le processus de la machine virtuelle

  • Copiez l’identifiant mondial de la machine virtuelle que vous souhaitez arrêter. Il s’agit généralement d’un nombre de la forme 20598249.
  • Utilisez ensuite cette commande pour forcer sa désactivation : esxcli vm process kill --type=force --world-id=WorldNumber. Remplacez WorldNumberpar l’ID de votre machine virtuelle.
  • D’autres options sont également disponibles : l’arrêt progressif (une sorte d’arrêt en douceur), l’arrêt brutal (une coupure immédiate) et l’arrêt forcé (en dernier recours).Sur certaines configurations, l’arrêt progressif peut s’avérer plus efficace ; sinon, il faudra privilégier l’arrêt brutal ou l’arrêt forcé.

Par exemple, sur une configuration, la commande suivante a fonctionné : esxcli vm process kill --type=soft -w=20598249. Cela permet en quelque sorte d’arrêter la machine virtuelle en douceur. Sur certains systèmes, cette méthode fonctionne sans risque de corruption des données.

Utilisation de PowerCLI (si vous préférez programmer depuis Windows)

  • Vous pouvez également gérer cela depuis vCenter via PowerCLI ; inutile de vous connecter en SSH à chaque hôte. Connexion :Connect-VIServer <vCenter_or_ESXi_FQDN>
  • Vérifier l’état de la machine virtuelle avec :Get-VM “web1" | select name, PowerStates
  • Ensuite, forcez l’arrêt avec : Stop-VM -VM “web1" -Kill. Cela revient à cliquer sur « Forcer l’arrêt » dans l’interface graphique, mais via un script : rapide et efficace.

Utilisez esxtop pour plus de détails.

  • Lancez la commande esxtopvia SSH, appuyez sur la touche cpour afficher le processeur, puis SHIFT+Vsur la touche pour filtrer les processus de la machine virtuelle. Appuyez sur la touche fpour choisir les colonnes, appuyez cde nouveau sur la touche pour ajouter les informations LWID, puis sur la touche Enter. Trouvez le LWID de la machine virtuelle, puis appuyez sur la touche ket saisissez ce LWID pour arrêter le processus. C’est un peu fastidieux, mais ça fonctionne quand les autres méthodes échouent.

La méthode de dernier recours : tuer le processus parent

  • Si rien d’autre ne fonctionne, vous pouvez arrêter manuellement le processus depuis l’interface de ligne de commande de type Linux. Commencez par trouver son identifiant de processus avec : ps | grep “web2”.
  • Ensuite, forcez l’arrêt kill -9 <PID>. Attention toutefois, cette opération peut corrompre les disques ou rendre la machine virtuelle inutilisable jusqu’à sa restauration.
Parfois, après cela, un mode de récupération (comme l’environnement de récupération Windows) démarrera automatiquement si le système d’exploitation invité est Windows. En dernier recours, le redémarrage des agents de gestion sur l’hôte peut s’avérer utile, mais il s’agit d’une solution de dernier recours ; exécutez : /etc/init.d/hostd restartet /etc/init.d/vpxa restart.

Franchement, ces commandes peuvent paraître intimidantes au premier abord, mais sur une machine, il faut parfois s’y reprendre à plusieurs fois. N’oubliez pas que si le problème persiste, vous forcez l’arrêt. J’espère que cela permettra à certains de gagner du temps, car gérer des machines virtuelles bloquées est bien plus simple quand on sait comment les arrêter de force sans redémarrer tout l’hôte.

Résumé

  • Identifiez l’hôte de la machine virtuelle et connectez-vous via SSH.
  • Obtenez l’identifiant mondial de la machine virtuelle avecesxcli vm process list
  • Utilisez- esxcli vm process kill --type=force --world-id=IDle pour l’arrêter
  • Vous pouvez aussi utiliser les commandes PowerCLI si vous le souhaitez.
  • En dernier recours, interrompez le processus manuellement via SSH avec psetkill -9

Conclure

Arrêter une machine virtuelle complètement bloquée n’est pas une mince affaire, mais les commandes et étapes suivantes fonctionnent généralement. Attention, c’est une opération délicate, à n’utiliser qu’en dernier recours. La réaction peut varier selon les configurations ; il est donc possible de rencontrer des difficultés ou de devoir tester plusieurs méthodes. Savoir comment forcer l’arrêt d’une machine virtuelle peut néanmoins vous éviter bien des frustrations et des interruptions de service.