Grub doesn't detect Fedora after installing a grub theme

Better use an USB live image of Fedora and mount your file system on your hard drive in your live system.

#
# 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 btrfs
set root='hd0,gpt8'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt8 --hint-efi=hd0,gpt8 --hint-baremetal=ahci0,gpt8  1339ff31-2770-40c5-8983-e26f24c962ce
else
  search --no-floppy --fs-uuid --set=root 1339ff31-2770-40c5-8983-e26f24c962ce
fi
insmod part_gpt
insmod fat
set boot='hd0,gpt7'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=boot --hint-bios=hd0,gpt7 --hint-efi=hd0,gpt7 --hint-baremetal=ahci0,gpt7  AC68-6CDE
else
  search --no-floppy --fs-uuid --set=boot AC68-6CDE
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=1339ff31-2770-40c5-8983-e26f24c962ce ro rootflags=subvol=root resume=UUID=12c3f46c-563f-49a6-957f-fdc72f703893 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 then 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 ###
menuentry 'Windows Boot Manager (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-E034-FB46' {
	insmod part_gpt
	insmod fat
	set root='hd0,gpt1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1  E034-FB46
	else
	  search --no-floppy --fs-uuid --set=root E034-FB46
	fi
	chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
# Other OS found, undo autohiding of menu unless menu_auto_hide=2
if [ "${orig_timeout_style}" -a "${menu_auto_hide}" != "2" ]; then
  set timeout_style=${orig_timeout_style}
  set timeout=${orig_timeout}
fi
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
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 ###

Here’s the grub.cfg file I found inside /root/boot/grub2.

As far as I can see this looks good.
Can you provide the Output of the following command?
lsblk -o NAME,FSTYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT

Sorry for being late, also;

[liveuser@localhost-live ~]$ lsblk -o NAME,FSTYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT
NAME        FSTYPE   LABEL                  UUID                                 FSAVAIL FSUSE% MOUNTPOINT
loop0       squashfs                                                                            
loop1       ext4     Anaconda               8f4eeabf-c1db-415a-af32-8436661490ea                
├─live-rw   ext4     Anaconda               8f4eeabf-c1db-415a-af32-8436661490ea      1G    84% /
└─live-base ext4     Anaconda               8f4eeabf-c1db-415a-af32-8436661490ea                
loop2                                                                                           
└─live-rw   ext4     Anaconda               8f4eeabf-c1db-415a-af32-8436661490ea      1G    84% /
sda                                                                                             
├─sda1      vfat     SYSTEM_DRV             E034-FB46                                           
├─sda2                                                                                          
├─sda3      ntfs                            32E6E74CE6E70EC3                                    
├─sda4      ntfs     New Volume             744E51C44E518032                                    
├─sda5      ntfs     LENOVO                 6C70BD9570BD668C                                    
├─sda6      ntfs     WINRE_DRV              1E583A4C583A2347                                    
├─sda7      vfat                            AC68-6CDE                                           
├─sda8      btrfs    fedora_fedora-80xh     1339ff31-2770-40c5-8983-e26f24c962ce                
└─sda9      swap                            12c3f46c-563f-49a6-957f-fdc72f703893                
sdb         iso9660  Fedora-KDE-Live-34-1-2 2021-04-23-11-23-34-00                              
├─sdb1      iso9660  Fedora-KDE-Live-34-1-2 2021-04-23-11-23-34-00                     0   100% /run/initramfs/live
├─sdb2      vfat     ANACONDA               E34E-576F                                           
└─sdb3      hfsplus  ANACONDA               abfd1e18-f2b7-3797-b707-3ba31820422e                
sr0                                                                                             
zram0                                                                                           [SWAP]

This also is correct, provided this is the only boot config you have written.
How did you install the theme?
Did you directly edid something under /boot/ ?

You could use your Live System to save your Data, make a backup of your old home directory and install fresh.

Maybe this guide will help you installing a new boot loader:

But before trying anything, I’d backup my data.
See little how-to below

The backup could work like this:

Here the commands in case you want to backup data:

# First switch to root
sudo su -

# Show file system to find your disk to backup
lsblk -f

# Mount the file system, in my case it's the btrfs volume /dev/vda3
mount  /dev/vda3  /mnt/

# Check what's there
ls -ahl /mnt/

# Now copy your data to an external disk
cp -vr  /mnt/home/  /some/external/disk/

# or use rsync https://linuxhint.com/rsync_copy_files/

Then you may want to try to fix your boot process first or try a new install.

calimari

huben has some good advice but I’d also check your /boot/loader/entries folder - that has one .conf file for each linux kernel. In the grub.cfg, they are loaded by the

insmod blscfg

command.
Other OSes are specified in the old-fashioned way by being referenced directly from grub.cfg. So if the theme has screwed your /boot/loader/entries directory, you’d see exactly your symptoms.

If that directory and its files are missing, hopefully, you can find and replace those files. If not, try a dnf reinstall of the latest kernel via the live USB route to access your linux. That should recreate the .conf file for that kernel. Make sure that that directory exists before the kernel reinstall - and check it afterwards for the .conf file.

I would guess that sda1 and sda7 in your post #16 are both efi.

I would also venture that sda1 was the windows efi partition and sda7 was created during the linux install with grub for linux in that partiiton.

Now your issue is the grub theme you installed was placed on the windows efi partition (sda1) and you cannot access the grub partition for linux (sda7).

This type problem crops up when you have more than one efi partition especially when you install 3rd party software (the grub theme).

Now you need to go through the recovery steps to merge the boot loaders from both efi partitions and delete the extra partition so it does not interfere again.

A quick google search for “how to merge 2 efi partitions in fedora” gives several methods to solve this issue.

GitHub - vinceliuice/grub2-themes: Modern Design theme for Grub2 here’s what I used to install the theme, the guide was provided in the README.md file. Didn’t edit anything at all. And yeah, thanks for the advice, I’ll back up my files.

/boot/loader/entries/ exists, and there are 3 files in there, 1 more than in the live usb /boot/loader/entries/ directory.

Yes, as computersavvy and Jonathan S said, there are several scenarios possible.

You have two efi partitions. This usually works fine. However since you installed a custom theme, something went wrong and you may have installed grub a second time into the windows efi partition (sda1). I believe I’ve seen a setup where you could select several Linux Bootloader in the Bios/UEFI-Setup. You can verify if you also have several listed and try them.

The files you found under /etc/grub2.cfg and /etc/grub2-efi.cfg are generated from templates for the actual written bootloader. It is composed of files in /etc/grub.d/ and /etc/default/grub.
The bootloader is written to /boot/grub2/.

There are several files written that after all should point your sd8

sda8      btrfs    fedora_fedora-80xh     1339ff31-2770-40c5-8983-e26f24c962ce

see “/boot/efi/EFI/fedora/grub.cfg” for example.
However it is not recommended to manually edit there.
After you backed up, you can try however.

Jonathan S advice seems promising.
You also can try to merge them.

However I belive what bootloader is being taken should be set in your BIOS/UEFI Settings.

I tried searching for that, but there seems to be no clear answer. I tried a few different guides, but neither seemed to work.

I’ll try that, thanks. Honestly, if that doesn’t work, I’ll probably just end up reinstalling. I’ve taken a backup of everything important I have, and that should probably it. I’m no expert, and I might end up accidentally breaking something important while editing those files. Thanks anyways for all your help though :slight_smile:

When booted to fedora you can use efibootmgr to see the uefi bios boot order. It can also be used to modify the boot order and default boot loader.

I also looked at the install.sh that you used to install the grub theme and there are errors in it.
The way it was written works well for the older grub.cfg location used for Fedora 33 and earlier and runs

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

if that file exists, which is not correct for Fedora 34 and later.
Fedora 34 places the grub.cfg file at /boot/grub2/grub.cfg.

A clean new install of F34 does not create /boot/efi/EFI/fedora/grub.cfg so the theme install will work properly, but upgrading to F34 from F33 or earlier will leave the existing grub.cfg file at that location which then causes the error.

If the file grub.cfg already exists under the /boot/efi/ path it will cause the install of your theme to improperly place the updated grub.cfg file in that location rather than in /boot/grub2/ .

4 Likes

Nice find :+1:

JV

I agree with huben - that is a good catch. :slight_smile:

calimari

Above, you posted the contents of /boot/grub2/grub.cfg, which looks correct, but you appear to be loading (as JV says) /boot/efi/EFI/fedora/grub.cfg.

You could try using the ‘configfile’ command of grub to load your /boot/grub2/grub.cfg.
To run the grub configfile command, press c to go to the grub commandline and type:

configfile /grub2/grub.cfg

Note that there is no preceding /boot - that is implicit.

If that loads the grub menu as it was, then you’re in luck - just load Fedora, back up your /boot/grub2.grub.cfg (to say /boot/grub2/grub.cfg.bak) and run:

grub2-mkconfig -o /boot/grub2/grub.cfg

If desperate, you can always use configfile to load the .bak file.

This trick has saved my bacon on a production server. :wink:

I installed a grub2 theme yesterday and on rebooting, grub wasn’t detecting Fedora. :slightly_smiling_face:

Did end up installing MX Linux because someone recommended it :frowning: @jerrymdaniel could use this though

Well, that seems to be fixed now.

I run into the same issue, fedora boot entry disappeared and only windows boot menu shows up, it’s probably caused by the grub theme installation. I tried grub configfile <grub config on disk> and grub2-mkconfig to re-regenerate the config file, however they don’t work for me. I’m providing my steps how I recovered my fedora boot entry for your reference:

  1. In grub boot menu, press “c” to enter grub command line:
  2. List disk partitions with ls command
grub> ls
hd2,gpt1 hd2,gpt2 ...
  1. Find out the root partition by check the partitions one by one, for example, my root partition is (hd2,gpt2).
grub> ls (hd2,gpt2)
root
  1. Now you should be able to find out the kernel boot opts on your root partition.
grub> cat (hd2,gpt2)/root/etc/grub2.cfg  # or other grub2 config files in your root partition
   ...
   set kernelopts="root=UUID=... ro rootflags=subvol=root"
   ...
  1. Now use the kernel boot opts to boot up your fedora by manual.
grub> linux (hd2,gpt6)/root/boot/vmlinuz-5.14.xxxx root=UUID=... ro rootflags=subvol=root
grub> initrd (hd2,gpt6)/root/boot/initramfs-5.14.xxxx
grub> boot
  1. Now you enter your fedora os, you can try grub2-mkconfig or other possible solutions, these don’t work for me, and seems I recovered my fedora boot entry by reinstalling the grub2 and shim rpms, because I tried many thing, I’m not pretty sure it was fixed by the reinstalling of grub2 and shim rpms, but it worth a try if everything else don’t work for you.
$ sudo dnf reinstall grub* shim*
 Package                                  
========================
Reinstalling:
 grub2-common        
 grub2-efi-ia32
 grub2-efi-ia32-cdboot
 grub2-efi-x64           
 grub2-efi-x64-cdboot    
 grub2-efi-x64-modules   
 grub2-pc               
 grub2-pc-modules
 grub2-tools
 grub2-tools-efi         
 grub2-tools-extra       
 grub2-tools-minimal     
 grubby                  
 shim-ia32       
 shim-x64

Note: grub2-efi-x64-modules is probably an important rpm need to be installed and reinstall it, so it’s better that you have all these rpms installed and then reinstall them.
7. After reinstalling the grub and shim rpms, reboot, you should see your fedora boot entries again.

1 Like