Since Windows Server 2012 R2, Microsoft introduced a new VM Type called Generation 2 VM. There are some advantages using Generation (Gen) 2 VM such as Hot add/remove Virtual Network Adapter, Live expand the VHDX, or Secure Boot.
However, still, there are some reasons why you still use Generation 1 over Generation 2. Below the different of Generation 1 and Generation 2 VMs:
Generation 1
- Supports legacy drivers and BIOS based Architecture.
- Use BIOS Firmware.
- Provides 2 IDE controllers, IDE 0 and IDE 1 to attach up to two drives on each controller.
- Connect up to four SCSI controllers and up to 64 attached drives.
- Generation 1 Supports older versions of Microsoft Operating Systems, like Windows XP, Windows Server 2003 and above.
- Supports both x86 and x64 Operating System.
- Both Generation 1 and Generation 2 Virtual Machines Support PXE boot.
- In generation 1 Virtual Machines, we need to add the Physical DVD drive on H
Generation 2
- Can only be created in Windows Server 2012R2 or later Versions.
- Uses UEFI Firmware as replacement of BIOS.
- Supports Guest Operating System VMs. (Win 2012, Win2012R2, Win 8.0(64bit) and Win 8.1(64bit).
- Provides Secure boot by default, and Secure Boot helps computer fight against the Virus infections and Malware attacks.
- No IDE controllers on Generation 2 Virtual Machines.
- Connect up to four SCSI controllers, attach 64
drives . - x86 Operating System not Supported on Generation 2 Virtual Machines.
- Both Generation 1 and Generation 2 Virtual Machines Support PXE boot
Now, how we can check if the VM is Gen 1 or Gen 2?
Basicaly, you can check the Hyper-V Manager and see if the legacy device is in there or whether the VM is booting from a SCSI controller or IDE Controller. However, we can also use PowerShell Get-VM CmdLet to see the Generation type of all of your VMs. Below the example of the command:
PS C:\Install> Get-VM | ft Name, Generation
Name Generation
---- ----------
FW 1
2008R2 (1796486) 1
DC4 2
HV2 2
PFSENSE 1
DC1 2
DC2 2
FW 1
SCCM 2
SCVMM 2
SEADC1 2
Or if you want to get all VMs on your Hyper-V Cluster, you can use the command below:
PS C:\Install> Get-VM -ComputerName (Get-ClusterNode).Name | ft Name, Generation
Name Generation
---- ----------
FW 1
2008R2 (1796486) 1
DC4 2
HV2 2
PFSENSE 1
ROUTER 2
DC1 2
DC2 2
FW 1
SCCM 2
SCVMM 2
SEADC1 2
DC2 2
CLIENT 2
SFBBE 2
SQL03 2
SQL04 2
If you like this article, please share, subscribe or you can follow our Facebook Page and Twitter.