问题:在ESXi虚拟机上,突然遇到应用无响应的情况。进入管理页面,尝试关闭虚拟机电源,却发现无法关闭。
排查:重复点击关闭电源按钮,仍然无法关闭,显示有一个任务正在进行
查找网上资料:找到了官方网站的一些办法
使用 ESXi esxcli 命令关闭虚拟机电源
可以在本地或远程使用 esxcli
命令关闭 ESXi 5.x 或更高版本上运行的虚拟机电源。 有关详细信息,请参见 vSphere Command-Line Interface Reference 中的“esxcli vm 命令”部分。
在提供
esxcli
工具的位置打开一个控制台会话,该位置可以是 ESXi Shell、vSphere Management Assistant (vMA) 或 vSphere Command-Line Interface (vCLI) 的安装位置。运行以下命令获取正在运行的虚拟机的列表(虚拟机由 World ID、UUID、显示名称和
.vmx
配置文件的路径标识):esxcli vm process list
运行以下命令关闭列表中虚拟机的电源:
esxcli vm process kill --type= [soft,hard,force] --world-id= WorldNumber
注意:
有三种关机方法可供使用。 软关机是正常关机,硬关机是立即关机,强制关机则应在不得已的情况下使用。
关机命令的替代语法为:esxcli vm process kill -t [ soft,hard,force] -w WorldNumber
重复步骤 2,验证该虚拟机已不再运行。
对于 ESXi 4.1:
运行以下命令获取正在运行的虚拟机的列表(虚拟机由 World ID、UUID、显示名称和 .vmx 配置文件的路径标识):
esxcli vms vm list
运行以下命令关闭此列表中某个虚拟机的电源:
esxcli vms vm kill --type= [soft,hard,force] --world-id= WorldNumber
使用 ESXi 命令行实用程序 vim-cmd 关闭虚拟机电源
在 ESXi 控制台上,进入技术支持模式并以 root 用户身份登录。 有关详细信息,请参见 Tech Support Mode for Emergency Support (1003677)。
运行以下命令获取所有已注册虚拟机的列表(虚拟机由 VMID、显示名称和
.vmx
配置文件的路径标识):vim-cmd vmsvc/getallvms
运行以下命令获取虚拟机的当前状态:
vim-cmd vmsvc/power.getstate VMID
使用步骤 2 中获取的 VMID 关闭虚拟机电源,运行以下命令:
vim-cmd vmsvc/power.shutdown VMID
注意: 如果虚拟机无法关闭,请运行以下命令:vim-cmd vmsvc/power.off VMID
通过在 ESXi 上发送信号来关闭虚拟机
可以从命令行通过向进程发送信号来停止虚拟机。
警告: 该过程可能对 ESXi 主机有潜在危害。 如果您未能识别出正确的进程 ID (PID),并因此而终止了错误的进程,则可能会产生意料不到的结果。 如果您担心下面的过程,请向 VMware 技术支持提交一个支持请求,并在问题描述中注明本知识库文章的 ID (1014165)。 有关详细信息,请参见 How to Submit a Support Request。
在 ESXi 3.5 和更高版本中,可以使用 kill
命令向正在运行的虚拟机进程发送信号并终止该进程。
在 ESXi 控制台上,进入技术支持模式并以 root 用户身份登录。 有关详细信息,请参见 Tech Support Mode for Emergency Support (1003677)。
运行以下命令确定虚拟机进程是否在 ESXi 主机上运行:
ps | grep vmx
输出如下所示:7662 7662 vmx /bin/vmx
7667 7662 vmx /bin/vmx
7668 7662 mks:VirtualMachineName /bin/vmx
7669 7662 vcpu-0:VirtualMachineName /bin/vmx
将返回若干行,每个vmx
进程一行。 请标识目标虚拟机的父vmx
进程。 第一列包含的是 PID,第二列则包含该父进程的 PID。 请确保您仅终止父进程。 每个进程的父进程 ID (PID) 在第二列中列出,在本示例中以粗体标识。 记下该数字以便在后面的步骤中使用。
警告: 请确保您识别的是专门对应于您要修复的虚拟机的行。 如果对该虚拟机以外的虚拟机继续执行此过程,则可能会导致其他虚拟机停机。如果列出了
vmx
进程,运行以下命令终止该进程:kill ProcessID
等待 30 秒后重复执行步骤 2 再次检查该进程是否存在。
如果该进程未终止,运行以下命令:
kill -9 ProcessID
等待 30 秒后再次检查该进程。
在 ESXi 4.x 和更高版本中,可以使用 esxtop
中的 k
命令向正在运行的虚拟机进程发送信号并终止该进程。
在 ESXi 控制台上,进入技术支持模式并以 root 用户身份登录。 有关详细信息,请参见 Tech Support Mode for Emergency Support (1003677)。
运行以下命令可运行
esxtop
实用程序:esxtop
按 c 切换到 CPU 资源利用率屏幕。
按 Shift+v 将视图限定为虚拟机。 这样会更容易在步骤 7 中找到 Leader World ID。
按 f 显示字段列表。
按 c 添加 Leader World ID 列。
按目标虚拟机的名称和 Leader World ID (
LWID
) 标识目标虚拟机。按 k。
在
World to kill
提示符处,键入步骤 6 中获取的 Leader World ID,然后按Enter
。等待 30 秒后验证该进程是否已不再列出。
注意: 如果上述过程未解决问题,并且 ESX\ESXi 主机有响应,则可能需要重新引导,才能将虚拟机置于关机状态。
尝试:
尝试用命令关闭
soft关闭没有任何提示,hard提示摘不到id,再次运行列表已经没有了
换了一种方式也仍然不行
尝试kill-9,提示找不到进程
进入管理界面虚拟机还在,不是停止状态
尝试使用esxtop关闭
已经输入了进程号仍然关闭不了
通过运行:vim-cmd vimsvc/task_cancel task_id
取消挂起的任务。
注:如果步骤4中返回的信息中cancelable参数等于false时,表示任务不可取消,所以并不是所有的任务都能取消。
通过运行:vim-cmd vmsvc/power.shutdown VMID
关闭虚拟机。
仍然错误,应该还是有个任务在运行阻止了关闭
注:如果还是无法关闭,再执行:vim-cmd vmsvc/power.off VMID
执行后仍然失败
[root@MiWiFi-R3G-srv:~] vim-cmd vmsvc/power.off 24
Powering off VM:
Power off failed
看来只能使用重启大法了,这个机器上还有一个ikuai在使用,平时不轻易关闭
最后重启解决了,重启的时候无法正常关机,之前强制断电,然后启动起来就好了
分析:
至于为什么关不了机。经过排查,可能是因为有个2.5寸机械硬盘无响应,导致虚拟机连接硬盘超时,这个还真没什么好办法,机械硬盘太古老了。也可能是因为硬盘供电不行才无响应的。
评论区