在测试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
- }