- 無法在 ESXi 主機上關閉虛擬機電源。
- 虛擬機無響應,且無法強制關閉或停止。
- 無法訪問或解鎖虛擬機上的文件。
-
在關閉虛擬機后,vCenter Server 顯示虛擬機正在運行。
-
不指示虛擬機已關閉。
-
無法在虛擬機中編輯屬性。
- 會顯示以下錯誤中的一個或多個:
- Soap error 999. The operation is not allowed in current state.
- The attempted operation cannot be performed in the current state (Powered Off).
- The request refers to an object that no longer exists or has never existed
Purpose
本文提供了關閉或必要時強制啟動無響應的虛擬機的步驟。
Resolution
如果從 vSphere Web Client 或 Host Client 關閉虛擬機電源不起作用,則必須使用命令行方法。
確定虛擬機的位置
確定虛擬機運行所在的主機。在 vCenter Web Client 中查看時,此信息在虛擬機的摘要選項卡中。有如下兩種方法使用命令行關閉無響應的虛擬機電源:
警告:請按順序執行本文各節及各步驟中的操作。
使用 ESXi 命令行
- 使用 SSH 以 root 身份登錄到 ESXi。
- 通過運行以下命令獲取所有已注冊虛擬機的列表,由其 VMID 和顯示名稱標識:
vim-cmd vmsvc/getallvms

- 記下受影響的虛擬機 ID VMID
- 通過運行以下命令獲取虛擬機當前的狀態:
vim-cmd vmsvc/power.getstate
VMID
- 通過運行以下命令檢查受影響的虛擬機上是否有掛起的任務阻止了機器開機:
vim-cmd vmsvc/get.tasklist
VMID

輸出示例:
(ManagedObjectReference) [
'vim.Task:haTask-2-vim.VirtualMachine.createSnapshot-182550283',
'vim.Task:haTask-2-vim.VirtualMachine.consolidateDisks-182550274'
]
'vim.Task:haTask-2-vim.VirtualMachine.createSnapshot-182550283',
'vim.Task:haTask-2-vim.VirtualMachine.consolidateDisks-182550274'
]
- 運行 vim-cmd vimsvc/task_info task_id 命令查看任務的更多信息。
例如使用第 5 步中數據:
vim-cmd vimsvc/task_info haTask-2-vim.VirtualMachine.createSnapshot-182550283
vim-cmd vimsvc/task_info haTask-2-vim.VirtualMachine.createSnapshot-182550283
vim.TaskInfo) {
dynamicType = <unset>,
key = "haTask-2-vim.VirtualMachine.createSnapshot-182550283",
task = 'vim.Task:haTask-2-vim.VirtualMachine.createSnapshot-182550283',
description = (vmodl.LocalizableMessage) null,
name = "vim.VirtualMachine.createSnapshot",
descriptionId = "VirtualMachine.createSnapshot",
entity = 'vim.VirtualMachine:2',
entityName = "VMware vCenter Server Appliance5-1",
state = "running",
cancelled = false,
cancelable = false,
error = (vmodl.MethodFault) null,
result = <unset>,
progress = 50,
reason = (vim.TaskReasonUser) {
dynamicType = <unset>,
userName = "vpxuser",
},
queueTime = "2014-11-09T17:49:01.171933Z",
startTime = "2014-11-09T17:49:01.175521Z",
completeTime = <unset>,
eventChainId = 182550283,
changeTag = <unset>,
parentTaskKey = <unset>,
rootTaskKey = <unset>,
}
dynamicType = <unset>,
key = "haTask-2-vim.VirtualMachine.createSnapshot-182550283",
task = 'vim.Task:haTask-2-vim.VirtualMachine.createSnapshot-182550283',
description = (vmodl.LocalizableMessage) null,
name = "vim.VirtualMachine.createSnapshot",
descriptionId = "VirtualMachine.createSnapshot",
entity = 'vim.VirtualMachine:2',
entityName = "VMware vCenter Server Appliance5-1",
state = "running",
cancelled = false,
cancelable = false,
error = (vmodl.MethodFault) null,
result = <unset>,
progress = 50,
reason = (vim.TaskReasonUser) {
dynamicType = <unset>,
userName = "vpxuser",
},
queueTime = "2014-11-09T17:49:01.171933Z",
startTime = "2014-11-09T17:49:01.175521Z",
completeTime = <unset>,
eventChainId = 182550283,
changeTag = <unset>,
parentTaskKey = <unset>,
rootTaskKey = <unset>,
}
- 任務掛起,需要取消,使用如下命令:
vim-cmd vimsvc/task_cancel
task_id
注意:並非所有任務都可以取消。例如在上面的示例中,可以看到快照任務的可取消標志設置為 false (cancelable = false)。
- 使用在步驟 3 中找到的 VMID 並運行以下命令關閉虛擬機:
vim-cmd vmsvc/power.shutdown
VMID
注意:如果虛擬機無法關閉,請運行以下命令::
vim-cmd vmsvc/power.off VMID
注意:如果虛擬機無法關閉,請運行以下命令::
vim-cmd vmsvc/power.off VMID

使用 ESXi esxcli 命令
- 使用 SSH 以 root 身份登錄到 ESXi。
- 通過運行以下命令獲取正在運行的虛擬機列表,由其 World ID 和顯示名稱標識:
esxcli vm process list

- 記下無響應虛擬機的 World ID。例如,在第 3 步中,World ID 是 750434。
- 通過運行以下命令之一關閉列表中的虛擬機:
- esxcli vm process kill -t=soft -w=WorldID
- esxcli vm process kill -t=hard -w=WorldID
- esxcli vm process kill -t=force -w=WorldID
注意:這些命令提供了虛擬機強制停止的不同級別的:
- Soft 是最安全的
- Hard 是立即關閉
- Force 是最后的手段
https://kb.vmware.com/s/article/1004340?lang=zh_CN