此问题在 VMware vCenter Server 5.0 Update 2 和 vCenter Server 5.1 Update 1 中已得到解决。
如果从模板部署的虚拟机被错误地配置为在模板的(而不是其自己的)虚拟磁盘和 VMDK 文件上运行,该虚拟机将锁定模板的 VMDK 文件。锁定将会阻止从该模板部署其他虚拟机。
必须确定模板的 VMDK 文件是否被其他虚拟机锁定,如果是,请释放这些文件上的锁定。
注意:由于虚拟机正在模板的磁盘上运行,可能会对磁盘进行不必要的更改。因此,良好的备份和恢复计划对生产环境来说是至关重要的。
要确定模板的 VMDK 文件是否被其他虚拟机锁定,请执行以下操作:
-
以 root 身份登录到 ESX 主机。
-
更改到模板的工作目录。
-
运行以下命令:
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
-
如果在输出结尾处存在(非零)数字和字母,则 MAC 地址已与此 VMDK 关联,且其他虚拟机已锁定此文件。如果在输出结尾处存在零,则 VMDK 文件未被其他虚拟机锁定。
要在模板的 VMDK 文件上释放锁定,请执行以下操作:
- 要显示单个主机上的哪台虚拟机拥有锁定,请运行以下命令:
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>"}
- 关闭拥有锁定的虚拟机的电源。如果无法关闭该虚拟机的电源,请参见 Powering off an unresponsive virtual machine on an ESX host (1004340)。
- 编辑虚拟机的设置并移除虚拟磁盘,但不要将其删除。
- 要连接现有磁盘,请执行以下操作:
- 在添加硬件向导中,单击硬盘 > 下一步。
- 选择虚拟磁盘的存储类型。
- 单击下一步 > 使用现有虚拟磁盘。
- 浏览到步骤 1 中确定的虚拟磁盘文件的路径。
- 单击下一步。