Loading

VMware ESXI 虚拟机无法关机

前言:昨天通过kibana发现elastic集群状态变成Red,在开发工具中通过命令行排查发现有一台elastic节点消失了,便试图登录节点发现登陆失败,本地的elastic节点是通过VMware ESXI 创建出的虚拟机,登陆ESXI发现已经卡死,web界面点击关闭电源等了几分钟发现关机失败,便打开SSH通道通过命令行登录排查。

一:打开ESXI SSH通道

登陆VMware ESXI web管理界面,主机-操作-服务-启用Secure Shell(SSH),默认是禁用的,开启后重启ESXI后又会恢复为禁用。

image-20221111092646013

二:通过SSH客户端或者终端登陆

我使用的是mac,直接通过终端进行ssh登陆,密码为web管理界面登陆的root密码。

image-20221111094224434

三:使用ESXI命令行关闭

1:通过运行:vim-cmd vmsvc/getallvms 获取所有已注册虚拟机的列表,找到无法正常关机的虚拟机的VMID,我这里需要记住es3的VMID:6

image-20221111095123988

2:通过运行:vim-cmd vmsvc/power.getstate VMID 查看目前虚拟机的运行状态。

image-20221111095342415

注:我之前在web管理界面点击了关闭电源,通过命令行查看可以发现虚拟机仍处于开机状态。

3:通过运行:vim-cmd vmsvc/get.tasklist VMID 查看未能正常关闭的虚拟机是否有挂起的任务阻止了虚拟机关机。

image-20221111100144549

注:我写文档的时候环境已经恢复了,所以这里没有挂起的任务,故障情况下,此处有挂起的任务,当时着急修复忘记截图,此处引用官方示例图

image-20221111100544267

4:通过运行:vim-cmd vimsvc/task_info task_id 获取挂起任务的详细信息,task_id 引用步骤3中(官方示例图)获取到的任务id。

image-20221111101839254

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。

image-20221111102700857

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 获取所有虚拟机的进程。

image-20221111105504770

可以看到,启动了几个虚拟机,就会有几个vmx的主进程。

2:通过运行 kill -9 PID 便可以将es3 虚拟机进程关闭,虚拟机也就关闭了。

总结

大部分虚拟机无法关机通过步骤三和步骤四基本能解决,如果步骤三和步骤四还是不能关闭虚拟机,需要根据虚拟机的重要性判断是否使用步骤五。

很不幸,我使用以上所有方法后还是无法关闭,使用步骤五kill -9时,提示进程不存在,但是ps 结果返回进程还存在,由此判断大概率ESXI系统出现故障,本人能力有限,只能使用重启大法解决,先将其余虚拟机正常关机,然后再进行ESXI重启,ESXI重启过程中,一直卡在关机界面,后面断电重新开机问题才解决。

posted @ 2022-11-11 11:18  鲜小橙  阅读(2165)  评论(0编辑  收藏  举报