Skip to main content
  1. Teches/

Repairing Your Linux EFI Boot Entry with efibootmgr

·1145 words·6 mins· ·
Wildan
Author
Wildan
An Ordinary Human Being
Table of Contents

Getting to Know
#

What is efibootmgr?
#

Menurut definisi (atau deskripsi) dari paket tersebut di repo Archlinux, efibootmgr adalah aplikasi user space di linux yang bertugas untuk melakukan modifikasi pada EFI boot manager.1

Jadi, kalau linux kita tidak bisa booting dengan normal (misalnya, opsi bootloader tidak muncul di GRUB atau bahkan boot entry tidak muncul di boot menu BIOS komputer), kita tidak perlu buru-buru khawatir dan langsung install ulang seluruh sistem linux kita, tapi kita bisa cek terlebih dahulu, barangkali kita bisa memperbaiki bootloader-nya via efibootmgr.

UEFI vs Legacy
#

Sebelum lebih dalam ke caranya, kita perlu tahu dulu bahwa tool ini, seperti namanya, efibootmgr hanya dapat digunakan untuk melakukan manajemen bootloader berbasis UEFI, bukan Legacy.

Apa itu UEFI dan Legacy? Apa bedanya?

Legacy BIOS
#

Legacy BIOS (Basic Input Output System) adalah sebuah software (firmware) yang tersimpan di motherboard komputer kita dan bertugas untuk melakukan booting dan membangkitkan sistem operasi kita.2 Akan tetapi, Legacy BIOS adalah software lama (sudah ada sejak 1980-an) dan hanya akan kompatibel untuk menjalankan OS (Operating System) lama juga.

Berikut adalah beberapa kelebihan Legacy BIOS:3

  1. Kompatibilitas dengan perangkat keras lama.
  2. Mudah digunakan dan diatur.
  3. Tidak memerlukan konfigurasi yang kompleks.

Sementara berikut ini adalah kekurangan Legacy BIOS:

  1. Cara membaca disk pake MBR (Master Boot Record).
  2. Terbatas dalam mengenali kapasitas penyimpanan (maksimal di 2TB).
  3. Tidak mendukung fitur keamanan modern seperti Secure Boot.
  4. Tidak dapat digunakan pada sistem operasi 64-bit.

UEFI
#

Seperti BIOS, UEFI (Unified Extensible Firmware Interface) yang sudah dikembangkan sejak tahun 2005 adalah firmware modern untuk menggantikan Legacy BIOS. Seperti BIOS juga, UEFI adalah software paling pertama yang akan dijalankan begitu kita menekan tombol power di komputer kita sehingga dia kemudian akan melakukan proses booting dan membangunkan sistem operasi kita.2

Beberapa kelebihan UEFI:3

  1. Cara membaca disk dengan GPT (GUID Partition Table).
  2. Dapat mengenali kapasitas penyimpanan lebih besar dari 2TB.
  3. Mendukung fitur keamanan modern seperti Secure Boot.
  4. Dapat digunakan pada sistem operasi 64 bit.
  5. Lebih cepat dan efisien dalam proses booting.

Namun, ada juga beberapa kekurangan UEFI:

  1. Tidak kompatibel dengan perangkat keras (hardware) lama.
  2. Memerlukan konfigurasi yang (sedikit) lebih kompleks.
  3. Tidak semua sistem operasi mendukung UEFI.

Jadi, berikut adalah kesimpulan perbandingan Legacy BIOS vs UEFI.4

AspekLegacy BIOSUEFI
Partition tableMBRGPT
Limit disk2TBJauh lebih besar
Limit partition4 primaryPraktis unlimited
Mode CPU16-bit real mode32/64-bit
Lokasi bootloaderMBR (sector pertama disk)File .efi di ESP
Data boot entryGa ada konsep iniTersimpan di NVRAM motherboard
KeamananGak adaSecure Boot
Kecepatan bootLebih lambatLebih cepat

Installation
#

Berikut adalah cara meng-install efibootmgr di beberapa sistem operasi UNIX/Linux:

DistroCommand
Debian/Ubuntusudo apt install -y efibootmgr
Arch Linuxsudo pacman -Sy efibootmgr
Fedorasudo dnf install efibootmgr
Opensusesudo zypper install efibootmgr

Notes: FreeBSD sudah meng-include-kan efibootmgr pada saat proses instalasi FreeBSD itu sendiri. Jadi, kita bisa langsung menggunakannya jika diperlukan tanpa perlu meng-install paket tersebut terlebih dahulu.

NixOS:
Masukkan baris berikut di file konfigurasi (/etc/nixos/configuration.nix):

  environment.systemPackages = [
    pkgs.efibootmgr
  ];

Atau jika menggunakan nix-shell:

nix-shell -p efibootmgr  

Usage
#

Prerequisites
#

Sebelum menggunakannya, pastikan kita sudah memenuhi beberapa persyaratan berikut:

  1. Bootable USB (saya sarankan Archlinux).
  2. Di menu BIOS komputer, boot ke USB tersebut.
  3. Mount partisi sistem yang ingin diperbaiki bootloader-nya.
