Этой статьёй я хочу открыть серию статей, целью каждой из которых будет описание одной из написанных мной функций PowerCLI или так называемых командлетов (cmdlets), предназначенных для решения задач в виртуальных инфраструктурах, которые невозможно полноценно осуществить с помощью только лишь встроенных функций PowerCLI. Все эти функции будут объединены в один модуль - Vi-Module. Как им пользоваться, можете почитать здесь.
Итак, сегодняшняя функция Get-RDM или Get-ViMRDM. Не удивляйтесь, у каждой функции кроме её собственного имени будет и дополнительное с префиксом - ViM, указывающим на принадлежность к одному модулю (Virtual infrastructure Module).
Ни для кого не секрет, что VMware с незапамятных времён поддерживает технологию Raw Device Mapping. Эта технология позволяет виртуальной машине посредством специального файла, находящегося на одном из Datastore, получить прямой доступ к LUN.
Как же найти все VM, имеющие RDM диски, а также получить о них как можно больше нужной, важной и, самое главное, структурированной информации?
VMware для этой цели предлагает использовать встроенную функцию Get-HardDisk. Недостаток данного метода в том, что он не предоставляет такого необходимого параметра как LUN ID. В принципе, он и не должен его предоставлять, поскольку Get-HardDisk принимает как параметр один или несколько объектов виртуальных машин, возвращаемых функцией Get-VM, а виртуальная машина «не располагает» такой информацией. Зато ESXi-сервер, на котором зарегистрирована данная машина, «знает» так необходимый нам LUN ID.
В vSphere Client можно просмотреть его следующим образом: VM-> Edit Settings-> выберите Hard Disk с «Mapped Raw LUN» в Summary-> Manage Paths:
В открывшемся окне вы увидите LUN ID вашего RAW диска:
Для чего же так важен данный параметр? Дело в том, что при манипуляциях с RAW дисками одинакового размера, например, при добавлении диска в vSphere Client (LUN ID 24 и 25 на картинке), либо при удалении с СХД, это единственный параметр отличающий разные LUN. Конечно могут быть случаи, когда есть 2 LUN с одинаковым LUN ID, но это случается редко и не понижает важности данного параметра.
Функция Get-RDM, как и положено любой «правильной» функции PowerShell, возвращает не текст, а объекты, с которыми можно производить все стандартные операции над объектами: сортировка (|Sort-Object), фильтрация (|Where-Object), экспорт в файл (|Export-Csv) и визуализация (|Format-Table, |Format-List, |Format-Wide).
Как это применимо на практике? Смотрите примеры внутри самой функции:
Get-Help Get-RDM -Examples
Я лично очень часто пользуюсь фильтром (|Where-Object {$_.HDSizeGB -gt 1}), чтобы отфильтровать «служебные» диски размером менее 1GB, например, диски SRM-сервера.
С помощью Regex функция выделяет имя Datastore из имени VMDK-файла.
И, наконец, функция визуально показывает с помощью Write-Progress продвижение своей работы с указанием текущей ВМ и её диска прямо в окне PowerCLi. Даже если вы отфильтровали RAW-диски по какому-либо критерию, функция всё равно покажет вам, что она их нашла.