Managing EFI Boot Loaders for Linux

by Rod Smith, rodsmith@rodsbooks.com

Originally written: 9/23/2011; last update: 7/7/2018

This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!

Donate $1.00 Donate $2.50 Donate $5.00 Donate $10.00 Donate another value
Donate with PayPal
Donate with PayPal
Donate with PayPal
Donate with PayPal
Donate with PayPal

Most computers today boot using Extensible Firmware Interface (EFI) firmware, or its version-2.x variant, Unified EFI (UEFI). The way EFI computers boot is very different from the way older computers based on the Basic Input/Output System (BIOS) boot. This fact is both positive and negative. On the plus side, the EFI boot method is much more flexible and, in theory, easier to configure than is the BIOS boot method. On the minus side, EFI skills and documentation still lags BIOS skills and documentation, so people experienced in the BIOS method of booting often make mistakes when dealing with newer EFI-based computers. Even EFI support in Linux distributions continues to be a source of occasional problems, particularly with respect to obscure or unusual situations.

I've written this set of Web pages with the goal of explaining some of the basics of the EFI boot methods, most notably including how to install and manage EFI boot loaders. This document is broken into a number of sections, as detailed below.

Sections

Note: Another EFI boot loader for Linux, efilinux, is an out-of-kernel precursor to the kernel's EFI stub loader. It's got the stub loader's disadvantages and few of its advantages. I've had little success getting it working, although I've only tested it on a couple of systems. I therefore don't cover it here, aside from this paragraph. At least two additional programs, Shim and PreLoader, exist to help work around boot problems associated with Secure Boot; these are described in the first section on Secure Boot.

Quick Recommendations

Most Linux distributions install the EFI version of GRUB 2 on EFI-based computers. When I first wrote these pages, GRUB 2 barely worked, but it's much more reliable in 2018 than in 2011. Thus, if you're happy with GRUB 2 as installed by your distribution, you might as well stick with it.

There are problems with GRUB 2, though. Some of these problems relate to the fact that it can be difficult to control your boot mode (EFI vs. BIOS) when you install an OS, and therefore difficult to tell which version of GRUB you've installed. There are also cases where GRUB misbehaves; it may fail to launch, refuse to chainload to Windows or OS X, or do other strange things. In these cases, or if you dislike GRUB 2, you should try something else.

As of mid-2018, the best of these boot loaders is probably the EFI stub loader, which is built into the Linux kernel itself. The stub loader is simple, but it can be awkward to control, so you'll probably want to use it in conjunction with rEFInd or gummiboot/systemd-boot, which are boot managers—they present menus that enable you to launch a boot loader.

The SYSLINUX boot loader is available for both BIOS and EFI, but hasn't seen any development activity since 2014. Its EFI version works reasonably well, although it's not very popular. ELILO is similar to SYSLINUX, but its Sourceforge page includes a note explicitly stating that it is no longer being actively developed. Despite this fact, ELILO is reasonably reliable, in my experience.

GRUB Legacy, like ELILO, is no longer being actively developed. Furthermore, the original version is BIOS-only; EFI support is available only in a significantly-patched version produced by Red Hat/Fedora. Although this version is not being actively developed, it's worked reasonably well for me.

Both versions of GRUB, rEFIt, rEFInd, and gummiboot can function as boot managers for non-Linux OSes; that is, they can chainload other boot loaders. ELILO and SYSLINUX are Linux-only tools; if you multi-boot with another OS, you'll need to use another program to switch between Linux and your other OS.

Be aware that there are significant system-specific quirks. I've never gotten ELILO to work on my 32-bit Mac Mini, for instance. ELILO does work with a 32-bit version of VirtualBox's EFI, so I suspect a Mac-specific quirk—but I've seen many references to ELILO working on Macs, so it may be model-specific, or I may be doing something wrong.

If you have a computer that shipped with Windows 8 installed, chances are the firmware is set to use Secure Boot. This is a feature designed to prevent malware from infecting the computer before the OS has a chance to take over. Unfortunately, it also complicates the installation and management of boot loaders. If you need help, read my section on Secure Boot.

Additional Resources


copyright © 2011–2018 by Roderick W. Smith

If you have problems with or comments about this web page, please e-mail me at rodsmith@rodsbooks.com. Thanks.

Return to my main Web page.