mount /dev/sdXn /mnt # mount partisi root
mount /dev/sdXm /mnt/boot # mount partisi boot yang terdapat EFI di dalamnya
  1. Chroot ke sistem tersebut.
arch-chroot /mnt

Berikut adalah beberapa kasus yang memungkinkan kita menggunakan efibootmgr:

Check bootloader
#

Langkah paling pertama setelah berhasil melakukan chroot ke sistem adalah melihat apakah bootloader-nya masih ada di ESP (EFI System Partition):

ls -l /boot/EFI/    # atau /efi/EFI/ tergantung mount point lo

Dari sini, muncul 2 kemungkinan:

  1. File bootloader (grub/systemd-boot) masih ada.
  2. File bootloader (grub/systemd-boot) hilang.

Kita bahas satu persatu.

1. Bootloader exists.
#

Kalau file grub/systemd-boot masih ada di situ, berarti masalahnya hanya di entri NVRAM-nya aja, bukan bootloader-nya hilang. Solusinya, kita hanya perlu membuat ulang entrinya ke NVRAM.

Berikut adalah perintah untuk me-reinstall entri ke NVRAM:

efibootmgr -c -d /dev/sdX -p Y -L "Arch Linux" -l '\EFI\grub\grubx64.efi'

Keterangan:
-c: membuat entri baru (create).
-d: men-specify disk yang terdapat partisi EFI.
Y: nomor urutan partisi dari ESP di disk.
-L: memberikan label / nama entri.
-l: men-specify file loader (biasanya berekstensi .efi).

Contoh penggunaan:

# melihat daftar partisi disk
lsblk 

# output lsblk
nvme0n1     259:0    0 953.9G  0 disk 
├─nvme0n1p1 259:1    0     1G  0 part /boot
├─nvme0n1p2 259:2    0   200G  0 part /
├─nvme0n1p3 259:3    0    20G  0 part 
├─nvme0n1p4 259:4    0    16M  0 part 
└─nvme0n1p5 259:5    0   200G  0 part 

# melihat bootloader
eza -lT --level 2 /boot/EFI

# output
drwxr-xr-x    - root 27 Apr 09:41 ├──  grub
.rwxr-xr-x 160k root 17 Jun 20:07 │   └──  grubx64.efi
drwxr-xr-x    - root 16 Jun 19:06 └──  Microsoft
drwxr-xr-x    - root 16 Jun 19:06     ├──  Boot
drwxr-xr-x    - root 16 Jun 19:10     └──  Recovery

# me-reinstall entri ke NVRAM
efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Arch Linux" -l '\EFI\grub\grubx64.efi'

Kemudian, kita bisa lihat apakah entri-nya sudah terpasang atau belum:

efibootmgr
# atau
efibootmgr -v

Kemudian, cari entri dengan nama seperti label yang sudah kita berikan tadi (Arch Linux).

2. Bootloader lost
#

Kalau file grub/systemd-boot hilang, artinya bootloader memang perlu dipasang lagi juga. Solusinya, kita install bootloader-nya terlebih dahulu, baru kemudian buat entri di NVRAM.

Pertama, kita perlu meng-install ulang bootloader-nya terlebih dahulu:

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

Btw, saya juga pernah menulis sedikit tentang modifikasi GRUB di artikel berikut:

Baru kemudian kita memasang kembali entri bootloader tersebut ke NVRAM:

efibootmgr -c -d /dev/sdX -p Y -L "Arch Linux" -l '\EFI\grub\grubx64.efi'

Keterangan:
-c: membuat entri baru (create).
-d: men-specify disk yang terdapat partisi EFI.
Y: nomor urutan partisi dari ESP di disk.
-L: memberikan label / nama entri.
-l: men-specify file loader (biasanya berekstensi .efi).

Kemudian, kita bisa lihat apakah entri-nya sudah terpasang atau belum:

efibootmgr
# atau
efibootmgr -v

Kemudian, cari entri dengan nama seperti label yang sudah kita berikan tadi (Arch Linux).

NVRAM Entry Modif
#

Perhatikan bagian BootOrder dari output perintah:

efibootmgr
# atau
efibootmgr -v

Sebab, kita bisa mengetahui berada di urutan berapakah entri linux kita (Arch Linux). Urutan ini penting karena UEFI akan memilih siapa yang akan dibangkitkan pertama kali berdasarkan urutan tersebut.

ss1
efibootmgr

Misalnya, di komputer saya, entri “Arch Linux” saya berada di urutan pertama (abaikan nomornya, fokus pada urutan yang berada di BootOrder).

Jika kita misalnya mau menukar urutannya:

efibootmgr -o 0001,0002

Keterangan:
-o: boot order (urutan booting)

Maka, nanti, sistem operasi / device dengan nomor entri 0001 akan berada di urutan pertama, sementara 0002 akan berada di urutan kedua. Begitu seterusnya (jika kita memiliki lebih dari dua sistem operasi / device).

Sekian.
Terima kasih sudah membaca.
Sampai jumpa di artikel saya yang lain!

Related