VMware : détection des snapshots fantômes en Powershell

Et oui, ce blog a deux facettes : l’informatique et le bricolage…

Suite à un problème sur le PCC d’OVH, j’ai écrit un script Powershell (PowerCLI pour être précis) permettant d’attaquer l’API de VMware pour identifier les snapshots fantômes. (phantom snapshot en anglais  : « Determining if there are leftover delta files or snapshots that VMware vSphere or Infrastructure Client cannot detect (1005049)« ).

ok, mais un snapshot, c’est quoi ?

Un snapshots est une sorte de point de restauration. Dans le schéma ci dessous, on en voit 3. Ces snapshots peuvent être consolidés (être intégrés au disque parent) ou bien être supprimés. Il est conseillé de garder ces snapshots uniquement sur des opérations pour lesquelles un retour en arrière est envisagé.

Source : http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1015180

Des systèmes de sauvegarde de machines virtuelles (comme VDR ou VEEAM) utilisent ce mécanisme de snapshots, le temps de faire la sauvegarde.

 

Mais quel est le problème ?

Dans certains cas, les systèmes de sauvegarde ne consolident pas les snapshots après sauvegarde. Des lenteurs peuvent alors être constatées.

Et ces snapshots « systèmes » ne sont pas visibles dans l’interface de Vsphère, ni dans l’outil Vscope actuel d’OVH. On parle alors de snapshots fantômes.

Dans mon cas, nous sommes arrivés à 256 snapshots fantômes. La machine s’est alors bloquée, aucun moyen de la consolider : données perdues !

 

Quelle solution ?

La solution que je propose est la détection des snapshots fantômes. J’ai donc fait un script permettant d’explorer les datastores et de détecter les fichiers au format  *-000001-delta.vmdk à l’aide d’une expression régulière : « ^*[0-9]{6}-delta.vmdk$ »

Si le script en détecte, il génère un csv et envoie un mail avec la liste des fichiers détectés.

Le script : 

add-pssnapin VMware.VimAutomation.Core

#Parameters
$pcc = "pcc-xxx-xxx-xxx-xxx.ovh.com"
$path_pcc = "pcc-xxx-xxx-xxx-xxx_datacenterXXXX"
$user = "admin"
$password = "*******"
$path_file_result = "C:\temp\"

#Email
$notification_to = "xxxxxx" 
$notification_from = "xxxxxx" 
$smtp_server = "xxxxxx" 

#Pattern of phantom snapshot
$pattern = "^*[0-9]{6}-delta.vmdk$"

#Connexion to PCC
Connect-VIServer -Server $pcc -Protocol https -User $user -Password $password

#Search phantom snapshot
$files =  dir -Recurse -Path  vmstores:\$pcc@443\$path_pcc\ | 
    Where-Object { $_.Name -match $pattern -and $_.DatastoreFullPath -notlike "*.zfs/snapshot/hourly*" } 

if (($files | Measure-Object ).Count -ge 0){
    Write-Host ($files | Measure-Object ).Count "snapshots phantom are present" -foregroundcolor red 
    
    #Export 
    $files | select Name,DatastoreFullPath,LastWriteTime,Type,Length | Export-Csv -NoTypeInformation -UseCulture -Path $path_file_result
    
    #Send email
    [string]$messagebody = ""
    foreach ($file in $files )
    {
        $messagebody = $messagebody + $file + "`r`n"
    }
    Send-MailMessage -subject "$(($files | Measure-Object ).Count) snapshots phantom are present" -Body "$($messagebody)" -to $notification_to -from $notification_from -SmtpServer $smtp_Server
    Write-Host "Mail sent"
}

 

Applications ?

Ce script fonctionne avec le PCC d’OVH, mais je pense qu’il est facilement applicable à tout système VMware.

 

Que faire quand des snapshots fantômes sont détectés ?

Il faut les consolider, via Vsphère

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *