Bootloader adalah program kecil pertama yang dijalankan firmware setelah POST, dengan satu tugas kritis: memuat kernel ke memori lalu menyerahkan mesin dan tidak pernah kembali. GRUB2, bootloader bawaan Debian, Fedora, dan Arch, memberi kita menu memilih kernel, editor baris perintah, dan kerangka konfigurasi yang terstruktur. Mengelola GRUB biasanya baru dibutuhkan saat keadaan darurat: boot gagal setelah update, kernel baru bermasalah, atau entri Windows hilang dari menu. Chapter ini membedah konfigurasi GRUB dari berkas kebijakan sampai menu di layar, lalu teknik menyelamatkannya saat rusak.

Arsitektur Konfigurasi GRUB #

File yang dibaca GRUB saat boot adalah /boot/grub/grub.cfg — namun file itu jangan diedit langsung karena dihasilkan generator. Kebijakan kita ditulis di /etc/default/grub, skrip bernomor di /etc/grub.d/ merakit sisanya, dan gabungannya dituangkan lewat update-grub (wrapper Debian untuk grub-mkconfig -o /boot/grub/grub.cfg). Karena /etc/grub.d tidak ada di lingkungan ini, kita bangun tiruannya:

bash
mkdir -p grub-sim/grub.d
touch grub-sim/grub.d/00_header grub-sim/grub.d/05_debian_theme \
      grub-sim/grub.d/10_linux grub-sim/grub.d/30_os-prober grub-sim/grub.d/41_custom
ls grub-sim/grub.d

Output yang Dihasilkan:

text
00_header
05_debian_theme
10_linux
30_os-prober
41_custom

Nomor di depan nama adalah urutan eksekusi: 00_header menerjemahkan kebijakan /etc/default/grub, 05_debian_theme mengatur tampilan menu, 10_linux menghasilkan satu entry per kernel terpasang — alasan kernel baru otomatis muncul di menu — 30_os-prober mencari sistem operasi lain, dan 41_custom menampung entry buatan tangan. Contoh isi /etc/default/grub:

bash
mkdir -p grub-sim
cat > grub-sim/grub <<'EOF'
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
EOF
grep -E '^GRUB_' grub-sim/grub

Output yang Dihasilkan:

text
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

Mari kita baca hasilnya:

  1. Baris 1 (GRUB_DEFAULT=0): entry pertama menu menjadi pilihan default.
  2. Baris 2 (GRUB_TIMEOUT=5): menu tampil lima detik sebelum default dijalankan; -1 berarti menunggu tanpa batas.
  3. Baris 3 (GRUB_CMDLINE_LINUX_DEFAULT="quiet"): parameter kernel untuk entry normal saja.
  4. Baris 4 (GRUB_CMDLINE_LINUX=""): parameter untuk semua entry termasuk recovery.

Setelah mengedit /etc/default/grub, jalankan sudo update-grub — tanpa itu grub.cfg tidak berubah.

Anatomi Sebuah menuentry #

Entry di grub.cfg berbentuk blok menuentry; berikut contoh hasil 10_linux untuk satu kernel Debian, disimpan sebagai fixture untuk dibedah:

bash
mkdir -p grub-sim
cat > grub-sim/menuentry.txt <<'EOF'
menuentry 'Debian GNU/Linux' --class debian --class os {
    insmod gzio
    search --no-floppy --fs-uuid --set=root 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d
    linux   /boot/vmlinuz-6.1.0-18-amd64 root=UUID=1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d ro quiet
    initrd  /boot/initrd.img-6.1.0-18-amd64
}
EOF
cat grub-sim/menuentry.txt

Output yang Dihasilkan:

text
menuentry 'Debian GNU/Linux' --class debian --class os {
    insmod gzio
    search --no-floppy --fs-uuid --set=root 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d
    linux   /boot/vmlinuz-6.1.0-18-amd64 root=UUID=1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d ro quiet
    initrd  /boot/initrd.img-6.1.0-18-amd64
}

Mari kita baca hasilnya baris per baris:

  1. Baris search ...: mencari partisi lewat UUID filesystem lalu menetapkannya sebagai $root; nomor disk boleh berubah, UUID tidak.
  2. Baris linux ...: memuat kernel dari $root sekaligus melewatkan parameter: root=UUID=... menunjuk filesystem root asli, ro memasangnya read-only dulu sebelum systemd me-remount-nya.
  3. Baris initrd ...: memuat arsip initramfs yang berpasangan dengan kernel tersebut.
  4. Baris insmod gzio: GRUB punya sistem modul sendiri; modul ini membuatnya sanggup membaca file terkompresi gzip.

Edit Saat Boot: Tombol e dan c #

Menu GRUB bukan sekadar daftar: menekan e pada sebuah entry membuka editor untuk salinannya di memori. Ubah baris linux, misalnya buang quiet agar pesan boot terlihat atau tambah nomodeset saat layar bermasalah, lalu boot dengan Ctrl+X. Perubahan hanya berlaku satu kali boot dan tidak menyentuh grub.cfg — cara paling aman bereksperimen dengan parameter kernel, yang lengkapnya didokumentasikan di bootparam(7) . Tombol c membuka shell lengkap GRUB dengan perintah ls untuk menelusuri partisi — alat diagnosis penting saat mesin mentok di prompt grub>.

Dual Boot dan os-prober #

Entry sistem operasi lain dihasilkan 30_os-prober, alat yang memindai semua partisi. Sejak GRUB 2.06, os-prober dimatikan bawaannya karena dianggap risiko keamanan; menghidupkannya cukup menambah satu baris ke /etc/default/grub lalu update-grub:

bash
GRUB_DISABLE_OS_PROBER=false

Strategi aman membagi disk untuk Linux dan Windows dibahas di Chapter Dual Boot Linux dan Windows .

Pilihan Default dan Pilihan Tersimpan #

Selain nomor entry, GRUB_DEFAULT juga menerima nama entry atau nilai saved — mode yang mengingat pilihan terakhir bila dipasangkan GRUB_SAVEDEFAULT=true. Dua pendampingnya: grub-set-default mengubah simpanan permanen, grub-reboot hanya menunjuk entry untuk boot berikutnya.

Ketika GRUB Itu Sendiri Rusak #

Prompt grub rescue berarti file inti GRUB berjalan tetapi gagal menemukan modul dan konfigurasinya — biasanya setelah partisi berubah atau bootloader tertimpa. Resep penyelamatnya selalu sama: boot dari live USB, pasang partisi sistem, masuk lewat chroot, lalu jalankan grub-install dan update-grub. Prosedur lengkapnya, termasuk reset password root, ada di Chapter System Recovery .

Setelah GRUB menyerahkan kernel ke memori, panggung berikutnya milik kernel itu sendiri — dan kernel modern jarang berjalan sendirian. Chapter berikutnya membahas kernel space, user space, dan modulnya.

Untuk rujukan lebih jauh: panduan GRUB di wiki Arch serta grub-mkconfig(8) di manpage Debian.