VMware ESXI 虚拟机无法关机
前言:昨天通过kibana发现elastic集群状态变成Red,在开发工具中通过命令行排查发现有一台elastic节点消失了,便试图登录节点发现登陆失败,本地的elastic节点是通过VMware ESXI 创建出的虚拟机,登陆ESXI发现已经卡死,web界面点击关闭电源等了几分钟发现关机失败,便打开SSH通道通过命令行登录排查。
一:打开ESXI SSH通道
登陆VMware ESXI web管理界面,主机-操作-服务-启用Secure Shell(SSH),默认是禁用的,开启后重启ESXI后又会恢复为禁用。
二:通过SSH客户端或者终端登陆
我使用的是mac,直接通过终端进行ssh登陆,密码为web管理界面登陆的root密码。
三:使用ESXI命令行关闭
1:通过运行:vim-cmd vmsvc/getallvms
获取所有已注册虚拟机的列表,找到无法正常关机的虚拟机的VMID,我这里需要记住es3的VMID:6
2:通过运行:vim-cmd vmsvc/power.getstate VMID
查看目前虚拟机的运行状态。
注:我之前在web管理界面点击了关闭电源,通过命令行查看可以发现虚拟机仍处于开机状态。
3:通过运行:vim-cmd vmsvc/get.tasklist VMID
查看未能正常关闭的虚拟机是否有挂起的任务阻止了虚拟机关机。
注:我写文档的时候环境已经恢复了,所以这里没有挂起的任务,故障情况下,此处有挂起的任务,当时着急修复忘记截图,此处引用官方示例图
4:通过运行:vim-cmd vimsvc/task_info task_id
获取挂起任务的详细信息,task_id 引用步骤3中(官方示例图)获取到的任务id。
5:通过运行:vim-cmd vimsvc/task_cancel task_id
取消挂起的任务。
注:如果步骤4中返回的信息中cancelable参数等于false时,表示任务不可取消,所以并不是所有的任务都能取消。
6:通过运行:vim-cmd vmsvc/power.shutdown VMID
关闭虚拟机。
注:如果还是无法关闭,再执行:vim-cmd vmsvc/power.off VMID
四:使用ESXI esxcli 命令关闭
1:通过运行:esxcli vm process list
获取正在运行的虚拟机列表,找到无法正常关闭的虚拟机World ID。
2:通过运行以下命令之一关闭无法正常关闭的虚拟机。
esxcli vm process kill -t=soft -w=WorldID
esxcli vm process kill -t=hard -w=WorldID
esxcli vm process kill -t=force -w=WorldID
注:-t=soft 表示安全关闭虚拟机。
-t=hard表示不做任何检查,立即关闭。
-t=force表示强制关闭。
五:通过kill 虚拟机进程进行关机
警告:官方推荐的方法为步骤三和步骤四,此步骤具有高风险,有可能会导致虚拟机异常,请斟酌谨慎使用。如你使用此步骤引起虚拟机异常,概不负责。
1:通过运行 ps | grep vmx
获取所有虚拟机的进程。
可以看到,启动了几个虚拟机,就会有几个vmx的主进程。
2:通过运行 kill -9 PID
便可以将es3 虚拟机进程关闭,虚拟机也就关闭了。
总结
大部分虚拟机无法关机通过步骤三和步骤四基本能解决,如果步骤三和步骤四还是不能关闭虚拟机,需要根据虚拟机的重要性判断是否使用步骤五。
很不幸,我使用以上所有方法后还是无法关闭,使用步骤五kill -9时,提示进程不存在,但是ps 结果返回进程还存在,由此判断大概率ESXI系统出现故障,本人能力有限,只能使用重启大法解决,先将其余虚拟机正常关机,然后再进行ESXI重启,ESXI重启过程中,一直卡在关机界面,后面断电重新开机问题才解决。
本文来自博客园,作者:鲜小橙,转载请注明原文链接:https://www.cnblogs.com/big-cousin/p/16879965.html