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:
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.dOutput yang Dihasilkan:
00_header
05_debian_theme
10_linux
30_os-prober
41_customNomor 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:
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/grubOutput yang Dihasilkan:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""Mari kita baca hasilnya:
- Baris 1 (
GRUB_DEFAULT=0): entry pertama menu menjadi pilihan default. - Baris 2 (
GRUB_TIMEOUT=5): menu tampil lima detik sebelum default dijalankan;-1berarti menunggu tanpa batas. - Baris 3 (
GRUB_CMDLINE_LINUX_DEFAULT="quiet"): parameter kernel untuk entry normal saja. - 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:
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.txtOutput yang Dihasilkan:
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:
- Baris
search ...: mencari partisi lewat UUID filesystem lalu menetapkannya sebagai$root; nomor disk boleh berubah, UUID tidak. - Baris
linux ...: memuat kernel dari$rootsekaligus melewatkan parameter:root=UUID=...menunjuk filesystem root asli,romemasangnya read-only dulu sebelum systemd me-remount-nya. - Baris
initrd ...: memuat arsip initramfs yang berpasangan dengan kernel tersebut. - 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:
GRUB_DISABLE_OS_PROBER=falseStrategi 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.