- Linux repair uefi boot
- Using A Live CD/USB To Fix Your Current System
- Using the rEFInd rescue media
- Boot your computer with the Refind media
- Reinstalling grub-efi on your hard drive
- Troubleshooting
- Problem1: Weak EFI implementation only recognizes the fallback bootloader
- Problem2: EFI boot entries disappear after reboot
- Linux repair uefi boot
Linux repair uefi boot
Starting with Windows 8 most Desktop PC have EFI as firmware instead of the legacy BIOS. 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.
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.
Using A Live CD/USB To Fix Your Current System
- Boot (using UEFI) into a live system, such as a DebianLive CD/USB or the Debian installer in rescue mode. You can verify that the system has booted using UEFI by checking for the existence of the directory /sys/firmware/efi or by running efibootmgr.
- 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:
# mount -t efivarfs none /sys/firmware/efi/efivars
# cryptsetup luksOpen /dev/sdb3 crypt # mount /dev/mapper/crypt /mnt # mount /dev/sdb2 /mnt/boot # mount /dev/sdb1 /mnt/boot/efi
# mount /dev/sdb2 /mnt/ # mount /dev/sdb1 /mnt/boot/efi
# for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount -B $i /mnt$i; done
Using the rEFInd rescue media
At the author’s web page, http://www.rodsbooks.com/refind/getting.html, you will find updated direct links to all sorts of packaging. To boot from a rescue media, select either the CD ISO image or the image for USB sticks. Most firmware offers the choice nowadays. If choosing the latter, make sure to follow the instructions in the README. It is recommended to read the author’s web pages to get a better understanding of what you are doing.
Boot your computer with the Refind media
rEFInd will parse your hard drive for installed kernels, and provide you a graphic menu to boot them. Choose your Linux Kernel and boot it.
Reinstalling grub-efi on your hard drive
Check that the computer booted in computer in EFI mode:
[ -d /sys/firmware/efi ] && echo "EFI boot on HDD" || echo "Legacy boot on HDD" should return "EFI boot on HDD".
After starting a root shell (if you boot from a live media, you should start a chroot shell instead, as explained here) check that your EFI system partition (most probably /dev/sda1) is mounted on /boot/efi. If the /boot/efi directory does not exist, you will need to create it.
Reinstall the grub-efi package
apt-get install --reinstall grub-efi
Put the Debian bootloader in /boot/efi and create an appropriate entry in the computer NVRAM
Re create a grub config file based on your disk partitioning schema
You should check afterwards that:
Check 1. the bootloader is existing in /boot/efi/EFI/debian/grubx64.efi
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
Check 2. the NVRAM entry was properly created.
efibootmgr --verbose | grep debian
You can now reboot, and Grub should greet you.
Troubleshooting
If after this steps you’re not booting, the EFI of your PC might have some bugs.
Problem1: Weak EFI implementation only recognizes the fallback bootloader
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 for details.
Using Debian installer in rescue mode, /dev/sda1 being the FAT32 ESP partition, /dev/sda2 the root partition
mkdir /target mount /dev/sda2 /target mount /dev/sda1 /target/boot/efi for i in /sys /proc /dev; do mount --bind $i /target$i; done chroot /target
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
Once booted into your normal Debian, tell grub to ensure the fallback boot loader up to date. To do that, run the following:
echo "grub-efi-amd64 grub2/force_efi_extra_removable boolean true" | sudo debconf-set-selections
Note: The above command will permanently hijack the fallback bootloader, which might be undesirable in dual-boot setups.
Problem2: EFI boot entries disappear after reboot
The UEFI firmware did not create a proper boot entry in NVRAM. This has been seen in a Lenovo Thinkcenter M92Z. The symptom for this will be a missing HD path after the Debian entry in the efibootmgr --verbose output.
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:00.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
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.
Linux repair uefi boot
Сегодня мы рассмотрим с вами один из вариантов восстановления загрузки Ubuntu 16.04, установленной в режиме UEFI. Предыстория этого эпизода очень простая — на ПК были установлены две ОС — Ubuntu и Windows 10, при этом разбиение по разделам было «хитрым», т.е. на одном диске был загрузочный раздел EFI System (ESP), а также раздел Linux filesystem и Linux своп, а на другом диске был системный раздел NTFS Windows и еще один дополнительный раздел ext4 от Linux. который монтировался в отдельную папку. Материнская плата — Asus Z170-P. Потребовалось просто физически переставить всю эту систему, т.е. материнскую плату, накопители и т.п. в другой корпус. Однако, после включения Ubuntu уже не загружалась 🙁 Начнем с того что в обычном варианте загрузки (когда все работает и Ubuntu, и Windows установлены с использованием UEFI) мы видим в BIOS’е следующие варианты загрузки:
Однако, после переустановки MB и накопителей в другой корпус вариант загрузки с Ubuntu просто пропал. Что могло произойти? GRUB находящийся на разделе с Ubuntu никуда не делся, его конфигурация тоже вообщем-то не изменилась, однако, из списка доступных типов загрузки вариант с Ubuntu просто пропал. Попытка выбрать накопитель с установленной Ubuntu в качестве приоритетного для загрузки — тоже вообщем-то ничего не дала, т.к. BIOS находил Windows Boot Manager и упрямо загружал Windows. В интернете можно найти множество потрясающих (в хорошем смысле этого слова), но бесполезных в данной ситуации мануалов (приведу ссылки на них, т.к. ситуации возможны разные и информация в любом случае будет полезной):
- Восстановление GRUB
- How To Repair Grub Boot Loader On Ubuntu Linux 16.04 /15.10 / 15.04
- Boot repair, Boot-Repair, UEFI
- Boot Repair — EFI Mode
- UEFI Installing — Tips
- Установка дистрибутива на компьютер с EFI
- Настройка UEFI-загрузчика. Самое краткое руководство в мире (рекомендуется к прочтению для понимая смысла UEFI загрузки)
Но в большинстве из них не приводится информация о восстановлении загрузки именно в UEFI режиме или найти ее достаточно сложно или же рекомендуется использовать утилиту boot-repair, которой нет на LiveCD по-умолчанию. А между тем все достаточно просто.
Загружаемся с LiveCD с Ubuntu через UEFI (если у вас ПК подключен через HDMI может возникнуть проблема с загрузкой с LiveCD, решается она добавлением параметра nomodeset, как описано здесь), в крайнем случае если GUI не стартует — переключаемся на текстовую консоль (Ctrl-Alt-F1). Далее смотрим какие разделы у нас есть с помощью sudo fdisk -l :
Device Start End Sectors Size Type /dev/sda1 2048 1128447 1126400 550M EFI System /dev/sda2 1128448 79626398 78497951 37.4G Linux filesystem /dev/sda3 79628288 85917854 6289567 3G Linux swap
Здесь наша задача определить загрузочный EFI раздел. Как мы видим — это /dev/sda1. Монтируем раздел /dev/sda1 так — sudo mount /dev/sda1 /mnt и убеждаемся в том в ней есть EFI загрузчик Ubuntu /EFI/ubuntu/grubx64.efi :
efibootmgr -c -d /dev/sda -p НОМЕР_РАЗДЕЛА -L "Ubuntu" -l "\Efi\ubuntu\grubx64.efi"
В нашем случае НОМЕР_РАЗДЕЛА = 1, т.к. EFI System находится на /dev/sda1. Еще несколько полезных возможностей efibootmgr:
- sudo efibootmgr — просмотреть список доступных вариантов загрузки.
- sudo efibootmgr —bootnum xxxx —delete-bootnum — удалить вариант с номером xxxx.
Вот и все, перезагружаем ПК, выбираем в UEFI Bios первичным только что добавленный нами вариант загрузки «Ubuntu» и радуемся работающей ОС.