I found this great Powershell script that convert virtual disk files to eagered zeroed.
Awesome script! I had to make some changes to make it work in my environment.
function Set-EagerZeroThick{
param($vcName, $vmName, $hdName)
# Find ESX host for VM
$vmImpl = Get-VM $vmName
Write-Host $vmImpl
if($vmImpl.PowerState -ne "PoweredOff"){
Write-Host "Guest must be powered off to use this script !" -ForegroundColor red
return $false
}
$vm = $vmImpl | Get-View
Write-Host $vm
$esxName = (Get-View $vm.Runtime.Host).Name
Write-Host $esxName
# Find datastore path
$dev = $vm.Config.Hardware.Device[10] | where {$_.DeviceInfo.Label -eq $hdName}
Write-Host $dev
if($dev.Backing.thinProvisioned){
return $false
}
$hdPath = $dev.Backing.FileName
Write-Host $hdPath
# For Virtual Disk Manager we need to connect to the ESX server
$esxHost = Connect-VIServer -Server $esxName -User $esxAccount -Password $esxPasswd
# Convert HD
$vDiskMgr = Get-View -Id (Get-View ServiceInstance -Server $esxHost).Content.VirtualDiskManager
Write-Host $vDiskMgr
$dc = Get-Datacenter -Server $esxHost | Get-View
Write-Host $dc
$taskMoRef = $vDiskMgr.EagerZeroVirtualDisk_Task($hdPath, $dc.MoRef)
Write-Host $taskMoRef
$task = Get-View $taskMoRef
Write-Host $task
while("running","queued" -contains $task.Info.State){
$task.UpdateViewData("Info")
}
Disconnect-VIServer -Server $esxHost -Confirm:$false
# Connect to the vCenter
Connect-VIServer -Server $vcName
if($task.Info.State -eq "success"){
return $true
}
else{
return $false
}
}
$vmName = "vm1"
$vCenter = "vcenter_server"
$esxAccount = "rootuser"
$esxPasswd = "password"
Set-EagerZeroThick $vCenter $vmName "Hard disk 1"
To validate before and after running the eageredZeroed script I run the following script:
$vm = Get-VM vm1 | Get-View
$vm.config.Hardware.Device[10].backing
$vm.config.Hardware.Device[10].DeviceInfo
Source: http://www.lucd.info/2009/11/15/scripts-for-yellow-bricks-advise-thin-provisioning-alarm-eagerzeroedthick/