49

I was trying to rescue GRUB in Linux. I was able to login in the OS following this tutorial:

https://www.lisenet.com/2014/grub2-rescue-mode-error-unknown-filesystem/

I have to upgrade GRUB to fix the problem. However, when I run grub-install, I get an error:

$ grub-install /dev/sda grub-install: error: cannot find EFI directory. 

My file system contains sda4, sda5, and sda6 for the EFI system, Linux swap, and Linux file system respectively.

I am not very experienced using mount or other commands.

0

5 Answers 5

45

When you run grub-install by default it assumes the EFI system is mounted as /boot/efi

It depends on your distribution where EFI system is mounted and on some distributions it isn't mounted after boot.

First check if /boot/efi is mounted with

mount | grep /boot/efi 

If that doesn't work first try the following to see if it is mounted elsewhere.

mount | grep /dev/[efi device] 

If neither of those work do:

mount /dev/[efi device] /mnt 

Now run:

grub-install --efi-directory=[efi dir] grub-mkconfig -o /boot/grub/grub.cfg 

where [efi dir] is either /boot/efi or /mnt and [efi device] is the device with the EFI system partition. If you don't know use the command lsblk -o NAME,PARTTYPE,MOUNTPOINT | grep -i "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"

10
  • 3
    Thanks, In the grub-install --efi-directory=/boot/EFI as i chroot into /mnt. Commented Nov 26, 2017 at 19:20
  • 1
    Maybe stupid Q but I don't have an EFI dir. Where do I get one? I mean it is supposed to contain files, which command can recreate it? Commented Aug 29, 2019 at 0:18
  • @LennartRolland If you have a UEFI compatible system then your system drive will be GPT partitioned and contains a "UEFI System partition." usually the first partition and will be of the type EF00. Many distributions will mount this by default as /boot/efi to among other things allow the GRUB boot loader to update its files. If not you'll have to mount it yourself and add it to fstab. You might also have a UEFI system but that is using legacy mode which means your partitions will be msdos type and you won't have a /boot/efi. Weirder configurations exist but that covers the majority of them. Commented Sep 8, 2019 at 20:43
  • 1
    @giusti Probably better to just not make specific device name references. Commented Oct 19, 2019 at 18:10
  • 1
    @jdwolf when I typed"mount | grep /dev/[efi device]" I got "grep: Unmatched [, [^, [:, [., or [="..... maybe a misspelling? Commented Aug 11, 2020 at 21:20
14

The efi directory must be in /boot/efi/

To know in which partition the efi is, we must examine the partition table, so if your main disk is /dev/sda then.

fdisk -l /dev/sda Device Start End Sectors Size Type /dev/sda1 2048 309247 307200 150M EFI System /dev/sda2 309248 964843519 964534272 459.9G Linux filesystem /dev/sda3 964843520 1000214527 35371008 16.9G Linux filesystem 

In the result search for something like EFI System or EFI (FAT-12/16/32)

Once you know the partition number then (in this case sda1), we must mount it in /boot/efi.

If for some reason the directory /boot/efi/ does not exist, create it:

mkdir /boot/efi 

and mount the efi into that directory:

mount /dev/sda1 /boot/efi/ 

And I think that is all, you must be able to install grub in your disk.

2
  • 1
    Note that grub is case-sensitive while the EFI filesystem is case-preserving. If your boot directory is /boot/EFI, the UEFI firmware can find it, but grub can't. Commented Jul 1, 2022 at 6:00
  • @Mark also worth noting that you'll end up with /boot/efi/EFI once everything is correctly set up Commented Sep 8, 2023 at 2:27
8

I just now encountered this issue. I booted a rescue USB stick. Let me describe the fix that worked for me.

Prowling around with gdisk -l /dev/sda I can see that my original root partition is /dev/sda2. To access it, I type sudo mount /dev/sda2 /mnt

So far, so good. Let me first describe what didn't work, and then a solution. Some pages advise chroot /mnt and then grub-install, but this won't work; giving the grub-install: error: cannot find EFI directory. error.

Following other suggestions, I see that my EFI partition is /dev/sda1 so I try sudo mount /dev/sda1 /mnt/boot/efi and chroot again. Now, grub complains about missing /dev so I mount --bind /dev/ /mnt/dev. ... But then grub complains about something else. It's snowballing out of control. chroot is not the answer.

What did work was this: grub-install -d /mnt/usr/lib/grub/x86_64-efi --boot-directory=/mnt/boot /dev/sda

Note that the -d flag is mandatory, as otherwise, grub tries to use /usr/lib/grub/i386-pc from the rescue image, which does not contain the correct stuff.

Yayy! My system is now bootable again!

2
  • 2
    This saved my day Commented Feb 24, 2023 at 20:20
  • Just wanted to mention that when you run fdisk -l you'll likely see a Linux File System partition and a separate EFI partition. What you should do then is: 1. Mount your Linux FS partition under /mnt 2. Mount your EFI partition under /mnt/boot/efi 3. Run what Linas suggested and remember to use your Linux FS partition in the final part of the command, ie: grub-install -d /mnt/usr/lib/grub/x86_64-efi --boot-directory=/mnt/boot <linux FS partition> Commented Apr 29, 2023 at 20:45
5

Grub rescue mode can be treated as

set root=(hd0,gpt6) set prefix=(hd0,gpt6)/boot/grub insmod normal normal 

Once you login, enter sudo update-grub && sudo grub-install /dev/sda.

3
  • Should the grub-install not the done before the update-grub? Commented Oct 18, 2018 at 22:13
  • when I typed the first command, I got "bash: syntax error near unexpected token `('" Commented Aug 11, 2020 at 21:19
  • 1
    @Another.Chemist: the commands given should go to the GRUB interactive console, I think. That would be before the kernel boots. Your error looks like you have typed the commands into Bash. Commented Dec 17, 2020 at 16:43
-3
sudo apt-get --purge autoremove grub-efi-amd64-signed 
2
  • 2
    Welcome to the site, and thank you for your contribution. Would you mind adding some explanation on why/how this would solve the OPs problem? Commented Jun 10, 2021 at 7:41
  • Welcome to Unix & Linux! Brevity is acceptable, but fuller explanations are better. Commented Jun 10, 2021 at 8:20

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.