Is it possible to boot Windows 8.1 without its own bootmanager?
To answer your original question, no. Windows cannot be loaded without going through it's own bootloader (in the case of UEFI installs, bootmgfw.efi). This is because Windows expects that bootmanager to be there AND to call winload.efi. If that does not happen, then Windows will crash until you fix the problem. There are many reasons to this (practical and ignorant). Mostly, it is because Microsoft wrote the bootmanager to handle all things (loading the OS, loading the recovery environment, pseudo pre-os environment, and etc). The only way to currently achieve any semblance of sanity is to chain load using Grub-efi.
You need to add the Windows EFI bootloader to the list of boot options in the UEFI firmware. That way, you will be able to choose whether:
- GRUB2 should be loaded or
- the Windows Bootloader should be loaded
Additional options such as the DVD drive, external harddrives or network boot should also be visible at that point. The UEFI bootloader usually resides on the \EFI
(/boot/efi/
) partition. As you have just copied the Windows harddrive image without properly installing Windows, the EFI partition of your current machine might not contain the proper bootloader. Thus it is necessary to
- Copy the bootloader to the EFI partition
- Add Windows as a boot option alongside GRUB2
You should then be able to choose which OS is booted by simply changing the boot order in the BIOS. On my laptop, pressing F12 brings up a menu for selecting which bootloader to load.
For these steps, I will use efibootmgr
and follow the steps from this tutorial:
You will need to copy the corresponding file bootmgfw.efi
to the EFI partition at \EFI\Microsoft\Boot\bootmgfw.efi
, or /boot/efi/Microsoft/Boot/bootmgfw.efi
when using Linux:
# mkdir -p /boot/efi/EFI/Microsoft
# cp -r Microsoft /boot/efi/EFI/Microsoft
where Microsoft
is a folder containing the original EFI files for your Windows version.
Then you need to add the .efi
file to the UEFI boot entries using:
# efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\Microsoft\\Boot\\bootmgfw.efi -L "Windows Boot Manager"
where of course you need to change /dev/sda
and -p 1
to the correct values for your disk device and partition number.
Note this if you have a Lenovo laptop:
Also note that at least one manufacturer (Lenovo) ships products with a known bug that causes the system to refuse to boot unless the boot loader's name is either "Windows Boot Manager" or "Red Hat Enterprise Linux".
Starting your PC should then show something like this (if you hold down the corresponding keys during the boot process):
Windows Boot Manager
ubuntu
USB CD
USB FDD
ATAPI CD
ATA HDD2
(etc.)
and bcdedit
on Windows shows this:
C:\WINDOWS\system32>bcdedit /enum firmware
Firmware Boot Manager
---------------------
identifier {fwbootmgr}
displayorder {bootmgr}
{bb086763-b111-11e2-bf8e-806e6f6e6963}
{8e7fb978-8bc8-11e2-bf2f-806e6f6e6963}
timeout 0
Windows Boot Manager
--------------------
identifier {bootmgr}
device partition=\Device\HarddiskVolume2
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale en-US
inherit {globalsettings}
integrityservices Enable
default {current}
resumeobject {ec215a09-8bc4-11e2-bf2b-0024d7eb75a4}
displayorder {current}
toolsdisplayorder {memdiag}
timeout 2
(...)
Firmware Application (101fffff)
-------------------------------
identifier {bb086763-b111-11e2-bf8e-806e6f6e6963}
device partition=\Device\HarddiskVolume2
path \EFI\ubuntu\grubx64.efi
description ubuntu