# GrubEFIReinstall

Starting with Windows 8 most Desktop PC have EFI as firmware instead of the legacy [BIOS](https://wiki.debian.org/BIOS). <span class="anchor" id="bkmrk-"></span>If your EFI based PC is not booting Debian, here are some ways to reinstall grub-efi, the bootloader used by Debian on these PCs. <span class="anchor" id="bkmrk--1"></span>

<span class="anchor" id="bkmrk--3"></span><span class="anchor" id="bkmrk--4"></span><span class="anchor" id="bkmrk--5"></span>

To reinstall grub, you need either a live CD/USB to access your current system, or you can use the rEFInd boot manager on a live CD/USB to boot your current system. <span class="anchor" id="bkmrk--6"></span><span class="anchor" id="bkmrk--7"></span>

## Using A Live CD/USB To Fix Your Current System

<span class="anchor" id="bkmrk--9"></span><span class="anchor" id="bkmrk--10"></span>

(The following procedure is described in greater detail [here](https://help.ubuntu.com/community/Grub2/Installing#via_ChRoot).) <span class="anchor" id="bkmrk--11"></span><span class="anchor" id="bkmrk--12"></span>

1. Boot (using UEFI) into a live system, such as a [DebianLive](https://wiki.debian.org/DebianLive) CD/USB or the [Debian installer in rescue mode](https://wiki.debian.org/DebianInstaller/Rescue). You can verify that the system has booted using UEFI by checking for the existence of the directory <tt class="backtick">/sys/firmware/efi</tt> or by running <tt class="backtick">efibootmgr</tt>. <span class="anchor" id="bkmrk--13"></span><span class="anchor" id="bkmrk--14"></span>
2. If the directory /sys/firmware/efi/efivars is empty, you need to boot the rescue system including the kernel option "efi=runtime" and mount the EFI variables before proceeding: <span class="anchor" id="bkmrk--15"></span><span class="anchor" id="bkmrk--16"></span><span class="anchor" id="bkmrk--17"></span>```
    # mount -t efivarfs none /sys/firmware/efi/efivars
    ```
    
    <span class="anchor" id="bkmrk--18"></span><span class="anchor" id="bkmrk--19"></span>
3. Mount the broken system somewhere into the running filesystem. The exact details of how to do this depend on the particulars of your installation. <span class="anchor" id="bkmrk--20"></span><span class="anchor" id="bkmrk--21"></span>For example, for a system with an EFI partition on <tt class="backtick">/dev/sdb1</tt>, an unencrypted <tt class="backtick">/boot</tt> partition on <tt class="backtick">/dev/sdb2</tt>, and an unencrypted <tt class="backtick">/</tt> partition on <tt class="backtick">/dev/sdb3</tt>, do: <span class="anchor" id="bkmrk--22"></span><span class="anchor" id="bkmrk--23"></span><span class="anchor" id="bkmrk--24"></span><span class="anchor" id="bkmrk--25"></span><span class="anchor" id="bkmrk--26"></span>
    
    ```
    # mount /dev/sdb3 /mnt
    # mount /dev/sdb2 /mnt/boot
    # mount /dev/sdb1 /mnt/boot/efi
    ```
    
    <span class="anchor" id="bkmrk--27"></span><span class="anchor" id="bkmrk--28"></span><span class="anchor" id="bkmrk--29"></span>Another example - for a system with an EFI partition on <tt class="backtick">/dev/sdb1</tt> and <tt class="backtick">/</tt> partition on <tt class="backtick">/dev/sdb2</tt>, do: <span class="anchor" id="bkmrk--30"></span><span class="anchor" id="bkmrk--31"></span><span class="anchor" id="bkmrk--32"></span><span class="anchor" id="bkmrk--33"></span>
    
    ```
    # mount /dev/sdb2 /mnt/
    # mount /dev/sdb1 /mnt/boot/efi
    ```
    
    <span class="anchor" id="bkmrk--34"></span><span class="anchor" id="bkmrk--35"></span>In case of a LUKS-encrypted <tt class="backtick">/</tt> partition, please follow this guide: [GrubEFIReinstallOnLUKS](https://wiki.debian.org/GrubEFIReinstallOnLUKS). <span class="anchor" id="bkmrk--36"></span><span class="anchor" id="bkmrk--37"></span><span class="anchor" id="bkmrk--38"></span>
4. Bind mount various virtual filesystems: <span class="anchor" id="bkmrk--39"></span><span class="anchor" id="bkmrk--40"></span><span class="anchor" id="bkmrk--41"></span>```
    # for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do mount -B $i /mnt/$i; done
    ```
    
    <span class="anchor" id="bkmrk--42"></span><span class="anchor" id="bkmrk--43"></span>The mount executable supplied with busybox does not support the -B option, use "mount -o bind" in this case. <span class="anchor" id="bkmrk--44"></span><span class="anchor" id="bkmrk--45"></span>
5. Chroot into the broken system: <span class="anchor" id="bkmrk--46"></span><span class="anchor" id="bkmrk--47"></span><span class="anchor" id="bkmrk--48"></span>```
    # chroot /mnt
    ```
    
    <span class="anchor" id="bkmrk--49"></span><span class="anchor" id="bkmrk--50"></span>
6. Reinstall GRUB to the appropriate disk (without partition number): <span class="anchor" id="bkmrk--51"></span><span class="anchor" id="bkmrk--52"></span><span class="anchor" id="bkmrk--53"></span>```
    # grub-install /dev/sdb
    ```
    
    <span class="anchor" id="bkmrk--54"></span><span class="anchor" id="bkmrk--55"></span>
7. Generate the GRUB configuration file: <span class="anchor" id="bkmrk--56"></span><span class="anchor" id="bkmrk--57"></span><span class="anchor" id="bkmrk--58"></span>```
    # update-grub
    ```
    
    <span class="anchor" id="bkmrk--59"></span>
8. Exit the <tt class="backtick">chroot</tt> environment (&lt;CTRL&gt;-D). <span class="anchor" id="bkmrk--60"></span><span class="anchor" id="bkmrk--61"></span>
9. If everything worked, reboot. <span class="anchor" id="bkmrk--62"></span><span class="anchor" id="bkmrk--63"></span>

## Using the rEFInd rescue media

<span class="anchor" id="bkmrk--65"></span><span class="anchor" id="bkmrk--66"></span>

At the author's web page, [http://www.rodsbooks.com/refind/getting.html](http://www.rodsbooks.com/refind/getting.html), you will find updated direct links to all sorts of packaging. <span class="anchor" id="bkmrk--67"></span>To boot from a rescue media, select either the CD ISO image or the image for USB sticks. Most firmware offers the choice nowadays. <span class="anchor" id="bkmrk--68"></span><tt>If choosing the latter, make sure to follow the instructions in the README</tt>. <span class="anchor" id="bkmrk--69"></span>It is recommended to read the author's web pages to get a better understanding of what you are doing. <span class="anchor" id="bkmrk--70"></span><span class="anchor" id="bkmrk--71"></span>

#### Boot your computer with the Refind media

<span class="anchor" id="bkmrk--73"></span><span class="anchor" id="bkmrk--74"></span>

rEFInd will parse your hard drive for installed kernels, and provide you a graphic menu to boot them. <span class="anchor" id="bkmrk--75"></span>Choose your Linux Kernel and boot it. <span class="anchor" id="bkmrk--76"></span><span class="anchor" id="bkmrk--77"></span>

#### Reinstalling grub-efi on your hard drive

<span class="anchor" id="bkmrk--79"></span><span class="anchor" id="bkmrk--80"></span>

Check that the computer booted in computer in EFI mode: <span class="anchor" id="bkmrk--81"></span><span class="anchor" id="bkmrk--82"></span><span class="anchor" id="bkmrk--83"></span><span class="anchor" id="bkmrk--84"></span>

```
[ -d /sys/firmware/efi ] && echo "EFI boot on HDD" || echo "Legacy boot on HDD"
should return "EFI boot on HDD".
```

<span class="anchor" id="bkmrk--86"></span><span class="anchor" id="bkmrk--87"></span><span class="anchor" id="bkmrk--88"></span>

After starting a root shell (if you boot from a live media, you should start a chroot shell instead, as explained [here](https://help.ubuntu.com/community/Grub2/Installing#via_ChRoot)) check that your EFI system partition (most probably /dev/sdb1) is mounted on /boot/efi. If the /boot/efi directory does not exist, you will need to create it. <span class="anchor" id="bkmrk--89"></span><span class="anchor" id="bkmrk--90"></span><span class="anchor" id="bkmrk--91"></span>

```
mount /dev/sdb1 /boot/efi
```

<span class="anchor" id="bkmrk--93"></span><span class="anchor" id="bkmrk--94"></span><span class="anchor" id="bkmrk--95"></span>

Reinstall the grub-efi package <span class="anchor" id="bkmrk--96"></span><span class="anchor" id="bkmrk--97"></span><span class="anchor" id="bkmrk--98"></span>

```
apt-get install --reinstall grub-efi
```

<span class="anchor" id="bkmrk--100"></span><span class="anchor" id="bkmrk--101"></span>

Put the Debian bootloader in /boot/efi and create an appropriate entry in the computer NVRAM <span class="anchor" id="bkmrk--102"></span><span class="anchor" id="bkmrk--103"></span><span class="anchor" id="bkmrk--104"></span>

```
grub-install
```

<span class="anchor" id="bkmrk--106"></span><span class="anchor" id="bkmrk--107"></span>

Re create a grub config file based on your disk partitioning schema <span class="anchor" id="bkmrk--108"></span><span class="anchor" id="bkmrk--109"></span><span class="anchor" id="bkmrk--110"></span>

```
update-grub
```

<span class="anchor" id="bkmrk--112"></span><span class="anchor" id="bkmrk--113"></span>

You should check afterwards that: <span class="anchor" id="bkmrk--114"></span><span class="anchor" id="bkmrk--115"></span>

Check 1. the bootloader is existing in /boot/efi/EFI/debian/grubx64.efi <span class="anchor" id="bkmrk--116"></span><span class="anchor" id="bkmrk--117"></span><span class="anchor" id="bkmrk--118"></span><span class="anchor" id="bkmrk--119"></span><span class="anchor" id="bkmrk--120"></span>

```
file /boot/efi/EFI/debian/grubx64.efi

/boot/efi/EFI/debian/grubx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows
```

<span class="anchor" id="bkmrk--122"></span><span class="anchor" id="bkmrk--123"></span>

Check 2. the NVRAM entry was properly created. <span class="anchor" id="bkmrk--124"></span><span class="anchor" id="bkmrk--125"></span>

<span class="anchor" id="bkmrk--127"></span><span class="anchor" id="bkmrk--128"></span>

```
efibootmgr --verbose | grep debian
```

<span class="anchor" id="bkmrk--130"></span><span class="anchor" id="bkmrk--131"></span>

You can now reboot, and Grub should greet you. <span class="anchor" id="bkmrk--132"></span><span class="anchor" id="bkmrk--133"></span>

## Troubleshooting

<span class="anchor" id="bkmrk--135"></span><span class="anchor" id="bkmrk--136"></span>

If after this steps you're not booting, the EFI of your PC might have some bugs. <span class="anchor" id="bkmrk--137"></span><span class="anchor" id="bkmrk--138"></span>

#### Problem1: Weak EFI implementation only recognizes the fallback bootloader

<span class="anchor" id="bkmrk--140"></span>

The UEFI firmware refuses to boot the debian/grubx64.efi bootloader, and so we have to hijack the UEFI fallback boot loader. See [http://mjg59.livejournal.com/138188.html](http://mjg59.livejournal.com/138188.html) for details. <span class="anchor" id="bkmrk--141"></span><span class="anchor" id="bkmrk--142"></span>

Using Debian installer in rescue mode, /dev/sdb1 being the FAT32 ESP partition, /dev/sdb2 the root partition <span class="anchor" id="bkmrk--143"></span><span class="anchor" id="bkmrk--144"></span><span class="anchor" id="bkmrk--145"></span><span class="anchor" id="bkmrk--146"></span><span class="anchor" id="bkmrk--147"></span><span class="anchor" id="bkmrk--148"></span><span class="anchor" id="bkmrk--149"></span>

```
mkdir /target
mount /dev/sdb2 /target
mount /dev/sdb1 /target/boot/efi
for i in /sys /proc /dev; do mount --bind $i /target$i; done
chroot /target
```

<span class="anchor" id="bkmrk--151"></span><span class="anchor" id="bkmrk--152"></span>

<span class="anchor" id="bkmrk--154"></span><span class="anchor" id="bkmrk--155"></span><span class="anchor" id="bkmrk--156"></span><span class="anchor" id="bkmrk--157"></span><span class="anchor" id="bkmrk--158"></span><span class="anchor" id="bkmrk--159"></span><span class="anchor" id="bkmrk--160"></span><span class="anchor" id="bkmrk--161"></span>

```
cd /boot/efi/EFI
mkdir boot
cp debian/grubx64.efi boot/bootx64.efi
exit
for i in /sys /proc /dev; do umount /target$i; done
umount /target/boot/efi
umount /target
```

<span class="anchor" id="bkmrk--163"></span><span class="anchor" id="bkmrk--164"></span>

Once booted into your normal Debian, tell grub to ensure the fallback boot loader up to date. To do that, run the following: <span class="anchor" id="bkmrk--165"></span><span class="anchor" id="bkmrk--166"></span><span class="anchor" id="bkmrk--167"></span>

```
echo "grub-efi-amd64 grub2/force_efi_extra_removable boolean true" | sudo debconf-set-selections
```

<span class="anchor" id="bkmrk--169"></span>

Note: The above command will permanently hijack the fallback bootloader, which might be undesirable in dual-boot setups. <span class="anchor" id="bkmrk--170"></span><span class="anchor" id="bkmrk--171"></span>

#### Problem2: EFI boot entries disappear after reboot

<span class="anchor" id="bkmrk--173"></span>

The UEFI firmware did not create a proper boot entry in NVRAM. This has been seen in a Lenovo Thinkcenter M92Z. <span class="anchor" id="bkmrk--174"></span>The symptom for this will be a missing HD path after the Debian entry in the <tt class="backtick">efibootmgr --verbose</tt> output. <span class="anchor" id="bkmrk--175"></span><span class="anchor" id="bkmrk--176"></span>

<span class="anchor" id="bkmrk--178"></span><span class="anchor" id="bkmrk--179"></span><span class="anchor" id="bkmrk--180"></span><span class="anchor" id="bkmrk--181"></span><span class="anchor" id="bkmrk--182"></span><span class="anchor" id="bkmrk--183"></span><span class="anchor" id="bkmrk--184"></span><span class="anchor" id="bkmrk--185"></span><span class="anchor" id="bkmrk--186"></span>

```
BootCurrent: 0024
Timeout: 0 seconds
BootOrder: 0024,0022,0023,0016,0000,0001
Boot0000* debian        Vendor(99e275e7-75a0-4b37-a2e6-c5385e6c00cb,)
Boot0016* Generic Usb Device    Vendor(99e275e7-75a0-4b37-a2e6-c5385e6c00cb,)
Boot0022* UEFI: IPv4 Intel(R) 82579LM Gigabit Network Connection        ACPI(a0341d0,0)PCI(19,0)MAC(d43d7e6d8bfc,0)IPv4(0.0.0.0:0<->0.0.0.0:0,0, 0AMBO
Boot0023* UEFI: IPv6 Intel(R) 82579LM Gigabit Network Connection        ACPI(a0341d0,0)PCI(19,0)MAC(d43d7e6d8bfc,0)030d3c000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000AMBO
Boot0024* UEFI: Generic Flash Disk 8.00 ACPI(a0341d0,0)PCI(1d,0)USB(1,0)USB(1,0)HD(1,800,2a5f,02f23208-1aa9-4b6c-b6e1-8155390eb9db)AMBO
```

<span class="anchor" id="bkmrk--188"></span><span class="anchor" id="bkmrk--189"></span>

You can then try to install rEFInd as your bootloader in the hard drive, following the steps at this gist: [https://gist.github.com/EmmanuelKasper/9590327](https://gist.github.com/EmmanuelKasper/9590327).