在 VMware ESXi 5.5 P05 及更高级版本中查找 VMFS 数据存储上的 VMDK 或文件的锁定所有者
search cancel

在 VMware ESXi 5.5 P05 及更高级版本中查找 VMFS 数据存储上的 VMDK 或文件的锁定所有者

book

Article ID: 301248

calendar_today

Updated On:

Products

VMware vSphere ESXi

Issue/Introduction

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

Symptoms:
免责声明: 本文为 Finding the lock owners of a VMDK or file on a VMFS datastore in VMware ESXi 5.5 P05 (2110152) 的翻译版本。 尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。 有关最新内容,请参见英文版本。


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

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


Environment

VMware vSphere ESXi 6.0
VMware vSphere ESXi 5.5

Cause

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

Resolution

这是一个影响当前所有 ESXi 版本的已知问题。 在 5.5 P05 之前的 ESXi 版本和 ESXi 6.0 中,您可以通过手动过程查找持有锁定的主机和虚拟机。 在 ESXi 5.5 P05 中,/bin 目录中的脚本可用于查找持有文件锁定的主机的标识。

注意:该脚本只在 ESXi 5.5 P05 及更高版本中可用。

要临时解决此问题,请从在使用一个或多个已锁定文件时遇到问题的主机中运行 vmfsfilelockinfo 脚本:
  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 [email protected]
    您将看到类似以下内容的输出:
    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 [email protected]
    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 虚拟机)。
  2. 在持有锁定的主机上运行 lsof 命令并从输出中筛选出相关文件名,以获取持有锁定的进程的名称:

    ~ # 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. 关闭持有锁定的虚拟机以解除该锁定。


Additional Information

该脚本将按以下顺序执行下列操作:
  1. 确定锁定状态为“独占”、“只读”还是未锁定。
  2. 确定锁定主机的 MAC 地址 (xx:xx:xx:xx:xx:xx)。
  3. 向故障域管理器 (HA) 查询已发现的 MAC 地址的相关信息。
  4. 向 vCenter Server 查询已发现的 MAC 地址的相关信息。
  5. 输出最终状态。 例如: Host owning the lock on the vmdk is 192.168.1.180, lockMode : Exclusive.
  6. 在终止后输出总执行时间。

注意

  • 该脚本不会尝试断开/移除锁定。 该脚本只能确定持有锁定的潜在 ESX 主机。
  • 如果在不使用 vCenter Server 用户名和密码的情况下运行,则该脚本会在查询故障域管理器后提示输入该用户名和密码。
  • 该脚本仅对不带通配符的单个文件参数起作用。 如果需要运行多个查询,则您可能需要使用包装脚本来重复执行该脚本。

有关调查已锁定的虚拟机文件的详细信息,请参见 Investigating virtual machine file locks on ESXi/ESX (10051)Finding the lock owners of a VMDK or file on a VMFS datastore in VMware ESXi 5.5 P05 and later