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. Каждый том может располагаться далеко не на одном диске, поэтому внутри блока в цикле нужно будет перебрать каждый кусок тома и выписать оттуда, на каком диске он размещен.
После того, как все данные собраны, они добавляются в общий список объектов с полями имя, точка монтирования, разделы. И затем выводится на экран. А поскольку конечный список является объектом, при желании мы можем обратиться к любому из его полей и навесить любые фильтры, какие только взбредут к нам в голову.
"Контроллер замыкания виртуального жёсткого диска на себя". По-видимому, по-английски это называется "VHD loopback controller". Пробовал гуглить -- везде предлагают скачать драйвер, но нигде не написано по сути, что это такое.
Может быть ты знаешь, что это за устройство, и каким образом у виртуальных дисков может быть лупбэк?