Hyper-V VM generations & versioning explained

As I’ve recently noticed some confusion around the difference between the terms Hyper-V VM versions and Hyper-V VM generations, I like to clarify a few things and then talk a bit more about each. Let’s start with Hyper-V VM generations.

Hyper-V VM generations are directly related to VM (virtual) hardware. For the first Hyper-V releases, developers had to come up with some sort of predefined virtual hardware. They wanted to provide Hyper-V-platform compatibility with the underlying hardware, so the Hyper-V would be able to run problem-free right out of the box. They also wanted the guest OS to recognize VM virtual (emulated) hardware easily to give the end user a large variety of supported guest operating systems. This was called generation 1 virtual machines and you would have recognized a lot of hardware that you would see on a true physical machine also.

By the Windows Server 2012 R2 release Hyper-V team decided to reevaluate the virtual hardware set to eliminate obsolete devices and build a platform that, theoretically, would take less resources from the physical system due to a smaller number of virtual components to emulate. To distinguish this new and revised setup from the earlier setup, it is called the generation 2 Hyper-V VM, while the previous setup is referred to as the generation 1 Hyper-V VM.

Figure 1. Hyper-V Manager. VM generation selection

Let’s see what is inside:

Removed: BIOS firmware, network adapter (based on Intel/Tulip 21140), IDE, floppy, DMA, i8042 keyboard, PS/2 mouse controllers, S3 video, PIT, PIC, Super I/O, PCI bus, speaker and more

Added: UEFI firmware, SCSI controller, new software-based DVD device and new network controller

Figure 2. Hyper-V VM generation 1 and generation 2 compared

Benefits of generation 2 VM:

Disadvantages:

Considerations:

Comparing the generation 1 VM with the generation 2 VM is like comparing an old laptop with a new one at some point. The newer generation is smaller with new components inside, but at the same time it does the same things (application installation, internet browsing and so on) that you could do with the older generation.

Ok, I hope you got the idea of what a Hyper-V VM generation is, and now it’s time to switch to Hyper-V VM versions.

A Hyper-V VM version is also known as a VM configuration version. This term represents the VM configuration, saved state and snapshots compatibility with the Hyper-V host version. In other words, this defines the hypervisor features that are available for a certain VM.

The newest VM configuration versions aren’t able to run on previous host versions, and older configurations can run on new hosts, but with limited functionality because newer hosts only provide backwards compatibility.

In a mixed environment of Hyper-V hosts on different versions of a Windows desktop OS and a Windows Server OS, this versioning can create confusion. Since its debut in Windows Server 2008, Hyper-V brought the new Hyper-V VM version in every major release or update. For example, Hyper-V on Windows Server 2008 has a 1.0 VM configuration version. On Windows Server 2008, SP1, version 2.0, and Windows Server 2012 R2 has the 5.0 version. Lately, Windows Server 2016 Technical Preview and Windows 10 with its updates introduced VMs with configuration versions from 6.2 to 8.0.

For previous Hyper-V versions, a VM configuration upgrade was performed within the host upgrade. New versions leave it up to an administrator.

Figure 3. Hyper-V Manager. Upgrade VM configuration

The meaning of this is simple: new Hyper-V features are only available with a certain version of VM configuration. There is no reason you should postpone upgrading, unless you run a mixed Hyper-V environment and plan to migrate VMs between hosts with different OS versions.

For example, a secure boot for Linux VMs is working for VMs starting from the 6.0 configuration version, and PowerShell Direct from the 6.2 version. More details can be found in this article.

NOTE: The VM configuration version can only be updated, not downgraded.

A few PowerShell cmdlets can help you with VM configuration versions. Check the versions for all VMs at the host: Get-VM | select name, state, version. Perform manual VM configuration conversion thus: Update-VMVersion -Name “VM name.”

NOTE: The VM should be turned off prior to this operation.

Hyper-V Manager and PowerShell cmdlet (Get-VM) can always help you define a VM’s generation and configuration version. Don’t overlook it as you move forward. Good luck!

Figure 4. Hyper-V Manager. VM generation and configuration

Helpful resources

Exit mobile version