Периодически возникает необходимость получить информацию о дисках, существующих в инфраструктуре под управлением гипервизора ESXi, определения тонких и толстых дисков и тп.
Для выполнения этой задачи можно воспользоваться командами интерфейса PowerCLi.
Например, для получения списка всех дисков, выполняем команду
Get-Vm VMname | Get-Harddisk | Format-List
где VMname — имя виртуальной машины.
Разультат возвращает следующие параметры:
- StorageFormat
- Persistence
- DiskType
- Filename
- CapacityKB
- CapacityGB
- ParentId
- Parent
- Uid
- ConnectionState
- ExtensionData
- Id
- Name
- Client
Для выгрузки в csv-файл данных о диске конкретной VM выполняем:
Get-vm VMname | get-harddisk | select Parent,StorageFormat,Filename | Export-Csv c:\disks.csv –NoTypeInformation
Параметр –NoTypeInformation в данном примере используется, чтобы в начале csv-файла не было строки вида
#TYPE Selected.Vmware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl
Выгрузка данных о всех дисках в csv-файл:
get-vm | get-harddisk | Export-Csv c:\disks.csv –NoTypeInformation
Выгрузка данных о всех дисках в csv-файл с выбранными параметрами(Parent,StorageFormat,Filename) :
get-vm | get-harddisk | select Parent,StorageFormat,Filename | Export-Csv c:\disks.csv –NoTypeInformation
Несколько сложнее команды для получения списка толстых и тонких дисков.
Получение списка толстых дисков:
get-vm | get-view | %{
$name = $_.name
$_.Config.Hardware.Device | where {$_.GetType().Name -eq "VirtualDisk"} | %{
if(!$_.Backing.ThinProvisioned){
"$name has a thick provisioned disk"
}
}
}
Получение списка тонких дисков:
get-vm | get-view | %{
$name = $_.name
$_.Config.Hardware.Device | where {$_.GetType().Name -eq "VirtualDisk"} | %{
if(!$_.Backing.ThickProvisioned){
"$name has a thin provisioned disk"
}
}
}
Еще более полезным может оказаться следующий скрипт, приводимый на http://vstrong.info(автор - Mark Strong) :
$report = @()
foreach ($vm in Get-VM){
$view = Get-View $vm
if ($view.config.hardware.Device.Backing.ThinProvisioned -eq $true){
$row = '' | select Name, Provisioned, Total, Used, VMDKs, VMDKsize, DiskUsed, Thin
$row.Name = $vm.Name
$row.Provisioned = [math]::round($vm.ProvisionedSpaceGB , 2)
$row.Total = [math]::round(($view.config.hardware.Device | Measure-Object CapacityInKB -Sum).sum/1048576 , 2)
$row.Used = [math]::round($vm.UsedSpaceGB , 2)
$row.VMDKs = $view.config.hardware.Device.Backing.Filename | Out-String
$row.VMDKsize = $view.config.hardware.Device | where {$_.GetType().name -eq 'VirtualDisk'} | ForEach-Object {($_.capacityinKB)/1048576} | Out-String
$row.DiskUsed = $vm.Extensiondata.Guest.Disk | ForEach-Object {[math]::round( ($_.Capacity - $_.FreeSpace)/1048576/1024, 2 )} | Out-String
$row.Thin = $view.config.hardware.Device.Backing.ThinProvisioned | Out-String
$report += $row
}}
$report | Sort Name | Export-Csv -Path "D:Thin_Disks.csv"
Результатом выполнения будет информация о всех VM, содержащих хотя бы один тонкий диск, с параметрами:
- Name(имя VM)
- Provisioned
- Total
- Used
- VMDKs (имя файла VMDK)
- VMDKsize
- DiskUsed
- Thin (True\False).
Источники:
http://vstrong.info
https://communities.vmware.com