Recently I picked up a Mac Book Air. It is a nice device, fast processor, lots of memory and fast hard drives. I am not to keen on using OS X so I decided to install Windows onto it. So I installed windows, loaded the drivers, installed all my applications and then went to install Hyper V to run up VM’s for different reasons. Instead of my smooth install and everything working out fine I get:
Hyper-V Cannot be installed: Virtualization is disabled in the firmware
Surely this is a mistake, I mean the machine is only a few years old, its an Intel MAC and WHAT??!?! So I check the task manager to see the enabled features on the Chip and sure enough the features is there, just disabled.
So like any good IT person I figured a reboot would fix it, hit the reboot button and checked again and the issue remains. I know from previous experience that this usually means the features needs to be enabled in the BIOS, but that might as well be french on a MAC so what was I to do? I turned to Google to help find the answers and this is generally what I found:
- If I installed OS X, the features were enabled. (So it is enabled during the boot process)
- The general way to fix this issue on the internet was to dual boot with OS X. For any cold boot, I would boot into OS X and then use the startup disk facility to warm boot into windows.
Ok, so um, OK. Sometimes I cant get over what seems to be an acceptable solution on the internet. I mean lets stop for a minute and critically think about this. First up Pros and Cons
Pros
- OS X is the best and you need nothing else ever! (Source: Fanboi)
Cons
- I have to configure, update and maintain two Operating systems (Increased attack surface and potential for attack vectors)
- I have to boot two operating systems for any cold boot situation (Double boot time, might as well have stuck with spinning rust)
- I loose 38 – 40 GB of partition in my already small SSD to an operating system that I will rarely use. (That is two extra VM’s)
- I own the hardware so for Apple (or anyone for that matter) to tell me it is only enabled under specific circumstances is garbage.
Right. So as we can see the Cons to this solution seem to be outweighing any OS X is the best argument. So next step in my critical thinking is to assess what I know to be true which is
- I can not enable the feature in BIOS unless I consider using a custom BIOS Firmware (Which I don’t want to do)
- The feature is able to be turned on during the boot process, and under the right circumstances is enabled in Windows (So it isn’t impossible)
- I want to use HyperV and not an alternative like Virtual Box because Hyper V is a type 1 hyper visor. (Its a thing – See http://searchservervirtualization.techtarget.com/tip/Virtualization-hypervisor-comparison-Type-1-vs-Type-2-hypervisors)
I tried may different things to try and resolve the issue including
- Using a non UEFI boot image to see if legacy would enable the feature – Nope
- Looking for a way to turn it on manually once the operating system was booted – Nope
- More research
After some time looking into how it all works I found an alternative boot loader that could be used which promised that it could enable the feature under Windows. I have used alternative boot loaders before (I am looking at you Grub) so I figured it couldn’t hurt and was worth a go. The boot loader was called rEFInd and you can see its Sourceforge page at https://sourceforge.net/projects/refind/ and a great book about it at http://www.rodsbooks.com/refind/
So here are the steps I took to install it
- Install Windows using the whole drive
- Install OS X onto a USB drive
- Boot into a OS X Recovery Environment (I installed OS X onto a USB drive, then held Option during the boot, selected recovery environment)
- In a terminal in the Recover execute
csrutil disable
- Next reboot into OSX (You can actually do this via windows as well, more on that later)
- Download rEFInd and modify the refind.conf-sample file that comes with the download and modify the following values
#Set a short timeout to allow quick boot timeout 1 #Enable the feature I truely want enable_and_lock_vmx true
- Run from a terminal window
./refind-install
- Optional: Reboot into recovery and run (This is recommended)
csrutil enable
- Shutdown the machine
- Remove the OS X USB Key
- Boot
Once that is complete the white rEFInd boot manager should boot showing all of the available disks for 1 second and then windows should boot normally. If you check the task manager now you can see Virtualisation is enabled, and I can complete and run VM’s in Hyper V.
Further Notes
While I did this using OS X, it can be done using Windows aswell. – http://www.rodsbooks.com/refind/installing.html
Also I can configure the boot loader via Windows by running (In an Administrator Command Prompt)
mountvol S: /S
Then using the same window I can change directory to
S: cd EFI cd refind #Open the Item in Notepad++ "c:\Program Files (x86)\Notepad++\notepad++.exe" refind.conf