[转帖]VMWare官网:无法关闭 ESXi 主机上的虚拟机 (1014165)

时间:2022-12-23 14:58:04

无法关闭 ESXi 主机上的虚拟机 (1014165)

https://kb.vmware.com/s/article/1014165?lang=zh_CN

  


Last Updated: 4/17/2019Categories: How to
 Symptoms

免责声明: 本文是 Unable to power off a virtual machine on an ESXi host (1014165) 的翻译版本。 尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。 有关最新内容,请参见英文版本。


 

  • 无法关闭 ESXi 主机上的虚拟机电源
  • 虚拟机无响应,且无法停止或终止
 
 Purpose

本文提供了在 ESXi 环境中停止虚拟机的信息。

注意: 本文仅适用于 ESXi,不适用于 ESX。 对于 ESX 主机,请参见 Powering off an unresponsive virtual machine on an ESX host (1004340)

注意: 如果尝试对虚拟机无响应的原因进行故障排除,通常情况下,最好先收集性能衡量指标,然后使虚拟机挂起或崩溃,以便收集更多故障排除信息。

有关详细信息,请参见:

 
 Resolution
警告: 请按顺序执行本文各节及各步骤中的操作。 请勿跳过其中的某节或某步骤,因为每个步骤可能都会对虚拟机产生影响。
 

使用 vSphere Client/vSphere Web Client 关闭虚拟机

请尝试使用客户端正常关闭虚拟机:

  1. 将 vSphere Client 或 vSphere Web Client 连接到 VMware vCenter Server 或 VirtualCenter Server。
  2. 右键单击虚拟机,然后单击关闭电源。 如果电源操作失败并出现错误“其他任务已在进行中 (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)
  3. 如果该虚拟机依然在运行,请尝试直接从主机执行该操作。
  4. 将 vSphere Client 或 VMware Host Client 直接连接到运行该虚拟机的 ESXi 主机。
  5. 右键单击虚拟机,然后选择关闭电源。

注意:从 vSphere 6.5,您可以启用虚拟机加密来保护虚拟机以及其文件。

在虚拟机上如果加密已启用,您必须有一组加密操作权限,否则你将无法关闭虚拟机的电源。

有关权限的详细信息,请参见 ESXi and vCenter Server 6.5 Documentation 中的"加密任务的前提条件和所需的特权"部分。

如果使用此客户端无法正常关闭该虚拟机的电源,请使用以下命令行选项之一。
 

安装 vSphere Command-Line Interface 工具

本文中某些过程使用 vSphere Command-Line Interface (vCLI)。 请确保已安装 vCLI,然后再继续操作。
注意: 对于 ESXi 4.x、ESXi 5.x 和 ESXi 6.0,可以从 vSphere Management Assistant (vMA) 访问远程命令行界面。 如果您首选使用此工具,请参见   vSphere Command-Line Interface Installation and Reference Guide 中的“安装 vMA 并从 vMA 运行命令”。
 

确定虚拟机的位置

确定虚拟机在哪个主机上运行。 在 VI Client 中虚拟机的摘要选项卡上提供了此信息。 后续命令将在当前运行该虚拟机的 ESXi 主机上执行或者会远程引用该主机。


使用 ESXi esxcli 命令关闭虚拟机电源

可以在本地或远程使用 esxcli 命令关闭 ESXi 5.x 或更高版本上运行的虚拟机电源。 有关详细信息,请参见 vSphere Command-Line Interface Reference 中的“esxcli vm 命令”部分。

  1. 在提供 esxcli 工具的位置打开一个控制台会话,该位置可以是 ESXi Shell、vSphere Management Assistant (vMA) 或 vSphere Command-Line Interface (vCLI) 的安装位置。
  2. 运行以下命令获取正在运行的虚拟机的列表(虚拟机由 World ID、UUID、显示名称和 .vmx 配置文件的路径标识):

    esxcli vm process list
     
  3. 运行以下命令关闭列表中虚拟机的电源:

    esxcli vm process kill --type= [soft,hard,force] --world-id= WorldNumber

    注意:
    有三种关机方法可供使用。 软关机是正常关机,硬关机是立即关机,强制关机则应在不得已的情况下使用。

    关机命令的替代语法为: esxcli vm process kill -t [ soft,hard,force] -w WorldNumber
     
  4. 重复步骤 2,验证该虚拟机已不再运行。


