Поколение виртуальной машины в Hyper-V выбирается при создании и в дальнейшем изменить его невозможно, по крайней мере с помощью штатных средств. Однако нашлись добрые люди, разработавшие специальную утилиту Convert-VMGeneration. Утилита представляет из себя PowerShell скрипт и умеет конвертировать виртуальные машины первого поколения в виртуальные машины второго поколения.
На данный момент доступна версия 1.04, которая будет использоваться в данной статье.
Предварительные требования
Утилита Convert-VMGeneration может быть запущена только на Windows Server 2012 R2 (вариант установки с GUI) или Windows 8.1 с установленной ролью Hyper-V. Утилита не тестировалась в варианте установки Server Core или на бесплатном Hyper-V Server 2012 R2, соответственно корректная работа в этих системах не гарантируется.
В качестве гостевой ОС в конвертируемых ВМ можно использовать только операционные системы Microsoft Windows Server 2012\2012 R2 и 64-битные редакции Windows 8\8.1. Также перед конвертированием нужно убедиться, что виртуальные машины:
• Остановлены;
• Не имеют снимков (checkpoints);
• Не используют общих дисков (shared VHDX);
• Не участвуют в репликации (Hyper-V replica);
• Виртуальные диски не разбиты на несколько разделов.
Примечание. В текущей версии поддерживается экспериментальный параметр With-IgnoreReplicaCheck, позволяющий конвертировать машины, участвующие в репликации.
Конвертирование
Для начала запустим консоль PowerShell и выведем список имеющихся на сервере виртуальных машин. Как видите, у нас как раз имеется одна машина первого поколения SRV2, ее и возьмем для конвертации.
Дальше запускаем утилиту с необходимыми параметрами. Для примера запустим конвертацию машины SRV2, укажем расположение новой ВМ в папке H:\Hyper-V:
E:\Scripts\Convert-VMGeneration.ps1 -VMName SRV2 -Path H:\Hyper-V -IgnoreWinRE
Скрипт выдаст предупреждение и обязательно потребует подтвердить операцию. По окончании работы мы получим новую машину с именем SRV2 (Generation 2) и конфигурацией, идентичной исходной машине SRV2.
И для проверки еще раз выведем список ВМ на сервере. Проверим работу новой ВМ, после чего исходную машину можно удалять. При этом надо помнить, что при конвертировании получается точная копия машины, с тем-же самым именем и IP-адресом (если используется статика). Если ненароком стартовать обе машины, то могут возникнуть проблемы.
И еще одно замечание. Как вы заметили, при запуске скрипта я использовал параметр IgnoreWinRE. Без этого параметра отработка скрипта будет остановлена с ошибкой.
Для исключения ошибки можно перед конвертацией отключить среду восстановления WinRE на исходной машине командой, запущенной из командной строки с повышенными привилегиями:
reagentc /disable
Эта команда перенесет файл среды восстановления (winre.wim) на системный диск, в папку Windows\System32\Recovery. После конвертации на новой машине надо будет проделать обратную операцию, включив среду восстановления командой:
reagentc /enable
Подробная документация по настройкам и параметрам содержится в самом скрипте, вывести их можно командой:
Get-Help .\Convert-VMGeneration.ps1
Также подробности можно найти на странице автора утилиты, где есть целая серия статей про второе поколение ВМ.