Running KVM Nested in Microsoft Hyper-V
The other day I was doing some training for my Linux Foundation Certified System Administrator Exam and I needed to practice configuring KVM VM’s and networking so I decided I would give it a shot. In the past I’ve worked with VMWare ESXI and a few other Level-1 Hyper-visors there were able to run other hyper-visors within them, this is a term referred to as nesting, so I just assumed that Microsoft Hyper-V would let me do this by default… I was wrong. So after messing with it a bit I eventually did get it working so I figured I would do a quick write-up because I couldn’t see the information posted anywhere else, so here we go.
Pre-Requisites
- Windows 10
- Microsoft Hyper-V Feature Enabled
- An installed copy of Linux in Hyper-V
- Powershell (Enabled by default in Windows 10)
How-To
- Download this powershell script from Github (It’s written by Microsoft don’t worry)
- Copy the script to your desktop
- Open up your Windows Powershell (Run it as admin)
- Browse to the location of your Powershell Script
- Run the following command to allow for script execution in Powershell
- Set-ExecutionPolicy Bypass
- Now just go ahead and type .\nameofyourscript.ps1 NAMEOFYOURLINUXVMINHYPERV
- If all goes well it should prompt you asking if you want to expose Virtualization Extensions this is a yes, you can enable any of the other additions if you so wish as well.
- After the script completes just go ahead and boot back up your VM in Hyper-V and you should now have access to the virtualization extensions required for KVM/XEN
The process is fairly simply but I couldn’t find any simple outline on how to get this all working, Microsoft suggests this is only so you can nest other Hyper-V instances however I wanted to do this with KVM/XEN turns out their script works great for this, thanks Microsoft! If you have any questions feel free to leave a comment and I’ll get back to you as soon as possible.
Hi Ian, from what I could find, this is the only article to discuss the support of nesting non-Microsoft hypervisors inside Hyper-V. How did it go?
I’m wanting to nest KVM/QEMU inside Hyper-V Desktop (Windows 10) to run network labs, but this is my only PC and I can’t risk loosing the setup if something becomes a problem.
Can you post an update to this great article?
Cheers,
Nick
Nick,
That’s why I posted it in the first place! So I didn’t mess with it too much just enough to get some test lab stuff setup but as far as I could tell it was working fine. I’m not too sure about how v-networking was working within the nested KVM other then passthrough was working fine, your mileage may vary though with that one. You won’t lose the setup or anything like that, you just enable hyper-v and then install it in a VM worse comes to worse you just disable hyper-v and move on your way. Nothing discussed here will touch your actual PC install at all it’s all nested within VM’s so nothing to worry about on that front. Personally I would prefer to run KVM/XEN on baremetal with Hyper-V nested but that’s just a personal preference no reason to do it that way. Anyway good luck the setup for this is pretty simple and worked fine for me!
Thanks, Ian. Amazing that more people aren’t finding their way to your article to comment on the limitations of Hyper-V for Windows 10 and trying the PowerShell script you point to. If it works well it may be a great solution for many people.
I’m a bit surprised that Microsoft isn’t improving Hyper-V on Windows 10 to the level of the features and usability that many SysOps and DevOps require (and already found in VMware Workstation). Although, a stable Type 1 hypervisor with that kind of capability would quickly disrupt things.
If I give it a go I’ll report back. Cheers.
Nick,
From what I can gather Microsoft has been trying to work on Hyper-V and bringing it into the enterprise however VMWare ESXI has been the de-facto for many Microsoft based organisations for years and just provides way more in terms of a feature set. Until Microsoft can reach full feature parity with ESXI/XEN/KVM I doubt they’ll see much of an increase in market share. There’s always the looming problem of bias towards their OS’s with their particular Hypervisor as well, that being said recently Microsoft has been pushing more for open source software so hopefully Hyper-V will become a stable type 1 hyperviser for running Linux etc under Windows.
The biggest issue that I’ve seen with both Hyper-V and ESXI is that they are essentially walled gardens, they lock down hardware passthrough to specific vendors and then stop you from using anything else. It goes far beyond the stuff you’re doing being “unsupported” and sits firmly in the realm of we will not let you use X with our software. A great example is NVIDIA GPU passthrough with ESXI, they’ve locked it specifically to using their K series cards that cost thousands of dollars whereas with KVM you can easily pass through these cards. (This is both NVIDIA and VMWare’s doing).
Anyway let me know if you have any issues and hopefully I can help you out. Cheers!
Yeah, I think Microsoft still have a difficult time with UI and UX. It is a company that is better at plumbing. Perhaps they should have hired the Workstation team that got fired recently.
Microsoft wants to capture the hearts and minds of DevOps (and SysOps?). Not making Hyper-V Desktop sing and dance like VMware Workstation isn’t going to help them do that.
I agree that lock-in is a big problem. Thankfully, open source is growing stronger, more capable and increasingly more influential every day.
I’ll let you know how it goes. I want to have a crack at running UnetLab on Ubuntu 16.04:
http://www.unetlab.com/
Hi,
I followed the steps and am able to see that virtualization is enabled in linux guest running in hyper-v on Windows 10 on a Lenovo Thinkpad Yoga.
$ sudo kvm-ok
INFO: /dev/kvm does not exist
HINT: sudo modprobe kvm_intel
INFO: Your CPU supports KVM extensions
KVM acceleration can be used
However, I’m unable to enable virtualization.
$ sudo modprobe kvm_intel
modprobe: ERROR: could not insert ‘kvm_intel’: Input/output error
$ grep vmx /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx lm constant_tsc rep_good nopl nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm tpr_shadow vnmi ept vpid fsgsbase bmi1 avx2 smep bmi2 erms xsaveopt
Has any one else run into this issue ? Any suggestions ?
-Mani
Is VTX enabled in your BIOS? Even if you enabled it via the powershell script for the VM it could or could not be enabled in BIOS that’s what I would look for first. Outside of that I would have to look more deeply into the issue you’re presenting I haven’t run into it personally.
Hi Ian, Thank you for the prompt reply. Yes VT-x is enabled in the BIOS of my laptop.
I have exactly the same issue.
I have exactly the same issue. No /dev/kvm, but lsmod can see the kvm.