对于 ESXi 4.1:

  1. 运行以下命令获取正在运行的虚拟机的列表(虚拟机由 World ID、UUID、显示名称和 .vmx 配置文件的路径标识):

    esxcli vms vm list
     
  2. 运行以下命令关闭此列表中某个虚拟机的电源:

    esxcli vms vm kill --type= [soft,hard,force] --world-id= WorldNumber


使用 ESXi 命令行实用程序 vim-cmd 关闭虚拟机电源

  1. 在 ESXi 控制台上,进入技术支持模式并以 root 用户身份登录。 有关详细信息,请参见 Tech Support Mode for Emergency Support (1003677)
  2. 运行以下命令获取所有已注册虚拟机的列表(虚拟机由 VMID、显示名称和 .vmx 配置文件的路径标识):

    vim-cmd vmsvc/getallvms
     
  3. 运行以下命令获取虚拟机的当前状态:

    vim-cmd vmsvc/power.getstate VMID
     
  4. 使用步骤 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 命令向正在运行的虚拟机进程发送信号并终止该进程。
  1. 在 ESXi 控制台上,进入技术支持模式并以 root 用户身份登录。 有关详细信息,请参见 Tech Support Mode for Emergency Support (1003677)
  2. 运行以下命令确定虚拟机进程是否在 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) 在第二列中列出,在本示例中以粗体标识。 记下该数字以便在后面的步骤中使用。

    警告: 请确保您识别的是专门对应于您要修复的虚拟机的行。 如果对该虚拟机以外的虚拟机继续执行此过程,则可能会导致其他虚拟机停机。
     
  3. 如果列出了 vmx 进程,运行以下命令终止该进程:

    kill ProcessID
     
  4. 等待 30 秒后重复执行步骤 2 再次检查该进程是否存在。
  5. 如果该进程未终止,运行以下命令:

    kill -9 ProcessID
     
  6. 等待 30 秒后再次检查该进程。


在 ESXi 4.x 和更高版本中,可以使用 esxtop 中的 k 命令向正在运行的虚拟机进程发送信号并终止该进程。

  1. 在 ESXi 控制台上,进入技术支持模式并以 root 用户身份登录。 有关详细信息,请参见 Tech Support Mode for Emergency Support (1003677)
  2. 运行以下命令可运行 esxtop 实用程序:

    esxtop
     
  3. 按 c 切换到 CPU 资源利用率屏幕。
  4. 按 Shift+v 将视图限定为虚拟机。 这样会更容易在步骤 7 中找到 Leader World ID。
  5. 按 f 显示字段列表。
  6. 按 c 添加 Leader World ID 列。
  7. 按目标虚拟机的名称和 Leader World ID (LWID) 标识目标虚拟机。
  8. 按 k。
  9. 在 World to kill 提示符处,键入步骤 6 中获取的 Leader World ID,然后按 Enter。
  10. 等待 30 秒后验证该进程是否已不再列出。
注意: 如果上述过程未解决问题,并且 ESX\ESXi 主机有响应,则可能需要重新引导,才能将虚拟机置于关机状态。
 
 Related Information

如果使用上述方法无法关闭虚拟机电源,则通常表明底层基础架构(如 ESXi 主机或其支持硬件)存在问题。

如果怀疑是 ESXi 主机问题导致无法关闭虚拟机,请通过 vMotion 将所有未受影响的虚拟机迁移出该主机,然后强制停止该主机并显示紫色诊断屏幕。 有关详细信息,请参见 Using hardware NMI facilities to troubleshoot unresponsive hosts (1014767)

Unable to power off the virtual machine in an ESXi host
 
 Request a Product Feature
To request a new product feature, please contact your VMware representative.