Windows Server 2012 R2 přináší nové možnosti pro virtuální stroje - druhou generaci virtuálních strojů. Dnes se podíváme na jejich možnosti, porovnání a skriptování.
Virtuální stroje druhé generace jsou prezentovány hypervizorem jako jednodušší hardware a využívají UEFI (Unified Extensible Firmware Interface) firmware namísto BIOS. Mnoho emulovaných zařízení je kompletně odebráno z této druhé generace VM - využívá se VMBUS již od boot. První generace virtuálních strojů je naprosto identická, tak jak tomu bylo od prvního vydání Hyper-V pro Windows Server 2008. Druhá generace přináší následující:
Možnost Secure Boot (povoleno ve výchozím nastavení)
Boot z SCSI VHD/VHDX - možnost trim, unmap a hot resizing (až 2,2TB MBR)
Boot z SCSI DVD
Podpora PXE boot pro standardní síťový adaptér (včetně IPv6)
Podpora UEFI firmware
Odebraná podpora IDE, lagacy network adaptéru, řadič disketové mechaniky a COM port (COM se víceméně používal pouze pro debugging).
Rychlejší boot virtuálního stroje o cca 20%
Porovnání struktury 1 a 2 generace virtuálních strojů:
Onoho odebírání bylo povícero, pouze ve zkratce: legacy řadič klávesnice i8042, PS/2 myš, S3 video, PCI sběrnice, revidované ACPI. Díky odebrané emulaci klávesnice je nutné modifikovat WindowsPE používané pro nasazování OS - nutné přidat balíček Windows6.2-HyperVIntegrationServices-x64.cab (o tom v samostatném článku). Díky odebrané PCI sběrnici není přítomné RemoteFX - připravuje se “náhradní řešení”.
Pro využití VM gen 2. je nutné v rámci virtuálního stroje provozovat tyto operační systémy (starší nejsou podporovány):
Windows Server 2012
Windows Server 2012 R2
Windows 8
Windows 8.1
POZOR: jsou podporovány pouze x64 bitové verze operačních systémů (v UEFI není implementován “Compatibility Support Module” - jedná se o UEFI Class 3). Přímá konverze mezi gen 1 a gen 2 není možná, nicméně je k dispozici PowerShell skript, který provede sejmutí obsahu původního disku, založí nový G2 virtuální stroj a obsah původního disku aplikuje. Skript je k dispozici zde: http://code.msdn.microsoft.com/ConvertVMGeneration, manuální migrace VM je možná, nicméně velmi pracná (obnáší DISM, sejmutí image, vytvoření odpovídajících diskových oddílů, aplikace na nový disk, modifikace boot, vytvoření nové VM,…)
Co jednotlivé nové vlastnosti znamenají z pohledu provozu:
V předchozích verzích Hyper-V nebylo možné startovat VM z SCSI disku, bylo nutné použít IDE. Možnost boot z SCSI disku není díky věcí SCSI řadiče, ale UEFI firmware. Náhradou za SCSI disk získáte rychlejší nasazení a start VM, možnost využití trim, unmap, hot/online resize, hot add/remove disků, větší boot partition (až 2,2TB), nižší overhead.
Předchozí verze Hyper-V vyžadovaly pro PXE boot emulovaný síťový adaptér. Gen 2 podporuje PXE boot u natovního adaptéru, není tedy nutné po instalaci měnit adaptér, aby bylo dosaženo větší propustnosti. Také je možné využít IPv6 pro PXE boot.
Secure boot - technologie zavede ve Windows 8 zajišťuje konzistentní start OS, kde je prováděna kontrola zavaděče, resp. jeho podpisu v návaznosti na UEFI firmware. Secure Boot je ve výchozím nastavení po vytvoření gen 2 VM zapnutý. Pro chod UEFI je nutné odlišené vytvoření diskových oddílů (popis zde: http://technet.microsoft.com/en-us/library/hh824839.aspx).
Díky přítomnosti VMBUS již od startu VM je možné defakto dosáhnout výše uvedených možností, jako je SCISI boot, optimalizovaný přístup k HW zdrojům a menší závislost na parent partition
Závěrem, samozřejmostí je možnost provozovat gen 1 a gen 2 VM na jednom Hyper-V stroji, není problém. Naprosoto identicky, jako jsou spravovány gen 1 VM pomoví PowerShell, je možné spravovat i gen 2 VM. Zde je několik málo příkladů:
Získání informace o generaci VM:
1: Get-VM | ft Name,Generation
Vytvoření gen 2 VM:
1: New-VM -VMName Gen2 -Generation 2
Informace o boot order, nastavení boot order (první DVD):
Před změnou:
Po změně:
Vytvoření nového VHDX souboru a přidání do VM, nastavení jako primární boot:
1: New-VHD -Path "d:\Hyper-V\Gen2.vhdx" -Dynamic -SizeBytes 90GB
2: Add-VMHardDiskDrive -VMName "Gen2" -Path "d:\Hyper-V\Gen2.vhdx"
3: $vm = Get-VM -Name Gen2
4: $vhdx = Get-VMHardDiskDrive $vm
5: Set-VMFirmware $vm -FirstBootDevice $vhdx