Hyper-V – Konwersja pomiędzy generacjami maszyn wirtualnych

Wraz z nadejściem Windows Server 2012 R2 i Windows 8.1 w Hyper-V zostało wprowadzone kilka nowości dotyczących maszyn wirtualnych. Jedną z nich jest możliwość wyboru “podejścia” sprzętowego do VM, zwanego generacją maszyny wirtualnej.

Generacje są niczym innym, jak odmiennymi szablonami hardware, jakie możemy użyć tworząc VM. W następnym poście opiszę dokładniej z czym to się je oraz jakie różnice pomiędzy nimi dokładnie nastąpiły. Na potrzeby tego posta ograniczymy się do skondensowanej wiedzy na ten temat.

Pierwsza generacja jest klasycznym podejściem, z jakim do tej pory mieliśmy do czynienia w Hyper-V tzn. korzysta z BIOS i straszy szeregiem różnych obostrzeń natury sprzętowej: rozruch tylko z kontrolerów IDE lub Legacy NIC czy hot-add VHD obsługiwany tylko przez kontrolery SCSI. Możliwość używania zarówno dysków VHD jak i VHDX. Istotną zaletą jest to, że każdy system operacyjny może zostać uruchomiony na tym sprzęcie.

Natomiast druga generacja jest “nowym” podejściem sprzętowym. Tutaj otrzymujemy jako podstawę UEFI, możliwość rozruchu z kontrolerów SCSI, Synthetic NIC oraz bezpieczny rozruch w trybie SecureBoot. Akceptowane są tylko VHDX. Postawimy na tym tylko Windows 8 / 8.1 oraz Windows Server 2012 / 2012 R2.

I w czym problem skoro jest to dosyć proste ? Chociażby w tym, że czasami admin może się zagapić / zapomnieć / kot urządzi taniec na klawiaturze (opcją domyślną jest pierwsza generacja) i niechcący zostanie stworzona VMka bez funkcjonalności, jakich chcielibyśmy użyć, a potem budzimy się z przysłowiowym, palcem w nocniku, bo generacji nie możemy sobie zmienić bez ponownego tworzenia maszyny.

Na szczęście istnieje obejście tego problemu – ConvertVMGeneration. Jest to skrypt w PowerShellu napisany przez Johna Howarda (swoją drogą bardzo polecam bloga), który umożliwia nam konwersję maszyny wirtualnej z generacji pierwszej do drugiej. Zasada działania jest bardzo prosta i polega na skopiowaniu składowych danej VM (uprzedzając pytania, źrodłowa pozostaje nienaruszona) i stworzeniu z niej nowej, o wyższej generacji.

Należy pamiętać jednak o ograniczeniach tegoż skryptu tzn. brak możliwości migracji wielu partycji z jednego rozruchowego VHD, niemożność konwersji w przypadku posiadania przez maszynę checkpointów, shared VHD, włączonej VM oraz ochranianej przez Hyper-V Replica. Nie może również uzyskać porozumienia z WinRE na systemie gościa, ale to możemy ominąć uruchamiając skrypt z parametrem -IgnoreWinRE.

Plus oczywiście ograniczenia narzucane przez samą generację 2 tzn. tylko systemy Windows 8 / 8.1 oraz Windows Server 2012 / 2012 R2. Skrypt jest cały czas dopracowywany (ostatni update miał miejsce tydzień temu) i nie jest zalecany do wykorzystania w środowiskach produkcyjnych.

Skoro wiemy już sporo w tematyce konwersji to przystępujemy do zabawy 😉

Skrypt uruchamiamy za pomocą polecenia ConvertVMGeneration -VMName “NazwaMaszyny” -Path ŚcieżkaPoKonwersji.

Jak widzimy wszystko poszło sprawnie i możemy się cieszyć zmigrowaną VMką 😀

Maszyna wirtualna przed konwersją:

I po:

One thought on “Hyper-V – Konwersja pomiędzy generacjami maszyn wirtualnych

Comments are closed.