We rise up for the things we believe in over and over again

В рамках миграции данных с одной СХД на другую понадобилось мигрировать и разделы с репликами DPM. В самом DPM есть средства миграции, и они даже работают, но как я уже говорил - DPM = problem, поэтому надо бы как-то проконтролировать, а действительно ли все тома с данными переехали куда надо. Казалось бы, что может быть проще - открыть Disk Manager, да посмотреть, какой том на каком диске. Не в этот раз - DPM плодит тома самостоятельно, и их столько, что проверять это все в рукопашную рехнешься.
Что делать? Нужно как-то получить список вида VolumeID - DiskID. Встроенные средства Win2012 просто так это сделать не позволят, но есть интересная утилитка от SysInternals под названием DiskExt, которая и выдает нужные нам данные. Одна беда - вывод ее является голым текстом, который еще надо будет парсить. Кусок этого вывода ниже:


Вывод прост - нужен парсер. Готовых нет, отсюда следует второй вывод - пишем самостоятельно. Код ниже,а еще ниже - описание того, что нам накодировано.


Как это всё безобразие работает?

В первую очередь весь вывод из файла трамбуется в одну огромную непрерывную строку, где теперь уже бывшие строки будут отделены точкой с запятой. После этого бьем получившиеся данные на блоки, где каждый блок - описание одного тома. Ограничителем блока служит сочетание "Volume: ". Ну а потом уже в цикле перебираем все эти блоки и при помощи регулярных выражений, заданных в начале скрипта, вытаскиваем все необходимые данные.

Отдельного упоминания заслуживает блок Extents. Каждый том может располагаться далеко не на одном диске, поэтому внутри блока в цикле нужно будет перебрать каждый кусок тома и выписать оттуда, на каком диске он размещен.

После того, как все данные собраны, они добавляются в общий список объектов с полями имя, точка монтирования, разделы. И затем выводится на экран. А поскольку конечный список является объектом, при желании мы можем обратиться к любому из его полей и навесить любые фильтры, какие только взбредут к нам в голову.

@музыка: Ronan Hardiman - Breakout

@темы: PowerShell, Scripting, DPM

Комментарии
16.03.2023 в 12:48

Слушай, у меня знакомый нашёл у себя в диспетчере устройств загадочное устройство:

"Контроллер замыкания виртуального жёсткого диска на себя". По-видимому, по-английски это называется "VHD loopback controller". Пробовал гуглить -- везде предлагают скачать драйвер, но нигде не написано по сути, что это такое.

Может быть ты знаешь, что это за устройство, и каким образом у виртуальных дисков может быть лупбэк?
16.03.2023 в 14:06

We rise up for the things we believe in over and over again
Называется оно вот так: "Microsoft VHD Loopback Controller". Для чего оно в точности нужно - не подскажу, сам впервые о нем узнал :(
16.03.2023 в 15:21

Hikedaya, ээх! Ещё одна загадка винды.
16.03.2023 в 18:35

We rise up for the things we believe in over and over again
zHz00, жесть в том, что я ради интереса пробежался по сервакам - нигде подобного не нашел. А казалось бы на хостах с hyper-v этому девайсу самое место :)