天天看点

在ESXi主机上关闭无响应的虚拟机

该方法适用于以下情况:

ESXi主机上的虚拟机不能关闭。

虚拟机无响应且不能停止。

这篇文章描述在ESXi环境中如何正确的关闭一台无响应的虚拟机。

警告: 请严格按照文章中的步骤操作。每一步操作对虚拟机都有一定的影响,所以请不要跳过其中任何一步!

用客户端尝试顺利关闭虚拟机:

1.     用vSphere Client或者 VI Client连接 VMware vCenter Server或VirtualCenter Server。

3.     如果虚拟机依然在运行,请尝试在主机上进行相同的操作。

4.     用vSphere Client或者 VI Client 直接连接ESXi主机来运行虚拟机。

5.     右键单击要关闭的虚拟机,从弹出的快捷菜单中选择“电源->关闭客户机”。

如果虚拟机使用客户端不能正常关机,请选用以下任一种命令行模式。

vSphere Command-Line Interface (vCLI) 会在本文的某些步骤中用到,所以在使用前请确保你已经正确的安装了它。

请确认虚拟机是在哪个主机上运行。你可以通过vSphere Client中虚拟机的“摘要”选项卡来查看相关信息。随后将在虚拟机所在的主机上运行相关命令来关闭虚拟机。

1.     打开ESXi Shell、vSphere Management Assistant (vMA)或vSphere Command-Line Interface (vCLI) 客户端,只要<code>esxcli</code>工具能够运行即可。

2.     使用如下命令获取正在运行的虚拟机清单,该清单由World ID、UUID、Display Name和 <code>.vmx</code> 配置文件所在路径构成:

<code>esxcli vm process list</code>

3.     用如下命令关闭一台虚拟机:

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

<b>注意:</b> 有三种关闭虚拟机的方法,Soft 程度最低,hard 为立即执行,如果依然不能关闭,则可以使用force 模式。

4.     执行步骤2来检查虚拟机是否已不再运行。

2.     使用如下命令获取正在运行的虚拟机清单,该清单由VMID、Display Name和 <code>.vmx</code> 配置文件所在路径构成:

<code>vim-cmd vmsvc/getallvms</code>

3.     获取虚拟机的当前状态:

<code>vim-cmd vmsvc/power.getstate</code> <code>VMID</code>

4.     使用第2步获取的VMID 来关闭虚拟机:

<code>vim-cmd vmsvc/power.shutdown</code> <code>VMID</code>

<b>Note</b>: 如果虚拟机还是不能关闭,请尝试以下命令:

vim-cmd vmsvc/power.off VMID

虚拟机能够在命令行模式下停止相关进程从而关闭。

在 ESXi 3.5-5.0主机中, 你可以使用 <code>kill</code> 命令来中止一个虚拟机进程。

2.     要知道ESXi 主机上是否有虚拟机进程在运行,可使用如下命令:

<code>ps | grep vmx</code>

输出如下所示:

<code><b>7662 7662</b></code> <code>vmx /bin/vmx</code>

<code>7667</code>  <code><b>7662</b></code> <code>vmx /bin/vmx</code>

<code>7668</code>  <code><b>7662</b></code> <code>mks:VirtualMachineName /bin/vmx</code>

<code>7669</code>  <code><b>7662</b></code> <code>vcpu-0:VirtualMachineName /bin/vmx</code>

每一个vmx进程都会返回一行。 请仔细辨别目标虚拟机的vmx父进程。第一列为进程ID(PID),第二列即为父进程ID (parent's PID)。 请确保你只中止了父进程。 父进程ID (PID)在每一行的第二列, 在本例中都用粗体标识。请记住这个号码,它将在下面的步骤中用到。

警告: 请确保你已经确认了要修复的虚拟机所在的行。如果你是对除了有问题的虚拟机以外的虚拟机进行这些操作,那么极有可能引起这些机器宕机。

3.     如果 <code>vmx</code> 进程在列表中,使用如下命令即可终止该进程: 

<code>kill</code> <code>ProcessID</code>

4.     等待30秒然后重复步骤2来检查进程是否已终止。

5.     如果进程依然没有终止,可使用以下命令:

<code>kill -9</code> <code>ProcessID</code>

6.     等待30秒然后重复检查进程是否已终止。

在ESXi 4.1-ESXi 5.0主机中,你可以使用 <code>esxtop</code>中的 <code>k</code> 命令来终止一个正在运行中的虚拟机进程。

2.     使用以下命令来运行 <code>esxtop</code> 工具:

<code>esxtop</code>

3.     按 c 选择 CPU 资源利用界面。

4.     按 f 显示信息列表。

5.     按 <code><b>c</b></code> 添加 Leader World ID列。

6.     通过虚拟机名称和Leader World ID (<code>LWID</code>)确认我们要修复的虚拟机。

7.     按 k。

8.     在 <code>World to kill</code> 提醒后面,输入第6步确认的Leader World ID,然后按Enter。

9.     等待30秒然后验证进程是否已经结束。

如果使用以上方法均不能关闭虚拟机,则说明问题可能是由于ESXi主机或者它的硬件问题所引起的。

本文转自 h2appy  51CTO博客,原文链接:http://blog.51cto.com/h2appy/1105045,如需转载请自行联系原作者