Hikedaya
В Dash'e под Chronostasis'ом.

KnV-программирование, говорите? Их есть у нас. Точнее, не у нас, а в Редмонде. А еще точнее - в каком-нибудь из Соединенных Штатов Индии.
Есть два файловика-виртуалки. Есть у них диск D:, где все данные и лежат. Этот диск имеет свойство пухнуть, как и всякая файлопомойка. Размер VHD-файла с этим диском уперся в свой потолок в 2 Тб (старый vhd). А расширять надо. Ну что же, процедура следующая.
Внутри виртуалки-файлопомойки переводим этот диск в состояние Offline.
В консоли Hyper-V выносим нафиг файл vhd и на его месте создаем новый vhdx с требуемым объемом (vhdx поддерживает файлы больше 2 Тб).
Снова переходим в виртуалку. Находим там свежий диск, переводим его в состояние Online, инициализируем, форматируем, даем прежнюю букву, и говорим развернутой на этом сервере DFSR - а теперь, родная, реплицируй все данные с сервера-партнера. DFSR козырнула и пошла жрать файлы.

А тем временем начинает вопить DPM. Суть в следующем. Когда в DPM в группу защиты добавляем сервер и его какой-либо диск, диск этот идентифицируется не по букве, а по своему GUID (да, опять GUID, снова GUID). Когда файлопомойке дали новый диск, естественно сменился GUID этого диска. И теперь встает вопрос - что делать с группой защиты, как в нее добавить новый диск.

Можно вынести оттуда старый и добавить новый. При попытке провернуть такой фокус DPM вопит, что бекапы, связанные со старым диском, станут невалидными (то есть придется снимать заново полный бекап в те 2 терабайта, а это время).
Можно попытаться связать запись в группе защиты об этом диске с новым GUID диска. Вот это нам и нужно.

Для такого переноса существует специальный скрипт, написанный где-то в недрах MS, который называется Migrate-Datasource.ps1. Вот статья, объясняющая, что это и как оно работает.

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

Exception calling "MigrateDataSource" with "2" argument(s): "The remote
procedure call failed. (Exception from HRESULT: 0x800706BE)"

At C:\Program Files\Microsoft System Center 2012
R2\DPM\DPM\bin\Migrate-DataSource.ps1:220 char:10
+ $dpmServer.MigrateDataSource($newDataSourceId, $oldDataSourceId)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : COMException

Error in Migration

Хм, все веселее и веселее. Ладно, а что ты мне покажешь в ручном режиме? А в ручном режиме оно мне предложило выбрать запись о диске, которую надо исправить, вывело список всех дисков (их GUIDов), которые можно к нашей многострадальной записи подцепить. Этих дисков оказалась ровно 1 штука. И я не знаю, что меня дернуло просмотреть, а кому этот GUID принадлежит, но увиденное заставило отменить скрипт от греха подальше. Дело в том, что предложенный GUID принадлежал MSR-разделу файлопомойки.

Даа, делаа... Поскольку дело было уже поздним вечером, решили эту проблему отложить до утра, чтобы окинуть ее потом свежим взглядом. Вернулись к ней только спустя дня эдак 4. И что бы мы ни делали с этим скриптом, результатом всегда было только одно - предложение связать запись в группе защиты с MSR-партицией. Черт с ним, все равно приближается время полного бекапа, так что уже были готовы убить старую запись и добавить новую. Да не тут-то было:
- Народ, а вы гляньте на последнюю точку восстановления!
- Вчера сделалась? Но ведь бекап не работал?
- Андрюха, походу после этого твоего скрипта бекап все же починился.
И действительно, бекап-то шел, как и полагалось, создалась новая точка восстановления. То есть, источник данных все же мигрировал на новый диск. А теперь поднимаем глаза выше, снова читаем надпись Error in Migration.
Становится понятным, почему провалилась попытка ручной миграции. Потому что новый диск уже был связан с записью в группе защиты и не был доступным для этой операции, только и осталось, что бедную мелкую MSR предложить.

Вот такие индийские скрипты пишутся для Data Protection Manager 2012. Хорошо еще, что хотя бы они есть, тут подсказывают, что в предыдущих версиях нужно было непосредственно базу данных DPM препарировать...

В поднятой в целях теста лаборатории этот же скрипт в такой же ситуации отработал на все сто. Далее много-много непечатного, потому печатать не буду.

Симантек, я, помнится, тебя материл безбожно. Как тут не вспомнить старое-доброе: "Вася! Если сможешь - прости!!!"

@музыка: Metal Gear Rising OST - Denver

@темы: Scripting, PowerShell, DPM, Этот безумный мир