четверг, 22 января 2009 г.

Поиск ненужных, осиротевших vmdk Update 2

На днях писал о скрипте для Поиска ненужных, осиротевших vmdk.
С мест сообщают:

Миша, привет

Нашел полезный скрипт, который ищет ничейные VMDK-файлы на системе хранения - http://communities.vmware.com/docs/DOC-6960

и немного его доработал, так что он теперь правильно обрабатывает снапшоты и шаблоны,

а также выводит размер отдельных дисков и суммарный размер, занимаемый этими дисками на разных хранилищах.


Скрипт:
============================================

#

# Purpose : List all orphaned vmdk on all datastores in all VC's

# Version: 1.0

# Author : HJA van Bokhoven



#Main



$arrayVC = "virtualcenter.lab.croc.ru"

$OutputFile = "d:\OrphanedVMDK-total.txt"

$totalWaste = 0



Foreach ($strVC in $arrayVC)

{

Connect-VIServer $strVC

$arrUsedDisks = @()

$arrUsedDisksVM = Get-VM | Get-HardDisk | %{$_.filename}

$arrUsedDisksSnapshots = Get-VM | Get-Snapshot | Get-Harddisk | %{$_.filename}

$arrUsedDisksTemplates = Get-Template | Get-HardDisk | %{$_.filename}

$arrUsedDisks = $arrUsedDisksVM + $arrUsedDisksSnapshots + $arrUsedDisksTemplates



$arrDS = Get-Datastore

Foreach ($strDatastore in $arrDS)

{

$datastoreWaste = 0

$strDatastoreName = $strDatastore.name

Write-Host $strDatastoreName

$ds = Get-Datastore -Name $strDatastoreName | %{Get-View $_.Id}

$fileQueryFlags = New-Object VMware.Vim.FileQueryFlags

$fileQueryFlags.FileSize = $true

$fileQueryFlags.FileType = $true

$fileQueryFlags.Modification = $true

$searchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec

$searchSpec.details = $fileQueryFlags

$searchSpec.sortFoldersFirst = $true

$dsBrowser = Get-View $ds.browser

$rootPath = "["+$ds.summary.Name+"]"

$searchResult = $dsBrowser.SearchDatastoreSubFolders($rootPath, $searchSpec)

$myCol = @()

foreach ($folder in $searchResult)

{

foreach ($fileResult in $folder.File)

{

$file = "" | select Name, FullPath, SizeMB

$file.Name = $fileResult.Path

$file.FullPath = $folder.FolderPath

$file.SizeMB = $fileResult.FileSize / 1048576

$strFilename = $file.Name

IF ($strFilename)

{

IF ($strFilename.Contains(".vmdk"))

{

IF (!$strFilename.Contains("-flat.vmdk"))

{

IF (!$strFilename.Contains("delta.vmdk"))

{

$strCheckfile = "*"+$file.Name+"*"

IF ($arrUsedDisks -Like $strCheckfile){}

ELSE

{

$strOutput = $file.FullPath + $strFilename + " : " + $file.SizeMB + " MB"

# $strOutput

$totalWaste = $totalWaste + $file.SizeMB

$datastoreWaste = $datastoreWaste + $file.SizeMB

$strOutput | Out-File $Outputfile -width 150 -Append

}

}

}

}

}

}



}

$strOutput = "Datastore space loss: " + $datastoreWaste + " MB"

$strOutput | Out-File $Outputfile -width 150 -Append

$strOutput = " "

$strOutput | Out-File $Outputfile -width 150 -Append

}

}





$strOutput = "total orphaned VMDKs size: " + $totalWaste + " MB"

$strOutput | Out-File $Outputfile -width 150 -Append

============================================


big thx, Арсен!

0 коммент.:

Отправить комментарий