Video failed to load

Manual GRUB Boot Menu Entry

Manual GRUB Boot Menu Entry
892 words
4 minutes
Manual GRUB Boot Menu Entry
  1. 1GRUB: Theme, Timeout, OS-Prober, etc
  2. 2Manual GRUB Boot Menu EntryThis article
AI Usage

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:

/etc/grub.d
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 󰂺 README

Ketika file konfigurasi GRUB di-generate dengan perintah grub-mkconfig, yang terjadi:

  1. grub-mkconfig menjalankan semua script executable di /etc/grub.d/ tersebut sesuai urutan angka prefix-nya (00_header, 10_linux, dst).
  2. 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-prober ter-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.

40_custom

By default, isi file 40_custom hanya seperti ini (kosong):

40_custom
#!/bin/sh
exec 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:

40_custom
menuentry "Label" {
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root UUID
chainloader /path/to/bootloader.efi
}

Keterangan:1

  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.
  2. 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.
  3. 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.
  4. 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.
  1. 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)

40_custom
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
}
EOF

Perintah tersebut akan menambahkan menuentry NixOS tersebut di bagian akhir file 40_custom tanpa 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:

Terminal window
sudo grub-mkconfig -o /boot/grub/grub.cfg
os-prober

Jika 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:

Terminal window
GRUB_DISABLE_OS_PROBER=false

Kita bisa memverifikasi menuentry-nya dengan perintah:

Terminal window
grep -n "menuentry" /boot/grub/grub.cfg

Selesai.

Sebagai tambahan, berikut adalah isi file /etc/grub.d/40_custom saya saat ini:

#!/bin/sh
exec 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:

GRUB: Theme, Timeout, OS-Prober, etc
A brief note regarding grub configuration.
2026-03-19grub#grub#theme#timer#os-prober#boot

Footnotes#

  1. https://claude.ai/ ↩

Support & Share

If this article helped you, please share or support!

Sponsor
Manual GRUB Boot Menu Entry
https://secretblog.my.id/posts/tech/manualgrubmenu/
Author
Wildan
Published at
2026-09-27

Comments

Profile Image of the Author
Wildan
Welcome! Wildan-desu.
Greetings
You've found out my secret blog?! Welcome to my blog, then! Enjoy exploring 😄
Categories
Tags
Latest Moments
Site Statistics
Posts
114
Categories
93
Tags
329
Total Words
607,415
Running Days
0 days
Last Activity
0 days ago
Site Info
Build Platform
GitHub Actions
Blog Version
Firefly v6.16.8
License
CC BY-NC-SA 4.0
Quote of The Day ✨
"Start where you are. Use what you have. Do what you can."
—— Arthur Ashe
Table of Contents