您的位置:首页 > 运维架构 > Shell

第三方备份虚拟机发生错误 附批量修改vmx参数脚本

2011-11-10 12:30 543 查看
在测试SMVI备份的时候发现无法备份基于Windows Server 2008的虚拟机。

SMVI工作原理是通过API对虚拟机进行快照,然后将快照在存储级别进行备份。

出错信息如下:

Cannot create a quiesced snapshot because the create snapshot operation exceeded the time limit for holding off I/O in the frozen virtual machine
这是由于虚拟机vmx文件中的“Disk.enableUUID”参数被设置为“true”导致。该参数主要用于决定静默快照发生在磁盘级别还是程序级别。对于Windows Server 2008的虚拟机是需要设定为Fales的。

手动修改方法

通过SSH登陆ESX服务器,进入虚拟机所在目录。

用vi命令编辑vmx文件。找到“Disk.enableUUID=True",修改为“Disk.enableUUID=Fales"并保存文件。

对于无法进行vMotion的虚拟机,以下操作前关闭虚拟机,修改完毕后启动虚拟机才可生效。

对于可以vMotion的虚拟机,无需关闭虚拟机,直接vMotion到其他ESX服务器即可生效。

自动修改方法

可能你会遇到要修改大量的虚拟机参数,可以使用以下代码进行修改:

此代码会从集群名为“Farm01"的集群中找到所有Windows Server 2008的虚拟机,然后依次修改该参数。

注意,运行前请确保VMware Tools已经在所有虚拟机安装并运行。

$vm = (Get-Cluster -Name "Farm01" | Get-VM * | Where-Object {$_.Guest.OSFullName -like "*Windows Server 2008*"})
$x = 0
#修改高级选项
$vm | foreach {
$vmConSpec=New-Object Vmware.Vim.VirtualMachineConfigSpec
$optValue = New-Object VMware.Vim.OptionValue
$optValue.Key="disk.enableUUID"
$optValue.Value="FALSE"
$vmConSpec.ExtraConfig +=$optValue
$vmView = Get-View -ViewType VirtualMachine -Filter @{"Name" = $vm[$x].Name}
$vmView.ReconfigVM($vmConSpec)
$x += $x
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息