侧边栏壁纸
  • 累计撰写 54 篇文章
  • 累计创建 31 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

esxi虚拟机无法关闭

nankle
2024-08-09 / 0 评论 / 0 点赞 / 35 阅读 / 9451 字
温馨提示:
本文最后更新于 2024-08-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

问题:在ESXi虚拟机上,突然遇到应用无响应的情况。进入管理页面,尝试关闭虚拟机电源,却发现无法关闭。

排查:重复点击关闭电源按钮,仍然无法关闭,显示有一个任务正在进行

2024-08-09213335.png

查找网上资料:找到了官方网站的一些办法

使用 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 主机有响应,则可能需要重新引导,才能将虚拟机置于关机状态。

尝试:

尝试用命令关闭

2024-08-09213423.png

soft关闭没有任何提示,hard提示摘不到id,再次运行列表已经没有了

2024-08-09213444.png

换了一种方式也仍然不行

2024-08-09213622.png

尝试kill-9,提示找不到进程

2024-08-09215313.png

进入管理界面虚拟机还在,不是停止状态

2024-08-09215826.png

尝试使用esxtop关闭

已经输入了进程号仍然关闭不了

通过运行:vim-cmd vimsvc/task_cancel task_id 取消挂起的任务。

注:如果步骤4中返回的信息中cancelable参数等于false时,表示任务不可取消,所以并不是所有的任务都能取消。

通过运行:vim-cmd vmsvc/power.shutdown VMID 关闭虚拟机。

2024-08-09221241.png

仍然错误,应该还是有个任务在运行阻止了关闭

注:如果还是无法关闭,再执行: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寸机械硬盘无响应,导致虚拟机连接硬盘超时,这个还真没什么好办法,机械硬盘太古老了。也可能是因为硬盘供电不行才无响应的。

0

评论区