Как получить список виртуальных машин ESXI с RDM дисками

Обновлено 18.12.2019

RDM LogoДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в России Pyatilistnik.org. В прошлый раз мы с вами разобрали ошибку 0xc000007b при запуске Windows 10. В сегодняшней публикации я научу вас с помощью PowerCli получать список виртуальных машин у которых есть подключенные RDM диски. Данная задача была связана с тем, что проводилась уборка на системах хранения данных и нужно было понять, есть ли подключенные LUN виртуальным машинам.

Постановка задачи

Заказчик хотел выполнить миграцию с SAN на SAN, и было настроено множество виртуальных машин с RDM. Напоминаю, что RDM диски, это физически подключенные и проброшенные на прямую LUN внутри виртуальной машины.

Нужно получить данные:

  • Имя виртуальной машины
  • Имя жесткого диска
  • Тип диска (физическая или виртуальная совместимость)
  • LUN ID устройства
  • VML ID устройства
  • Имя файла VMDK
  • Размер RDM LUN

Перед выполнением задачи у вас должны быть выполнены требования:

  1. Быть права на подключение к vCenter
  2. Должна быть установлена PowerCLI

Скрипт для получения виртуальных машин с RDM дисками

Первое, что вы должны сделать, это подключиться к серверу vCenter либо из PowerCLI либо из PowerShell (ISE). Подключение к серверу осуществляется через командлет Connect-VIServer.

Connect-VIServer -Server vcenter.root.pyatilistnik.org

PowerCli подключение к vCenter

Если выскакивает ошибка подключения Error: Invalid server certificate(/oshibka-podklyucheniya-k-vcenter-cherez-powercli/), то она устраняется очень легко.

Чтобы получить список RDM дисков, это диски с типом DiskType=RawPhysical

Get-VM | Get-HardDisk | Where-Object {$_.DiskType -like “Raw*”} | FT -autosize

На выходе вы получите Тип диска, имя VMDK файла и его размер, это уже что-то

список виртуальных машин с RDM дисками

Давайте выведем еще номера LUN.

Get-VM | Get-HardDisk | Where-Object {$_.DiskType -like “Raw*”} | Select @{N=”VMName”;E={$_.Parent}},Name,DiskType,@{N=”LUN_ID”;E={$_.ScsiCanonicalName}},@{N=”VML_ID”;E={$_.DeviceName}},Filename,CapacityGB

Приятно что мы уже получили LUN_ID и VML_ID

Получение номеров LUN у RDM дисков

Теперь давайте все выведем в тестовый файл csv или txt

Get-VM | Get-HardDisk | Where-Object {$_.DiskType -like “Raw*”} | Select @{N=”VMName”;E={$_.Parent}},Name,DiskType,@{N=”LUN_ID”;E={$_.ScsiCanonicalName}},@{N=”VML_ID”;E={$_.DeviceName}},Filename,CapacityGB | Export-Csv C:\RDM-list.txt -NoTypeInformation

Если хотите вывести, чтобы еще был ESXI хост, то скрипт будет таким:

Get-VM | Get-HardDisk | Where-Object {$_.DiskType -like “Raw*”} | Select @{N=”VMName”;E={$_.Parent}},@{N=”ESXi Host”;E={$_.Parent.VMHost.Name}},Name,DiskType,@{N=”LUN_ID”;E={$_.ScsiCanonicalName}},@{N=”VML_ID”;E={$_.DeviceName}},Filename,CapacityGB | Export-Csv C:\RDM-list.txt -NoTypeInformation

Вот еще пример подобного скрипта

Connect-VIServer <имя сервера>
$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

Поиск на определенном кластере

$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.

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *