由于模板 VMDK 文件被锁定,无法从模板部署虚拟机
search cancel

由于模板 VMDK 文件被锁定,无法从模板部署虚拟机

book

Article ID: 344591

calendar_today

Updated On:

Products

VMware vCenter Server VMware vSphere ESXi

Issue/Introduction

Symptoms:
免责声明:本文为 Cannot deploy a virtual machine from a template because the template VMDK file is locked (1007487) 的翻译版本。尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。有关最新内容,请参见英文版本。


  • 无法从模板部署虚拟机
  • 模板的 <VM name=""></VM><vm name>-flat.vmdk 或 <VM name=""></VM><vm name>.vmdk 文件被正在运行的虚拟机锁定
  • 找不到 VMDK 文件
  • 在部署模板时,选择了“编辑虚拟硬件(实验)”选项,且磁盘大小已修改


Environment

VMware vCenter Server 5.1.x
VMware ESX 4.1.x
VMware VirtualCenter 2.5.x
VMware ESXi 3.5.x Installable
VMware vCenter Server 5.0.x
VMware ESXi 4.1.x Embedded
VMware vSphere ESXi 5.0
VMware vSphere ESXi 5.1
VMware ESXi 3.5.x Embedded
VMware ESXi 4.0.x Installable
VMware ESXi 4.0.x Embedded
VMware vCenter Server 4.0.x
VMware ESX Server 3.5.x
VMware ESXi 4.1.x Installable
VMware vCenter Server 4.1.x
VMware ESX 4.0.x

Resolution

此问题在 VMware vCenter Server 5.0 Update 2 和 vCenter Server 5.1 Update 1 中已得到解决。
  • 要下载 vCenter Server 5.0 Update 2,请参见 VMware Download Center
  • 要下载 vCenter Server 5.1 Update 1,请参见 VMware Download Center

    注意
    :如果更新 vCenter Server 不是一种办法,请执行以下步骤来解决此问题:
如果从模板部署的虚拟机被错误地配置为在模板的(而不是其自己的)虚拟磁盘和 VMDK 文件上运行,该虚拟机将锁定模板的 VMDK 文件。锁定将会阻止从该模板部署其他虚拟机。
必须确定模板的 VMDK 文件是否被其他虚拟机锁定,如果是,请释放这些文件上的锁定。
注意:由于虚拟机正在模板的磁盘上运行,可能会对磁盘进行不必要的更改。因此,良好的备份和恢复计划对生产环境来说是至关重要的。
要确定模板的 VMDK 文件是否被其他虚拟机锁定,请执行以下操作:
  1. 以 root 身份登录到 ESX 主机。
  2. 更改到模板的工作目录。
  3. 运行以下命令:

    vmkfstools -D <virtual disk file> | tail -f /var/log/vmkernel | grep -i owner

    注意:在 ESXi 5.x 中,请运行以下命令:

    vmkfstools -D <virtual disk file> | tail -f /var/log/vmkernel.log | grep -i owner

  4. 如果在输出结尾处存在(非零)数字和字母,则 MAC 地址已与此 VMDK 关联,且其他虚拟机已锁定此文件。如果在输出结尾处存在零,则 VMDK 文件未被其他虚拟机锁定。
要在模板的 VMDK 文件上释放锁定,请执行以下操作:
  1. 要显示单个主机上的哪台虚拟机拥有锁定,请运行以下命令:

    grep -lr <virtual disk file> /vmfs/volumes/*/*/*.vmx

    注意:记录虚拟磁盘文件的完整路径。如果这由于锁定文件而失败,请尝试以下方法之一。如果虚拟机磁盘位于在多个主机之间共享的存储上,则可能会出现这种情况:

    备选方法:

    • grep vmx /etc/vmware/hostd/vmInventory.xml | sed -e 's/>/</g' | awk -F\< '{print $3}' > vmx;
      IFS=$(echo -en "\n\b"); for i in `cat vmx`; do echo grep -H vmdk $i; done
    • Connect-VIServer -server localhost
      Get-Vm | Get-Harddisk | Where {$_.Filename -match "<diskname>"}

  2. 关闭拥有锁定的虚拟机的电源。如果无法关闭该虚拟机的电源,请参见 Powering off an unresponsive virtual machine on an ESX host (1004340)
  3. 编辑虚拟机的设置并移除虚拟磁盘,但不要将其删除。
  4. 要连接现有磁盘,请执行以下操作:
    • 添加硬件向导中,单击硬盘 > 下一步
    • 选择虚拟磁盘的存储类型。
    • 单击下一步 > 使用现有虚拟磁盘
    • 浏览到步骤 1 中确定的虚拟磁盘文件的路径。
    • 单击下一步


Additional Information

Cannot deploy a virtual machine from a template because the template VMDK file is locked