Fedora entry not in its own Grub Menu

I installed Fedora 35 beta version, and I decided to set up btrfs snapshots, so I created subvolumes, copied stuff to their respective subvolumes edited fstab, deleted fedora’s folder from /boot/efi/EFI, chrooted into fedora from my Garuda installation, reinstalled:

dnf reinstall grub2-efi grub2-pc grub2-pc-modules grub2-tools-efi grub2-tools-extra shim

updated grub:

grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

Everything went fine, even fedora’s grub shows, but the grub(fedora’s own grub) doesn’t have fedora’s menu entry, but other distributions in it, so I can’t boot into fedora right now.

Was /boot/efi mounted in Fedora when making grub2-mkconfig ?

Yeah /boot/efi was mounted.
This is how my fedora grub looks like:

Even fedora 35 still uses /boot/efi/EFI/fedora content. F34 relocated grub.cfg to /boot/grub2 but efi/EFI still contains several files related.
This shows files related to the latest kernel update even though several are holdovers from the clean F33 install that was done in March this year.

# ls -l /boot/efi/EFI/fedora/
total 12364
-rwx------. 1 root root     112 May  4 20:07 BOOTIA32.CSV
-rwx------. 1 root root     110 May  4 20:07 BOOTX64.CSV
-rwx------. 1 root root 1643784 Sep 29 13:42 gcdia32.efi
-rwx------. 1 root root 2602248 Sep 29 13:42 gcdx64.efi
-rwx------. 1 root root     143 Aug 27 19:47 grub.cfg
-rwx------. 1 root root    7119 Mar 26  2021 grub.cfg.rpmsave
-rwx------. 1 root root    1024 Aug 27 19:34 grubenv.rpmsave
-rwx------. 1 root root 1643784 Sep 29 13:42 grubia32.efi
-rwx------. 1 root root 2602248 Sep 29 13:42 grubx64.efi
-rwx------. 1 root root  676040 May  4 20:07 mmia32.efi
-rwx------. 1 root root  850032 May  4 20:07 mmx64.efi
-rwx------. 1 root root  928592 May  4 20:07 shim.efi
-rwx------. 1 root root  740344 May  4 20:07 shimia32.efi
-rwx------. 1 root root  928592 May  4 20:07 shimx64.efi
1 Like

I tried: grub2-mkconfig -o /boot/grub2/grub.cfg but still no luck

https://fedoraproject.org/wiki/GRUB_2

The GRUB configuration file is located at /boot/grub2/grub.cfg and is intended to be a static file that does not need updating. In case of disk replacement, or installation of another Linux distribution, /boot/grub2/grub.cfg should be updated. Use the following commands:

sudo grub2-mkconfig -o /etc/grub2.cfg

sudo grub2-mkconfig -o /etc/grub2-efi.cfg

These commands use the information provided by the os-prober utility to add entries for other Linux distributions and Windows.

Thanks @computersavvy

When I ran the similar grub-update command, I got a long output as if grub was never used or grub was never there! Does everyone do this kind of output when they try to run grub-update? (In Ubuntu, I hardly get 4 lines of output when I ran sudo update-grub.) What is the output trying to say? Is it normal to have such output?

  ⟹  sudo grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"
Generating grub configuration file ...
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

if [ -f ${config_directory}/grubenv ]; then
  load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

terminal_output console
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/01_users ###
if [ -f ${prefix}/user.cfg ]; then
  source ${prefix}/user.cfg
  if [ -n "${GRUB2_PASSWORD}" ]; then
    set superusers="root"
    export superusers
    password_pbkdf2 root ${GRUB2_PASSWORD}
  fi
fi
### END /etc/grub.d/01_users ###

### BEGIN /etc/grub.d/08_fallback_counting ###
insmod increment
# Check if boot_counter exists and boot_success=0 to activate this behaviour.
if [ -n "${boot_counter}" -a "${boot_success}" = "0" ]; then
  # if countdown has ended, choose to boot rollback deployment,
  # i.e. default=1 on OSTree-based systems.
  if  [ "${boot_counter}" = "0" -o "${boot_counter}" = "-1" ]; then
    set default=1
    set boot_counter=-1
  # otherwise decrement boot_counter
  else
    decrement boot_counter
  fi
  save_env boot_counter
