Managing EFI Boot Loaders for Linux:
Using ELILO

by Rod Smith, rodsmith@rodsbooks.com

Originally written: 9/23/2011; last update: 4/27/2013

I'm a technical writer and consultant specializing in Linux technologies. 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

This page is part of my Managing EFI Boot Loaders for Linux document. If a Web search has brought you to this page, you may want to start at the beginning.

The EFI Linux Loader (ELILO) is the oldest and most stable EFI boot loader for Linux. It's similar to the old Linux Loader (LILO) BIOS boot loader, so Linux old-timers should find ELILO familiar.

When to Use ELILO

ELILO requires that the kernel and initial RAM disk files be stored on an EFI-accessible partition. The simplest way to meet this requirement is to use the ESP. These files can be quite large—a single set can be 10 or 20 MiB in size. Thus, ELILO is not a good choice if your ESP is undersized.

ELILO is capable of booting a Linux kernel, but as far as I know it can't load any other OS's kernel or chain load to another boot loader. Thus, if you intend to multi-boot your computer with a non-Linux OS, you will have to either rely on your firmware's boot manager or use another boot manager, such as rEFIt, rEFInd, or gummiboot, for this task.

I've had little success using ELILO on my 32-bit Intel-based Mac Mini, but it works well on three 64-bit UEFI-based PCs and both 32- and 64-bit VirtualBox setups. I've also seen reports online of ELILO working on Macs, so I suspect there's a model-specific problem with my system, or perhaps a Mac configuration quirk I haven't mastered. ELILO is far more reliable and simpler to configure on most computers than is GRUB 2. Overall, ELILO is my second-choice EFI boot loader for Linux, at least on UEFI-based PCs. (Fedora's patched GRUB Legacy comes in a very close third.) My first choice, the Linux kernel EFI stub loader, is more reliable than ELILO (it works on my Mac Mini, albeit with significant limitations), but it requires a 3.3.0 or later kernel. If necessary, ELILO can be paired with rEFIt, rEFInd, or gummiboot in a dual-boot configuration.

ELILO does not explicitly support Secure Boot, and many ELILO binaries were compiled with versions of GNU-EFI that prevent their being signed. If you have a more recent binary, though, you can sign your copy of ELILO to launch it in Secure Boot mode. The program will then launch any Linux kernel—even one that has not been signed. This might or might not be desirable, depending on your local security policies. See the page on Secure Boot for more on this topic.

Installing ELILO

ELILO installation works just as described in EFI Boot Loader Installation. Some distributions include scripts that are intended to help with the file copying and configuring required by ELILO, but in my experience, these scripts often get things badly wrong. Therefore, I recommend not using them. Because the scripts sometimes run automatically when you upgrade your kernel, it's probably best to install ELILO from binary or source tarball rather than from a distribution's package. (The package file available from the ELILO Sourceforge download page includes binary .efi files for three architectures and a source code tarball.) On the other hand, perhaps the bugs I've encountered will be fixed by the time you read this, or perhaps your distribution will have a better package. (I encountered the worst problems with OpenSUSE, as I recall.)

ELILO installation requires at least two files: The elilo.efi boot loader program file and the elilo.conf configuration file. (If you install from the official ELILO package, the .efi file will be called elilo-3.14-x86_64.efi or something similar. You can keep this name or rename the file, as you see fit.) In practice, you will probably have to copy your Linux kernel file and its associated initial RAM disk file to the ESP, too. This is because ELILO doesn't include any filesystem drivers, meaning that it's dependent upon the EFI to read the kernel and initial RAM disk files. In fact, I've been unsuccessful at getting ELILO to read a kernel from anything other than its installation partition, although the documentation claims it can be done.

If you must store your kernels on a partition other than the ESP, you may be able to use an EFI filesystem driver to give the EFI access to another partition, then store ELILO, the kernel, and its initial RAM disk file on that partition. I've written a page on EFI drivers as part of the documentation for rEFInd, so you should consult that page if you need more information on this topic.

In case you're not familiar with Linux kernels and initial RAM disks, these files are typically stored in /boot:

A fresh Linux installation might provide just one kernel and initial RAM disk file, but some installations have two or more if they've downloaded updates or provide kernel options at boot time. If possible, you may want to copy all of these files to the ESP. Storing the files in the same directory as elilo.efi can slightly simplify the task of configuring the boot loader.

To sum up, the files in a working ELILO configuration will look something like this:

$ ls -l /boot/efi/EFI/ELILO/
total 27855
-rwxr-xr-x 1 root root  3769632 2011-05-22 00:07 bzImage-2.6.39
-rwxr-xr-x 1 root root      362 2011-09-22 00:47 elilo.conf
-rwxr-xr-x 1 root root   241451 2011-05-20 21:31 elilo.efi
-rwxr-xr-x 1 root root 14034535 2011-05-20 21:34 initrd.img-2.6.38-8-generic
-rwxr-xr-x 1 root root  5950985 2011-05-22 00:08 initrd.img-2.6.39
-rwxr-xr-x 1 root root  4523936 2011-05-20 21:34 vmlinuz-2.6.38-8-generic

Your system might have fewer or more kernel files and initial RAM disk files, but you should have at least one of each, in addition to an elilo.efi file (perhaps under another name) and an elilo.conf file.

Configuring ELILO

ELILO's configuration file, elilo.conf, is similar to that of LILO. An example, taken from a working configuration, looks like this:

prompt
timeout=50
default=340
#chooser=textmenu
#message=textmenu-message.msg

image=vmlinuz-3.6.3-8-generic
        label=linux
        initrd=initrd.img-3.6.3-8-generic
        read-only
        root=/dev/sda4
        append=""

image=/EFI/ubuntu/bzImage-3.4.0
        label=340
        initrd=/EFI/ubuntu/initrd.img-3.4.0
        read-only
        root=/dev/sda4
        append="reboot=a,w"

You can cut and paste this example and modify it for your own needs. Some key points when you make your modifications include the following:

Using ELILO

When ELILO is launched, you'll see one of two things, assuming everything's working correctly:

If you set a short enough timeout, you can simply do nothing and the default kernel will boot right away. This might be sensible if you seldom need to select anything but the default option. Pressing a key should delay the boot process in the event you do need to select another option.

Maintaining ELILO

If your distribution includes scripts to maintain ELILO automatically, and if those scripts work, you shouldn't need to do much to maintain this boot loader. As noted earlier, though, in my experience these auto-maintenance scripts are often worse than useless. Thus, you may need to keep your ELILO configuration up to date when you upgrade your kernel or ELILO itself. This task involves copying the updated files to the ESP and making changes to elilo.conf.

If you install an updated kernel, I strongly recommend that you add that kernel to the ESP, and entries for it to your elilo.conf file, rather than replace working files and entries. Once you've rebooted into the new kernel, if you're satisfied that it works, you can delete the old kernel and initial RAM disk file and remove its entry from elilo.conf. If you delete these entries, and especially the files themselves, and the new ones don't work, you may find it difficult to boot your system to correct the problem. (One of the advantages of EFI, though, is that a full implementation includes a shell that you can use to edit configuration files and make changes, so some such problems can be easier to correct on an EFI system than on a BIOS system. In the EFI shell, type edit filename to edit the specified file.)


Go on to "Using SYSLINUX"

Return to "Managing EFI Boot Loaders for Linux" main page


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.