This is a rough guide on how to get Debian testing (wheezy) to boot from UEFI. I’ve tried on Squeeze but unfortunately there’s so many bugs in it that it basically fails for me on an Intel S1200BTL motherboard with AMI Aptio UEFI.
The Debian Installer CD does not yet boot from UEFI itself so the process is made a little bit more complex than it might otherwise be.
Step 1 – Preparation
- Back up your data.
- Please make a copy of your data for safe keeping purposes.
- Store a second copy of your data somewhere where it won’t get wiped.
- Have you backed up your data yet?
- Backing up your data is a really good idea.
- Please back up your data, and do it now before you forget.
- Reminder – don’t forget to back up your data.
- I’d install a copy of backup software and use it if I were you at this point.
- Backing up is a good idea.
- You are strongly advised to do your backups before you attempt steps 1-9.
- Burn yourself a Debian Installer CD so that you can recover if it all goes wrong.
- Make sure the CD you’ve just burned actually works.
Step 2 – Make sure you have an EFI System Partition
UEFI machines require a special partition called an ‘EFI System Partition’ to store boot loaders and other assorted drivers from, unless you fancy installing GRUB2 to a USB stick, that is. 100MiB seems a reasonable size for it and must be FAT32 formatted otherwise the UEFI probably won’t see it. If you are going to be installing Microsoft products on this box, then you should make it the first partition, but the UEFI standard itself doesn’t require this. If you are using GPT partition tables, the EFI System Partition needs to have a type GUID code of C12A7328-F81F-11D2-BA4B-00A0C93EC93B (if you are using parted to make your partitions you can turn a partition into an EFI System one by running the command set <partition-number> boot on which will set this for you. MBR (“normal”) partition tables should use partition type 0xEF for it.
When you create it, it should be formatted with a FAT32 file system and you must ensure that it has a directory called efi placed in the root directory.
Step 3 – Boot into your existing Debian system
If you haven’t already, boot up your existing Debian system and log in as root. Please ensure you have a working grub-pc (BIOS) configuration (i.e. GRUB 2) before you go any further. If you are still using GRUB 1, then upgrade to GRUB 2 and get it working before you carry on.
Install the grub-efi-amd64 package using aptitude or apt-get. This conflicts with the grub-pc package and will cause the old ‘BIOS’ grub to be removed.
Mount your EFI System Partition on to /boot/efi, and it’s a good idea to make sure it’s always mounted on boot by altering the fstab.
Now run grub-install (The EFI version does not require any parameters). This should install the grub-efi files to your EFI System Partition. Once the installation is complete, you should find a single file in \efi\debian called grubx64.efi.
Important – Check your grub.cfg to make sure that it loads the efi_gop module in the load_video function. If it doesn’t, your computer will boot, but you won’t see the screen display! (Some old UEFIs may need efi_uga instead, but most UEFIs use efi_gop these days.)
Step 4 – First UEFI boot
The first time you boot from this, there will be no entry in the UEFI boot manager to start it up automatically, so you’ll need to go into the EFI Shell and boot grub2 by hand.
Shut down your machine, and reboot into the UEFI setup and switch mode from BIOS to UEFI. (Not all UEFIs need this step – some like my AMI Aptio has a mode which will let you boot from either BIOS or UEFI).
Boot into the EFI Shell. At the prompt, type in fs0: to switch to the EFI System Partition, and then type \efi\debian\grubx64.efi to start GRUB manually. If all has gone well, you should be rewarded with the bog standard GRUB2 boot menu as normal. Choose your kernel and off you go! Don’t forget to congratulate yourself that you managed to UEFI boot your Debian install on the way!
Step 5 – Reinstall grub2
This may sound a bit silly, but it’s the easiest way of getting a boot option into the UEFI boot manager. Once your machine has succesfully booted again, load the efivars module by typing modprobe efivars, make sure the EFI System Partition is mounted at /boot/efi, and then run grub-install again, then update-grub. You should find now, if you run efibootmgr, that you should have an entry “debian” in there which will boot the new grub install you have just made.
Finally, make sure that efivars module is loaded every time you boot by inserting it into the /etc/modules file.
OK some comments, having just tried this..
Debian installer won’t give you the option to create gpt partitions in partman unless you install using expert mode. It will also give you the option to install the parted udeb which is needed.
First time around grub install will fail – you have to drop to a shell and toggle the bios_grub flag on your grub bios boot partition (using parted) then retry.
grub-efi-amd64 from squeeze doesn’t work with these instructions. It’ll just complain that /boot/grub isn’t an EFI partition and abort. You have to dist-upgrade first (maybe there’s something in backports).
debian kernel 3.2.0-1 crashes almost instantly booting from EFI (screen fills with crap & it dies). 2.6.32-5 works OK.
Thanks for the quick tutorial. I’ve been wanting to swtich to efi booting ever since I got my new uefi motherboard and this tutorial made it quick and easy. However, I am left wondering how to reset the uefi system back to default values in case I want to go back to emulated bios booting off the mbr. Could you please explain how to do this? Thanks.
As I understand it, if you install grub-pc in BIOS mode, then move to grub-efi as per the instructions in the article, I think the grub-pc MBR code is still there so you might find that just re-enabling BIOS compatibility mode in the UEFI setup will get it going again, and then once booted reinstalling the grub-pc package. If not, then you could always boot with your favourite distribution’s install CD after re-enabling BIOS mode and reinstall grub-pc that way.