Skip to content

Instantly share code, notes, and snippets.

@equelin
Last active March 23, 2016 09:13
Show Gist options
  • Save equelin/5e035816236f46cde25e to your computer and use it in GitHub Desktop.
Save equelin/5e035816236f46cde25e to your computer and use it in GitHub Desktop.
<#
.SYNOPSIS
Reclame l'espace libre sur les datastores en thin provisionning.
.DESCRIPTION
Reclame l'espace libre sur les datastores en thin provisionning.
.PARAMETER Datastore
Nom d'un datastore sur lequel sera reclame l'espace libre. le datastore peut etre passé en argument.
.NOTES
Il est necessaire d etre connecte a un serveur vCenter ou ESXi avant d'executer ce script. Ce script est compatible à partir de vSphere 5.5.
Le code est en parti inspiré par le travaille de Cody Hosterman (http://blog.purestorage.com/unmap-block-count-behavior-change-in-esxi-5-5-p3/)
.EXAMPLE
Get-Datastore | ReclaimUnusedSpace.ps1
Reclamer l'espace libre sur tous les datasores.
.EXAMPLE
ReclaimUnusedSpace.ps1 -Datastore NomDuDatastore
Reclamer l'espace libre sur un datasore specifique.
.LINK
http://blog.okcomputer.io
#>
Param (
[Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True)]
[string]$Datastore
)
# Desactivation du Timeout car l'operation peut-être longue
Set-PowerCLIConfiguration -Scope Session -WebOperationTimeoutSeconds -1 -confirm:$false | Out-Null
# Récupere les informations sur le ou les datastore(s)
$Datastores = Get-Datastore -Name $Datastore
# Réclamation de l'espace libre sur chaque datastore
foreach ($DS in $Datastores) {
Process {
# Calcul de la taille du fichier asyncUnmapFile - Source: http://blog.purestorage.com/unmap-block-count-behavior-change-in-esxi-5-5-p3/
if ((1 - $DS.FreeSpaceMB/$DS.CapacityMB) -ge .75) {
$asyncUnmapFileSize = 200
}
else {
$asyncUnmapFileSize = [math]::floor($DS.FreeSpaceMB * .01)
}
# Selection du serveur ESXi qui executera l'operation
$VMHost = $DS | Get-VMHost | where-object {($_.version -like "5.5.*") -or ($_.version -like "6.0.*")} | Select-Object -last 1
# Esxcli
$esxcli = Get-VMHost -Name $VMHost | Get-EsxCli
Write-Host "Reclamation de l'espace libre sur $($DS.name) par bloc de $asyncUnmapFileSize Mo et depuis le serveur $VMHost"
#Execution de la commande avec gestion des erreurs
Try {
$result = $esxcli.storage.vmfs.unmap($asyncUnmapFileSize, $DS.name, $null)
}
Catch [VMware.VimAutomation.Sdk.Types.V1.ErrorHandling.VimException.ViError] {
Write-Host "Erreur lors de la reclamation de l'espace libre sur $($DS.name)"
Write-Host $_.Exception.Message
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment