Quelle taille (totale) fait ma VM ?
Posted by NiTRo | Filed under Tips & Tricks, VMware
En cherchant un moyen élégant de remonter dans rapport la taille occupée par les différents snapshots d’une VM, nous sommes tombés sur un script powershell récemment posté par Arnim van Lieshout : How big is my VM?
Malheureusement, son script n’est pas compatible avec vCenter 4.0, à cause d’un petit bug d’API repéré par plusieurs membres de la communauté VMware lors de l’adaptation d’un script peremetant de lister les vmdk orphelins.
C’est grâce à Yasen Kalchev que nous avons pu modifier ce script et le rendre opérationnel pour vCenter 4.0 :
param( [string] $vm) function Get-VmSize($vm) { #Initialize variables $VmDirs =@() $VmSize = 0 $fileQueryFlags = New-Object VMware.Vim.FileQueryFlags $fileQueryFlags.FileSize = $true #$fileQueryFlags.FileType = $true #$fileQueryFlags.Modification = $true $searchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec $searchSpec.details = $fileQueryFlags Get-View -ViewType VirtualMachine -Filter @{"Name" = $vm } | % { #Create an array with the vm's directories $VmDirs += $_.Config.Files.VmPathName.split("/")[0] $VmDirs += $_.Config.Files.SnapshotDirectory.split("/")[0] $VmDirs += $_.Config.Files.SuspendDirectory.split("/")[0] $VmDirs += $_.Config.Files.LogDirectory.split("/")[0] #Add directories of the vm's virtual disk files foreach ($disk in $_.Layout.Disk) { foreach ($diskfile in $disk.diskfile){ $VmDirs += $diskfile.split("/")[0] } } #Only take unique array items $VmDirs = $VmDirs | Sort | Get-Unique foreach ($dir in $VmDirs){ $ds = Get-Datastore ($dir.split("[")[1]).split("]")[0] $dsb = Get-View (($ds | get-view).Browser) $searchSpec = [VMware.Vim.VIConvert]::ToVim4($searchSpec) $searchSpec.details.fileOwnerSpecified = $true $dsBrowserMoRef = [VMware.Vim.VIConvert]::ToVim4($dsb.MoRef); $taskMoRef = $dsb.Client.VimService.SearchDatastoreSubFolders_Task($dsBrowserMoRef, $dir, $searchSpec) $task = [VMware.Vim.VIConvert]::ToVim($dsb.WaitForTask([VMware.Vim.VIConvert]::ToVim($taskMoRef))) foreach ($result in $task){ foreach ($file in $result.File){ $VmSize += $file.FileSize } } } } return $VmSize } $size = Get-VmSize($vm) #$size = [math]::round($size/1073741824,2) WRITE "$size Gb"
/!\ les fichiers de swap (.vswp) ne sont comptabilisés que s’ils sont dans le répertoire de la VM /!\
Tags: scripting






