Как получить список виртуальных машин ESXI с RDM дисками
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в России Pyatilistnik.org. В прошлый раз мы с вами разобрали ошибку 0xc000007b при запуске Windows 10. В сегодняшней публикации я научу вас с помощью PowerCli получать список виртуальных машин у которых есть подключенные RDM диски. Данная задача была связана с тем, что проводилась уборка на системах хранения данных и нужно было понять, есть ли подключенные LUN виртуальным машинам.
Постановка задачи
Заказчик хотел выполнить миграцию с SAN на SAN, и было настроено множество виртуальных машин с RDM. Напоминаю, что RDM диски, это физически подключенные и проброшенные на прямую LUN внутри виртуальной машины.
Нужно получить данные:
- Имя виртуальной машины
- Имя жесткого диска
- Тип диска (физическая или виртуальная совместимость)
- LUN ID устройства
- VML ID устройства
- Имя файла VMDK
- Размер RDM LUN
Перед выполнением задачи у вас должны быть выполнены требования:
- Быть права на подключение к vCenter
- Должна быть установлена PowerCLI
Скрипт для получения виртуальных машин с RDM дисками
Первое, что вы должны сделать, это подключиться к серверу vCenter либо из PowerCLI либо из PowerShell (ISE). Подключение к серверу осуществляется через командлет Connect-VIServer.
Если выскакивает ошибка подключения Error: Invalid server certificate(/oshibka-podklyucheniya-k-vcenter-cherez-powercli/), то она устраняется очень легко.
Чтобы получить список RDM дисков, это диски с типом DiskType=RawPhysical
На выходе вы получите Тип диска, имя VMDK файла и его размер, это уже что-то
Давайте выведем еще номера LUN.
Приятно что мы уже получили LUN_ID и VML_ID
Теперь давайте все выведем в тестовый файл csv или txt
Если хотите вывести, чтобы еще был ESXI хост, то скрипт будет таким:
Вот еще пример подобного скрипта
$report = @()
$vms = Get-VM | Get-View
foreach($vm in $vms){
foreach($dev in $vm.Config.Hardware.Device){
if(($dev.gettype()).Name -eq "VirtualDisk"){
if(($dev.Backing.CompatibilityMode -eq "physicalMode") -or
($dev.Backing.CompatibilityMode -eq "virtualMode")){
$row = "" | select VMName, HDDeviceName, HDFileName, HDMode
$row.VMName = $vm.Name
$row.HDDeviceName = $dev.Backing.DeviceName
$row.HDFileName = $dev.Backing.FileName
$row.HDMode = $dev.Backing.CompatibilityMode
$report += $row
}
}
}
}
$report
Поиск на определенном кластере
$vms = Get-Cluster -name "ClusterPyatilistnik" | Get-VM | Get-View
foreach($vm in $vms){
foreach($dev in $vm.Config.Hardware.Device){
if(($dev.gettype()).Name -eq "VirtualDisk"){
if(($dev.Backing.CompatibilityMode -eq "physicalMode") -or
($dev.Backing.CompatibilityMode -eq "virtualMode")){
$row = "" | select VMName, VMHost, HDDeviceName, HDFileName, HDMode, HDsize, HDDisplayName
$row.VMName = $vm.Name
$esx = Get-View $vm.Runtime.Host
$row.VMHost = ($esx).Name
$row.HDDeviceName = $dev.Backing.DeviceName
$row.HDFileName = $dev.Backing.FileName
$row.HDMode = $dev.Backing.CompatibilityMode
$row.HDSize = $dev.CapacityInKB
$row.HDDisplayName = ($esx.Config.StorageDevice.ScsiLun | where {$_.Uuid -eq $dev.Backing.LunUuid}).DisplayName
$report += $row
}
}
}
}
$report
В итоге за 5 минут мы получили список виртуальных машин у которых есть RDM диски. На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistik.org.