reclaime diskspace on zero detection storage when deletening vmware vm

some time ago, i had the problem that my 3Par storage was getting full. in this time i removed a lot of test vm’s from this storage, but nothing happens. the storage was still full. the reason was the mechanisme how vmware deletes files from a DataStore and the activated zero-detection feature on the storage. if you delete a virtual disk file on the vmware datastore, it will only marked as deleted, but the datas are still there in the same format. to get the storage’s zero detection work, we have to zero out the deleted part of the datastore manually.

you can do this with this script:

$vCenterName   = "vcenter.domain.fqdn"
$vCenterCreds  = New-Object System.Management.Automation.PSCredential ( "username", ( ConvertTo-SecureString "PlainTextPassword" -AsPlainText -Force ) )

& 'C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1'

Connect-VIServer -Server $vCenterName -Credential $vCenterCreds -WarningAction SilentlyContinue
Set-PowerCLIConfiguration -Scope Session -WebOperationTimeoutSeconds -1  -Confirm:$false

$VMHost = ( Get-VMHost )[0]
$EsxCli = Get-EsxCli -VMHost $VMHost.Name

$Datastores = $VMHost | Get-Datastore

foreach ( $Datastore in ( $Datastores | Sort-Object Name ) )
{
    Write-Output $Datastore.Name
    $res = $EsxCli.storage.vmfs.unmap(200, $Datastore.Name, $null)
    Write-Output "   $( $res )"
}

Disconnect-VIServer -confirm:$false

Get-Module | Remove-Module -Force