fi
### END /etc/grub.d/08_fallback_counting ###

### BEGIN /etc/grub.d/10_linux ###
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  343b8ac0-3e92-4609-8094-dfd7e193ea76
else
  search --no-floppy --fs-uuid --set=root 343b8ac0-3e92-4609-8094-dfd7e193ea76
fi
insmod part_gpt
insmod fat
set boot='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=boot --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1  5341-BB30
else
  search --no-floppy --fs-uuid --set=boot 5341-BB30
fi

# This section was generated by a script. Do not modify the generated file - all changes
# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
#
# The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and
# populates the boot menu. Please refer to the Boot Loader Specification documentation
# for the files format: https://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/.

# The kernelopts variable should be defined in the grubenv file. But to ensure that menu
# entries populated from BootLoaderSpec files that use this variable work correctly even
# without a grubenv file, define a fallback kernelopts variable if this has not been set.
#
# The kernelopts variable in the grubenv file can be modified using the grubby tool or by
# executing the grub2-mkconfig tool. For the latter, the values of the GRUB_CMDLINE_LINUX
# and GRUB_CMDLINE_LINUX_DEFAULT options from /etc/default/grub file are used to set both
# the kernelopts variable in the grubenv file and the fallback kernelopts variable.
if [ -z "${kernelopts}" ]; then
  set kernelopts="root=UUID=f0b08550-2e12-4892-8840-8b6feb18d14c ro rootflags=subvol=root rhgb quiet "
fi

insmod blscfg
blscfg
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/10_reset_boot_success ###
# Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry
if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then
  set menu_hide_ok=1
else
  set menu_hide_ok=0
fi
# Reset boot_indeterminate after a successful boot
if [ "${boot_success}" = "1" ] ; then
  set boot_indeterminate=0
# Avoid boot_indeterminate causing the menu to be hidden more than once
elif [ "${boot_indeterminate}" = "1" ]; then
  set boot_indeterminate=2
fi
# Reset boot_success for current boot
set boot_success=0
save_env boot_success boot_indeterminate
### END /etc/grub.d/10_reset_boot_success ###

### BEGIN /etc/grub.d/12_menu_auto_hide ###
if [ x$feature_timeout_style = xy ] ; then
  if [ "${menu_show_once}" ]; then
    unset menu_show_once
    save_env menu_show_once
    set timeout_style=menu
    set timeout=60
  elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then
    set orig_timeout_style=${timeout_style}
    set orig_timeout=${timeout}
    if [ "${fastboot}" = "1" ]; then
      # timeout_style=menu + timeout=0 avoids the countdown code keypress check
      set timeout_style=menu
      set timeout=0
    else
      set timeout_style=hidden
      set timeout=1
    fi
  fi
fi
### END /etc/grub.d/12_menu_auto_hide ###

### BEGIN /etc/grub.d/14_menu_show_once ###
if [ x$feature_timeout_style = xy ]; then
  if [ "${menu_show_once_timeout}" ]; then
    set timeout_style=menu
    set timeout="${menu_show_once_timeout}"
    unset menu_show_once_timeout
    save_env menu_show_once_timeout
  fi
fi
### END /etc/grub.d/14_menu_show_once ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
Adding boot menu entry for UEFI Firmware Settings ...
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
	fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# 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.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg
fi
### END /etc/grub.d/41_custom ###
done
~
  ⟹

I suppose we have to run:

sudo grub2-mkconfig -o /etc/grub2.cfg

sudo grub2-mkconfig -o /etc/grub2-efi.cfg

You can give us the output of these commands

you have run

sudo grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"

Yes, I got that command from the most upvoted answer from here: Equivalent of update-grub for RHEL/Fedora/CentOS systems? - Unix & Linux Stack Exchange

I hope the command is safe to use, isn’t it?

Actually, you just have to run

this command is just checking whether the file /etc/grub2.cfg exists or not, in your case as in the output you have given the file exists, actually, this wasn’t necessary to check if you were running fedora >34.
If you want to learn more, check this out: https: //fedoraproject.org/wiki/GRUB_2

Also, if you have issues not fully related to the topic of another post, it’s better to create a new post yourself