Manual GRUB Boot Menu Entry

- 1GRUB: Theme, Timeout, OS-Prober, etc
- 2Manual GRUB Boot Menu EntryThis article
This article uses AI agent (Anthropic Claude) to elaborate on some details.
Preface
Ketika kita melakukan dual boot di PC/Laptop kita (terutama dengan Linux), maka umumnya kita mengandalkan os-prober untuk mencari dan mendaftarkan OS yang ada ke bootloader (dalam konteks ini GRUB - Grand Unified Bootloader). Namun, beberapa masalah dapat terjadi dan tidak dapat diatasi dengan hanya menggunakan os-prober. Misalnya, jika kita meng-install 2 (atau lebih) sistem operasi dengan entry yang tidak dapat terdeteksi otomatis (via os-prober), maka solusinya adalah menambahkan entry tersebut secara manual.
Real use case
Sebagai referensi kasus nyata, saya akan ceritakan masalah yang saya alami. Beberapa waktu lalu, saya meng-install NixOS sebagai “OS secondary” setelah Archlinux (dan Windows) di SSD yang sama. Setelah selesai memasang NixOS, saya ingin memastikan bahwa NixOS tersebut dapat terdaftar sebagai boot entry di GRUB Archlinux, sehingga saya jalankan os-prober. Benar saja, NixOS dapat terdaftar di GRUB Archlinux. TAPI, sayangnya, ketika saya mencoba masuk ke NixOS dari entry tersebut di GRUB, saya “terlempar” ke Archlinux. Dengan kata lain, entry NixOS yang terdaftar di GRUB tersebut tidak benar-benar menyertakan file bootloader-nya sehingga saya tidak bisa masuk (login).
Setelah mencari tahu penyebabnya, saya menemukan fakta bahwa os-prober memang “ngaco” karena tidak bisa mendeteksi kernel/initrd/root NixOS yang memang “dinamis” bergantung generation-nya di systemd-boot bootloader. Jadi, salah satu solusi yang paling “waras” adalah dengan meng-input-kan secara manual file EFI-nya ke konfigurasi GRUB.
Practical Guide
Berikut adalah langkah-langkah praktis untuk memasukkan entry boot ke GRUB.
How GRUB config works
Sebelum memulai, kita perlu tahu cara kerja konfigurasi GRUB ketika kita menjalankan grub-mkconfig.
Berikut adalah isi direktori /etc/grub.d/ saya di Archlinux:
Permissions Size User Date Modified Name.rwxr-xr-x 9.8k root 15 Jan 16:03 00_header.rwxr-xr-x 13k root 15 Jan 16:03 10_linux.rwxr-xr-x 14k root 15 Jan 16:03 20_linux_xen.rwxr-xr-x 786 root 15 Jan 16:03 25_bli.rwxr-xr-x 13k root 15 Jan 16:03 30_os-prober.rwxr-xr-x 1.2k root 15 Jan 16:03 30_uefi-firmware.rwxr-xr-x 556 root 26 Sep 18:31 40_custom.rwxr-xr-x 215 root 15 Jan 16:03 41_custom.rw-r--r-- 483 root 15 Jan 16:03 READMEKetika file konfigurasi GRUB di-generate dengan perintah grub-mkconfig, yang terjadi:
grub-mkconfigmenjalankan semua script executable di/etc/grub.d/tersebut sesuai urutan angka prefix-nya (00_header, 10_linux, dst).- Tiap script akan men-generate “potongan konfigurasi” masing-masing yang kemudian digabungkan menjadi satu di
grub.cfg.
Perhatikan 3 file script ini:
- 10_linux: mendeteksi kernel yang ter-install di sistem lokal.
- 30_os-prober: mendeteksi OS lain di partisi/disk lain (kalau paket
os-proberter-install dan diaktifkan). - 40_custom: bukan script, tapi komentar placeholder (tempat kosong) untuk memasukkan entry sendiri secara manual (misalnya chainload ke OS lain, boot ISO, kernel custom, atau entry apapun yang mau ditulis manual).
How to manually input GRUB custom entry
Sekarang, setelah mengetahui cara kerja GRUB dalam men-generate konfigurasinya, kita tahu dimana kita akan membuat entry secara manual: /etc/grub.d/40_custom.
By default, isi file 40_custom hanya seperti ini (kosong):
#!/bin/shexec tail -n +3 $0# This file provides an easy way to add custom menu entries. Simply type the# menu entries you want to add after this comment. Be careful not to change# the 'exec tail' line above.Berikut adalah template menuentry yang akan dimasukkan ke 40_custom:
menuentry "Label" { insmod part_gpt insmod fat search --no-floppy --fs-uuid --set=root UUID chainloader /path/to/bootloader.efi}Keterangan:1
menuentry "Label" { ... }: mendefinisikan satu entry di menu boot GRUB. Teks di dalam kutip adalah nama yang muncul di layar boot. Isi kurung kurawal adalah perintah GRUB yang dijalankan kalau entry itu dipilih.insmod part_gpt: load module GRUB untuk membaca skema partisi GPT (GUID Partition Table). Umumnya, partisi modern menggunakan GPT, bukan MBR. Namun, sesuaikan dengan jenis partisinya.insmod fat: load module untuk membaca filesystem FAT. Ini penting karena ESP (EFI System Partition) — partisi tempat semua file .efi disimpan di sistem UEFI — selalu diformat FAT32.search --no-floppy --fs-uuid --set=root B071-9102:
search: cari partisi tertentu.--no-floppy: jangan cek floppy disk (optimasi, biar cepat).--fs-uuid: kriteria pencarian: cari berdasarkan UUID filesystem.--set=root B071-9102: kalau ketemu partisi dengan UUID B071-9102, set partisi itu sebagai root device GRUB untuk sisa perintah di dalam entry ini.
chainloader /EFI/.../xxx.efi: setelah root device di-set, GRUB “menyerahkan” proses boot ke file .efi tersebut (teknik ini disebut chainloading) — GRUB tidak boot OS itu sendiri, cuma memuat bootloader OS itu dan membiarkan bootloader itu yang melanjutkan (systemd-boot untuk NixOS, Windows Boot Manager untuk Windows, dan seterusnya).
Untuk meng-input-kan entry baru, kita bisa menggunakan perintah berikut:
(Misalnya, saya akan meng-input-kan NixOS)
sudo tee -a /etc/grub.d/40_custom > /dev/null << 'EOF'
menuentry "NixOS (systemd-boot)" { insmod part_gpt insmod fat search --no-floppy --fs-uuid --set=root B071-9102 chainloader /EFI/systemd/systemd-bootx64.efi}EOFPerintah tersebut akan menambahkan menuentry NixOS tersebut di bagian akhir file
40_customtanpa me-replace konten yang sudah terlebih dahulu ada. Artinya, jika kalian ingin menambahkan menuentry baru, tinggal gunakan perintah yang sama (tentu dengan mengganti bagian-bagian yang perlu disesuaikan).
Setelah itu jalankan:
sudo grub-mkconfig -o /boot/grub/grub.cfgos-proberJika kita tidak lagi memerlukan os-prober, kita perlu “me-non-aktifkan”-nya terlebih dahulu sebelum menjalankan perintah di atas.
Caranya:
Edit /etc/default/grub, pastikan baris ini di-comment/bernilai true:
GRUB_DISABLE_OS_PROBER=falseKita bisa memverifikasi menuentry-nya dengan perintah:
grep -n "menuentry" /boot/grub/grub.cfgSelesai.
Sebagai tambahan, berikut adalah isi file /etc/grub.d/40_custom saya saat ini:
#!/bin/shexec tail -n +3 $0# This file provides an easy way to add custom menu entries. Simply type the# menu entries you want to add after this comment. Be careful not to change# the 'exec tail' line above.
menuentry "NixOS (systemd-boot)" { insmod part_gpt insmod fat search --no-floppy --fs-uuid --set=root B071-9102 chainloader /EFI/systemd/systemd-bootx64.efi}
menuentry "Windows 10" { insmod part_gpt insmod fat search --no-floppy --fs-uuid --set=root B071-9102 chainloader /EFI/Microsoft/Boot/bootmgfw.efi}Saya juga pernah menulis tentang GRUB, terutama terkait kustomisasi tema, aktivasi os-prober, dan beberapa hal lain:

Footnotes
Support & Share
If this article helped you, please share or support!












