Ubuntu – Ubuntu 13.04 on UEFI system with Windows Boot Manager as the main loader


On my old laptop (legacy BIOS, MBR disk), this was perfectly possible to get working:

  • I turn on the computer and see the Windows Boot Manager

  • I use EasyBCD (or BootPart, or something else) to add an option to the BCD menu which allows me to boot into GRUB, and then into Ubuntu

I can't figure how to do this on my new laptop (UEFI, GPT disk), whether in UEFI or legacy mode.

Currently I've installed (and even booted!) Ubuntu on my laptop, but only with the help of an external GRUB (on a USB flash drive).

How can I add GRUB as an option in the Windows Boot Manager on a UEFI laptop?

(No, I don't want to change my primary boot loader. So no, I don't want to overwrite the Windows boot loader with GRUB.)

Best Answer

AFAIK, you can't. To the best of my knowledge, the Windows boot loader doesn't provide any means to launch non-Windows EFI boot loaders. I could be wrong about this, though; I admit that my knowledge of the Windows boot loader is limited.

Instead, you can configure any of a number of EFI boot loaders and boot managers for Linux to handle the boot-selection job. When everything works fine, GRUB can do this job; but as of version 13.04, Ubuntu doesn't set up GRUB correctly for dual-booting when it installs. There can also be other problems caused by EFI bugs. To work around the Ubuntu GRUB configuration problem, two solutions are easiest:

  • Run Boot Repair on the system. If this works, it will re-install and reconfigure GRUB so that it can launch Windows.
  • Install my rEFInd boot manager. This is most easily done by installing the Debian package under Ubuntu. (Be sure that your ESP is mounted at /boot/efi, though.) Once installed, rEFInd should enable booting directly into Windows or directly into Linux, bypassing GRUB.

Note that neither of these solutions completely replaces the Windows boot loader; they both just make another boot program (GRUB or rEFInd) run before the Windows boot loader. You can stop reading here if you like, but some background may be helpful in understanding this:

When booting a multi-boot computer, a boot manager gives you a way to choose between two or more OSes, typically through a menu. Most EFIs include an awkward but built-in boot manager. rEFInd is also a boot manager, and GRUB includes a boot manager. A boot loader, by contrast, loads an OS kernel and any associated files and starts the kernel running. The EFI doesn't include a boot loader, so every OS must provide one. GRUB is a boot loader for Linux (but not for Windows) in addition to being a boot manager, the Linux kernel (since version 3.3.0) can function as its own boot loader, and Windows provides its own boot loader. rEFInd is not a boot loader; to boot Linux, it relies on the EFI stub loader or some other boot loader to load the kernel.

Thus, it's not possible to replace the Windows boot loader with GRUB, since GRUB is not a Windows boot loader. GRUB can use its boot manager features to chainload to the Windows boot loader, though.