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

在 VMware ESXi 5.5 P05 环境中执行操作期间,您遇到以下问题: 无法对 ESXi 主机执行任何虚拟机操作,例如,打开电源或 vMotion。

该主机上运行的虚拟机所使用的文件被其他进程或主机锁定。

========================================= Purpose

在某些 VMware ESXi 主机故障场景(例如,PSOD 和 SAN 故障以及停电)中,在该主机上注册的虚拟机所使用的文件已锁定并且不可供其他进程或主机使用。 这会阻止更改虚拟机文件状态的操作(例如,启动或 vMotion),此时便需要在条件允许的情况下跟踪锁定所有者。 本文介绍使用新工具 vmfsfilelockinfo 在 ESXi 5.5 P05 中跟踪锁定所有者的步骤。


Cause

当某个 VMware ESXi 主机锁定一个文件,而另一个遇到问题的主机正在使用该文件或需要使用该文件时,将发生此问题。


Resolution

1、运行 /bin/vmfsfilelockinfo Python 脚本,查找持有锁定的主机的 IP 地址。 该脚本采用以下参数: 要测试的文件。 访问 VMware vCenter Server 的用户名和密码(跟踪 ESX 主机 上 的 MAC 地址)例如: 运行以下命令:

~ # vmfsfilelockinfo -p /vmfs/volumes/iscsi-lefthand-2/VM1/VM1_1-000001-delta.vmdk -v 192.168.1.10 -u administrator@vsphere.local

您将看到类似以下内容的输出: vmfsflelockinfo Version 1.0 Looking for lock owners on "VM1_1-000001-delta.vmdk" "VM1_1-000001-delta.vmdk" is locked in Exclusive mode by host having mac address ['xx:xx:xx:xx:xx:xx'] Trying to make use of Fault Domain Manager

Found 0 ESX hosts using Fault Domain Manager.

Could not get information from Fault domain manager Connecting to 192.168.1.10 with user administrator@vsphere.local Password: xXxXxXxXxXx

Found 3 ESX hosts from Virtual Center Server.

Searching on Host 192.168.1.178 Searching on Host 192.168.1.179 Searching on Host 192.168.1.180 MAC Address : xx:xx:xx:xx:xx:xx

Host owning the lock on the vmdk is 192.168.1.180, lockMode : Exclusive

Total time taken : 0.27 seconds. 注意: 在启动的虚拟机生命周期期间,它的多个文件将在不同的合法锁定状态之间转换。锁定状态模式表示对文件的锁定类型。锁定模式列表如下所示:

模式 0 = 未锁定 模式 1 = 独占锁定(已启动的虚拟的 VMX 文件、当前使用的磁盘(flat 或 delta)、*vswp 等) 模式 2 = 只读锁定(例如正在运行的虚拟机的 ..-flat.vmdk(带有快照)) 模式 3 = 多写入器锁定(例如用于 MSCS 群集磁盘或 FT 虚拟机)。 在持有锁定的主机上运行 lsof 命令并从输出中筛选出相关文件名,以获取持有锁定的进程的名称:

2、 ~ # lsof | egrep 'Cartel|VM1_1-000001-delta.vmdk'

此命令将显示类似以下内容的消息:

Cartel | World name | Type | fd | Description 36202 vmx FILE 80 /vmfs/volumes/556ce175-7f7bed3f-eb72-000c2998c47d/VM1/VM1_1-000001-delta.vmdk

该消息表明文件由 Cartel ID 为 36202 的虚拟机锁定。 现在,通过执行以下命令显示活动 Cartel ID 的列表:

~ # esxcli vm process list

此命令将显示按虚拟机名称分组的活动虚拟机信息,其格式类似于以下示例:

Alternate_VM27 World ID: 36205 Process ID: 0 VMX Cartel ID: 36202 UUID: 56 4d bd a1 1d 10 98 0f-c1 41 85 ea a9 dc 9f bf Display Name: Alternate_VM27 Config File: /vmfs/volumes/556ce175-7f7bed3f-eb72-000c2998c47d/Alternate_VM27/Alternate_VM27.vmx Alternate_VM20 World ID: 36207 Process ID: 0 VMX Cartel ID: 36206 UUID: 56 4d bd a1 1d 10 98 0f-c1 41 85 ea a5 dc 94 5f Display Name: Alternate_VM20 Config File: /vmfs/volumes/556ce175-7f7bed3f-eb72-000c2998c47d/Alternate_VM20/Alternate_VM20.vmx ...

VMX Cartel ID 为 36202 的虚拟机条目显示了持有对文件 VM1_1-000001-delta.vmdk 的锁定的虚拟机的显示名称(在本示例中为 Alternate_VM27)。

3、 关闭持有锁定的虚拟机以解除该锁定。