无法关闭 ESXi 主机上的虚拟机 (1014165)
https://kb.vmware.com/s/article/1014165?lang=zh_CN
免责声明: 本文是 Unable to power off a virtual machine on an ESXi host (1014165) 的翻译版本。 尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。 有关最新内容,请参见英文版本。
- 无法关闭 ESXi 主机上的虚拟机电源
- 虚拟机无响应,且无法停止或终止
本文提供了在 ESXi 环境中停止虚拟机的信息。
注意: 本文仅适用于 ESXi,不适用于 ESX。 对于 ESX 主机,请参见 Powering off an unresponsive virtual machine on an ESX host (1004340)。
注意: 如果尝试对虚拟机无响应的原因进行故障排除,通常情况下,最好先收集性能衡量指标,然后使虚拟机挂起或崩溃,以便收集更多故障排除信息。
有关详细信息,请参见:
使用 vSphere Client/vSphere Web Client 关闭虚拟机
请尝试使用客户端正常关闭虚拟机:
- 将 vSphere Client 或 vSphere Web Client 连接到 VMware vCenter Server 或 VirtualCenter Server。
- 右键单击虚拟机,然后单击关闭电源。 如果电源操作失败并出现错误“其他任务已在进行中 (Another task is already in progress)”,请等待该任务完成,或者参见 Powering off a virtual machine fails with the error: Cannot power Off: Another task is already in progress (1027040) 或 vCenter operation times out with the error: Operation failed since another task is in progress (1004790)。
- 如果该虚拟机依然在运行,请尝试直接从主机执行该操作。
- 将 vSphere Client 或 VMware Host Client 直接连接到运行该虚拟机的 ESXi 主机。
- 右键单击虚拟机,然后选择关闭电源。
注意:从 vSphere 6.5,您可以启用虚拟机加密来保护虚拟机以及其文件。
在虚拟机上如果加密已启用,您必须有一组加密操作权限,否则你将无法关闭虚拟机的电源。
有关权限的详细信息,请参见 ESXi and vCenter Server 6.5 Documentation 中的"加密任务的前提条件和所需的特权"部分。
安装 vSphere Command-Line Interface 工具
- 对于 ESXi 3.5 主机,请参见 Remote Command-Line Interface Installation and Reference Guide 中的“远程 CLI 的安装和执行”。
- 对于 ESXi 4.0 主机,请参见 vSphere Command-Line Interface Installation and Reference Guide 中的“vSphere CLI 的安装、执行和命令概述”。
- 对于 ESXi 4.1 主机,请参见 vSphere Command-Line Interface Installation and Scripting Guide。
- 对于 ESXi 5.0 主机,请参见 vSphere Command-Line Interface Documentation。
- 对于 ESXi 5.1 主机,请参见 vSphere Command-Line Interface 5.1 Release Notes。
- 对于 ESXi 5.5 主机,请参见 vSphere Command-Line Interface Documentation。
- 对于 ESXi 6.0 主机,请参见 vSphere Command-Line Interface Documentation。
确定虚拟机的位置
使用 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 秒后验证该进程是否已不再列出。
如果使用上述方法无法关闭虚拟机电源,则通常表明底层基础架构(如 ESXi 主机或其支持硬件)存在问题。
如果怀疑是 ESXi 主机问题导致无法关闭虚拟机,请通过 vMotion 将所有未受影响的虚拟机迁移出该主机,然后强制停止该主机并显示紫色诊断屏幕。 有关详细信息,请参见 Using hardware NMI facilities to troubleshoot unresponsive hosts (1014767)。