Утиліта для конвертації покоління віртуальних машин.
Покоління віртуальної машини в 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
Також подробиці можна знайти на сторінці автора утиліти, де є ціла серія статей про друге покоління ВМ.
.