Fedora 37 not detected on boot becuase I moved the boot partition

Hello, I was attempting to dual boot windows 10 from Fedora 37 and decided rearranging partitions would solve my problems. Well now my laptop cannot detect Fedora on boot. I am currently live booting from a USB and can still see my old Fedora file system on Disks/Gparted. How can I boot into this partition? Have updated GRUB to no avail but could this be because I am still live booting?

You need to provide more details. Are you using BIOS or UEFI boot? What is the current disk layout? If you have the original layout that would be useful.

To post your disk laout, run sudo fdisk -l and paste the output as text surrounded with “```” strings as in this example:

$ sudo fdisk -l
Disk /dev/nvme0n1: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: Samsung SSD 970 EVO Plus 500GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6F6A2A7C-F7E1-4CDC-AA39-A39E20323A0B

Device             Start       End   Sectors   Size Type
/dev/nvme0n1p1      2048   1333247   1331200   650M EFI System
/dev/nvme0n1p2   1333248   1595391    262144   128M Microsoft reserved
/dev/nvme0n1p3   1595392 124211526 122616135  58.5G Microsoft basic data
/dev/nvme0n1p4 124213248 126095359   1882112   919M Windows recovery environment
/dev/nvme0n1p5 126097408 128194559   2097152     1G Linux filesystem
/dev/nvme0n1p6 128194560 976773119 848578560 404.6G Linux filesystem

Then describe the changes you made so we can guess at the original layout.

This should be a relatively easy fix. Relocating the partitions possibly (maybe) changed the UUIDs, and since fedora relies on the UUIDs to properly boot that will need to be verified and possibly fixed.
Please post the output of lsblk -f so we can see the UUIDs of all the partitions.
That then would need to be compared with the values in /etc/fstab, and /boot/efi/EFI/fedora/grub.cfg as well as the file names in /boot/loader/entries.

We also need to know exactly what file systems are in use (I suspect that /dev/nvme0n1p6 is btrfs) so you can mount them correctly for recovery. The output of lsblk should give us that info.

Note that windows may also not boot properly since you relocated /dev/nvme0n1p4 from the end of the drive to much earlier in the drive and the recovery space might not be found by windows now. But one problem at a time to recover.

$ lsblk - f
     squash 4.0                                                             
     ext4   1.0   Anaconda
│    ext4   1.0   Anaconda
│                       8fe0120d-7a70-4e73-8185-f8521c2529e0    1.8G    75% /
     ext4   1.0   Anaconda
     ext4   1.0   Anaconda
                        8fe0120d-7a70-4e73-8185-f8521c2529e0    1.8G    75% /
sda  iso966 Jolie Fedora-WS-Live-37-1-7
│    iso966 Jolie Fedora-WS-Live-37-1-7
│                       2022-11-05-10-15-31-00                     0   100% /run/initramfs/live
│    vfat   FAT16 ANACONDA
│                       7268-1544                                           
│    ntfs               0E74AE6D7CF86E42                                    
│    ext4   1.0         98871ee5-1638-4cce-ad50-8668e8ddca31                
│    btrfs        fedora_localhost-live
│                       2f90f992-e665-42ac-b8d0-0452f56c3413                
     exfat  1.0         67ED-F63F 
$ cat fstab 
vartmp   /var/tmp    tmpfs   defaults   0  0
$ sudo ls entries

Thanks for the info.

Now for the recovery which will be done within a chroot environment.

  1. boot to the live image.
  2. open a terminal window
  3. gain root privileges with su (no password required)
  4. mount the root file system
    mount -t btrfs -o subvol=root,compress=zstd:1 UUID=2f90f992-e665-42ac-b8d0-0452f56c3413 /mnt
  5. mount the other needed virtual file systems
    for dir in sys proc run dev ; do mount --bind /$dir /mnt/$dir ; done
  6. chroot to the root file system of the installed OS.
    chroot /mnt
  7. mount the remaining file systems.
    mount -a
  8. Now verify everything is mounted properly. mount
    You should see /proc, /sys, /run, /dev, /home, /, /boot, & /boot/efi.
    If not all those are seen we need to fix that before we continue.

At this point we need to see the content of the files /etc/fstab and /boot/efi/EFI/fedora/grub.cfg
cat /etc/fstab & cat /boot/efi/EFI/fedora/grub.cfg
We also need to see the output of efibootmgr and ls /boot/loader/entries

You should be able to connect to the internet from this environment and copy & paste from the screen here. Except for the kernel this should be your normal environment.

1 Like

All mounted apart from /boot/efi.

Output of fstab is above in initial reply.
Output of grub.cfg shown at the end of this reply.

FYI Upon updating grub I have this

$ sudo grub2-mkconfig -o /etc/grub2.cfg 
Generating grub configuration file ...
Found Fedora Linux 37 (Workstation Edition) on /dev/nvme0n1p3
Adding boot menu entry for UEFI Firmware Settings ...

which is the OS I’m trying to recover, but when GRUB is launched on boot, the OS doesn’t show.

Also when launching without the live disc, I receive I receive a “no bootable devices warning”.

Output of grub.cfg

# sudo cat /boot/grub2/grub.cfg
# 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
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
   set default="${saved_entry}"

if [ x"${feature_menuentry_id}" = xy ]; then

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

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

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

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.
  set timeout=5
### 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}
### 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
    decrement boot_counter
  save_env boot_counter
### END /etc/grub.d/08_fallback_counting ###

### BEGIN /etc/grub.d/10_linux ###
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 98871ee5-1638-4cce-ad50-8668e8ddca31
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=boot 19C3-925F

# 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://systemd.io/BOOT_LOADER_SPECIFICATION/.

# 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=2f90f992-e665-42ac-b8d0-0452f56c3413 ro rootflags=subvol=root rhgb quiet "

insmod 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
  set menu_hide_ok=0 
# 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
# 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
      set timeout_style=hidden
      set timeout=1
### 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
### 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 ###
if [ "$grub_platform" = "efi" ]; then
	menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/35_fwupd ###
### END /etc/grub.d/35_fwupd ###

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

That was /etc/fstab for the live environment. I need to see /etc/fstab in the chroot environment.

I also need the content of /boot/efi/EFI/fedora/grub.cfg.
Those files will have the info needed to assist in recovery.

If /boot/efi did not mount with the ‘mount -a’ command then try mount UUID=67ED-F63F /boot/efi

Then please provide the output of lsblk -f from within the chroot environment.

Please do not get ahead too far since without a fully mounted and configured chroot environment things may not do as you expect.

I only have about 30 minutes before I have a meeting so can work on this for now but then will be out for 3 to 4 hours.

This may imply an error due to the rearranging of the partitions.

/boot/efi now mounted.


# cat /etc/fstab

# /etc/fstab
# Created by anaconda on Fri Dec 23 15:41:12 2022
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
UUID=2f90f992-e665-42ac-b8d0-0452f56c3413 /                       btrfs   subvol=root,compress=zstd:1 0 0
UUID=98871ee5-1638-4cce-ad50-8668e8ddca31 /boot                   ext4    defaults        1 2
UUID=19C3-925F          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
UUID=2f90f992-e665-42ac-b8d0-0452f56c3413 /home                   btrfs   subvol=home,compress=zstd:1 0 0
/dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_01014b4983299e0e5a6c1f9f3d81280741420402818084341748ec522098bd28ad3d0000000000000000000034beffdcff0c520091558107b7ad0543-0:0 /mnt/usb-USB_SanDisk_3.2Gen1_01014b4983299e0e5a6c1f9f3d81280741420402818084341748ec522098bd28ad3d0000000000000000000034beffdcff0c520091558107b7ad0543-0:0 auto nosuid,nodev,nofail,x-gvfs-show 0 0

# lsblk -f
NAME        FSTYPE   FSVER            LABEL                 UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
loop0       squashfs 4.0                                                                                        
loop1       ext4     1.0              Anaconda              8fe0120d-7a70-4e73-8185-f8521c2529e0                
├─live-rw   ext4     1.0              Anaconda              8fe0120d-7a70-4e73-8185-f8521c2529e0                
└─live-base ext4     1.0              Anaconda              8fe0120d-7a70-4e73-8185-f8521c2529e0                
└─live-rw   ext4     1.0              Anaconda              8fe0120d-7a70-4e73-8185-f8521c2529e0                
sda         iso9660  Joliet Extension Fedora-WS-Live-37-1-7 2022-11-05-10-15-31-00                              
├─sda1      iso9660  Joliet Extension Fedora-WS-Live-37-1-7 2022-11-05-10-15-31-00                              
├─sda2      vfat     FAT16            ANACONDA              7268-1544                                           
zram0                                                                                                           [SWAP]
├─nvme0n1p1 ntfs                                            0E74AE6D7CF86E42                                    
├─nvme0n1p2 ext4     1.0                                    98871ee5-1638-4cce-ad50-8668e8ddca31    637M    28% /boot
├─nvme0n1p3 btrfs                     fedora_localhost-live 2f90f992-e665-42ac-b8d0-0452f56c3413  135.5G    40% /home
│                                                                                                               /
└─nvme0n1p4 exfat    1.0                                    67ED-F63F                             247.2G     0% /boot/efi

If I’m not mistaken, this is not an existing file. According to https://fedoraproject.org/wiki/GRUB_2#Create_a_GRUB_2_configuration, grub cfg is stored in /boot/grub2/grub.cfg after F34 and /boot/efi/EFI/fedora/grub.cfg is a small stub file which forwards to /boot/grub2/grub.cfg.

This entry in fstab is the old UUID for the /boot/efi partition. That UUID should be changed to UUID=67ED-F63F which is the present UUID for that partition.

In that you are mistaken. It does exist and is, as stated, a stub pointer to direct grub to the proper location for the real grub.cfg file.

I am out of time for now, but if you look at the UUID for /boot and compare that to the entry in /boot/efi/EFI/fedora/grub.cfg the entry in that file should be the same as the UUID for /boot. If not then fedora will never boot.

At this point, with everything properly mounted, please do the following, (which should fully recover for you.)

  1. rm /boot/grub2/grub.cfg /boot/efi/EFI/fedora/grub.cfg
  2. dnf reinstall grub2-efi* grub2-common (which will recreate both those files according to the way the system is currently mounted) and should configure efi to boot the proper entry.

Then, after this is completed simply reboot. It should now boot properly. If not then we need to work on the efibootmgr config to repair that.

Thanks for your help so far, I also have other commitments at the moment.

removed /boot/grub2/grub.cfg but other grub.cfg gives no such file or directory. I continued and reinstalled adn rebooted but still no dice. Grub guves no option to boot into ```

Ok, so now we need to know what exactly is the issue.
please post the following. ls -R /boot

1 Like

Blindly moving forward without fixing errors cannot work and may even cause more problems. We need to get the file system correct before you can reinstall packages that have no place to go and the fact that /boot/efi/EFI/fedora/grub.cfg did not exist raises a large waving red flag. The system CANNOT boot properly with grub if that file is missing or contains the wrong content. We are still waiting on the output of ls -R /boot so we can see what exists or does not exist in the /boot and /boot/efi partitions.

# ls -R /boot
config-6.0.7-301.fc37.x86_64         loader
efi                                  symvers-6.0.7-301.fc37.x86_64.gz
grub2                                System.map-6.0.7-301.fc37.x86_64
initramfs-6.0.7-301.fc37.x86_64.img  vmlinuz-6.0.7-301.fc37.x86_64

EFI  mach_kernel  System

BOOT  fedora

BOOTIA32.EFI  BOOTX64.EFI  fbia32.efi  fbx64.efi

BOOTIA32.CSV  gcdia32.efi  grubia32.efi  mmia32.efi  shim.efi      shimx64.efi
BOOTX64.CSV   gcdx64.efi   grubx64.efi   mmx64.efi   shimia32.efi




fonts  grubenv




Apparently you ran that ls command in the live media environment and not in the chroot environment so it does not show any of what the problem is related to.

Please boot back up, enter the chroot environment with all file systems mounted then repeat that ls -R /boot command so we can see the data related to your actual problem.

When I suggest commands I have to assume that you are interpreting them as related to the installed OS where the problem exists and not the live media environment.

Apologies, here is the output of ls -R /boot from within the chroot environment.

[root@localhost-live /]# ls -R /boot
config-6.0.16-300.fc37.x86_64                            initramfs-6.1.6-200.fc37.x86_64.img  System.map-6.0.16-300.fc37.x86_64
config-6.1.6-200.fc37.x86_64                             initramfs-6.1.9-200.fc37.x86_64.img  System.map-6.1.6-200.fc37.x86_64
config-6.1.9-200.fc37.x86_64                             loader                               System.map-6.1.9-200.fc37.x86_64
efi                                                      lost+found                           vmlinuz-0-rescue-5b4503d63784478397e67ecae70cce45
grub2                                                    symvers-6.0.16-300.fc37.x86_64.gz    vmlinuz-6.0.16-300.fc37.x86_64
initramfs-0-rescue-5b4503d63784478397e67ecae70cce45.img  symvers-6.1.6-200.fc37.x86_64.gz     vmlinuz-6.1.6-200.fc37.x86_64
initramfs-6.0.16-300.fc37.x86_64.img                     symvers-6.1.9-200.fc37.x86_64.gz     vmlinuz-6.1.9-200.fc37.x86_64



gcdia32.efi  gcdx64.efi  grub.cfg  grub.cfg.rpmsave  grubia32.efi  grubx64.efi

fonts  grub.cfg  grubenv



5b4503d63784478397e67ecae70cce45-0-rescue.conf                5b4503d63784478397e67ecae70cce45-6.1.6-200.fc37.x86_64.conf
5b4503d63784478397e67ecae70cce45-6.0.16-300.fc37.x86_64.conf  5b4503d63784478397e67ecae70cce45-6.1.9-200.fc37.x86_64.conf


There is still one unmounted partition which is has Partition type: EFI System according to Disks. Where should this be mounted?

Also not sure if this matters but the partition which I have mounted to /boot/efi is empty space I had partitioned for Windows.

It appears the system is seeing /dev/nvme0n1p1 as an efi partition, though it is formatted as ntfs and is not mounted. Please show us the output of lsblk -f again so we can see what partition is mounted as /boot/efi

UEFI can only boot from one esp on a drive, and if that ntfs partition is designated as the esp yet is not mounted there is something messed up. The esp partition is required to be fat32 in order for the bios to access it for the first stages of the boot.

A basic fedora install creates (or uses an existing) esp partition that must be formatted as fat32 for /boot/efi/ . It also creates an ext4 partition of ~1GB for /boot. The remainder of the space is used as btrfs for the system install.

It is either not empty (according to your lsblk output) or that nvme0n1p1 partition is not mounted at /boot/efi. The image shows it is not mounted.

I expect you are saying that nvme0n1p4 is the one mounted at /boot/efi, but that one is not marked as the ESP partition and cannot be used for booting. It is also 240+GB in size.

The steps required at this point have some options.
One way is to

  1. reformat nvme0n1p1 as fat32 and verify it is still designated at the System efi partition (ESP)
  2. copy all the data from nvme0n1p4 to nvmeon1p1
  3. change the partition UUID for nvme0n1p1 to ensure it is correct for a fat32 file system.
  4. change the UUID for /boot/efi in /etc/fstab to mount the nvmeon1p1 at /boot/efi
  5. properly unmount the file system on nvme0n1p4 and mount the file system on /nvme0n1p1 at /boot/efi
  6. run grub2-mkconfig -o /boot/grub2/grub.cfg to ensure the system knows the new boot partition.
  7. reboot.

If this is all done properly then it may work.

The second choice is a little simpler.

  1. install gparted into the chroot environment.
  2. unmount /boot/efi (nvme0n1p4)
  3. Use gparted to shrink the size of nvme0n1p4 to ~500MB
  4. remove the marking of nvme0n1p1 as ESP and instead mark nvme0n1p4 as the system ESP.
  5. mount /boot/efi again.
  6. run grub2-mkconfig -o /boot/grub2/grub.cfg to update grub properly for booting.
  7. reboot.
    (At the end you will have close to 265 GB of free unallocated space on the drive.)

Okay here is lsblk-f.

NAME        FSTYPE   FSVER            LABEL                 UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
loop0       squashfs 4.0                                                                                        
loop1       ext4     1.0              Anaconda              8fe0120d-7a70-4e73-8185-f8521c2529e0                
├─live-rw   ext4     1.0              Anaconda              8fe0120d-7a70-4e73-8185-f8521c2529e0                
└─live-base ext4     1.0              Anaconda              8fe0120d-7a70-4e73-8185-f8521c2529e0                
└─live-rw   ext4     1.0              Anaconda              8fe0120d-7a70-4e73-8185-f8521c2529e0                
sda         iso9660  Joliet Extension Fedora-WS-Live-37-1-7 2022-11-05-10-15-31-00                              
├─sda1      iso9660  Joliet Extension Fedora-WS-Live-37-1-7 2022-11-05-10-15-31-00                              
├─sda2      vfat     FAT16            ANACONDA              7268-1544                                           
zram0                                                                                                           [SWAP]
├─nvme0n1p1 ntfs                                            0E74AE6D7CF86E42                                    
├─nvme0n1p2 ext4     1.0                                    98871ee5-1638-4cce-ad50-8668e8ddca31  625.4M    30% /boot
├─nvme0n1p3 btrfs                     fedora_localhost-live 2f90f992-e665-42ac-b8d0-0452f56c3413  135.5G    40% /home
│                                                                                                               /
└─nvme0n1p4 exfat    1.0                                    67ED-F63F                             247.2G     0% /boot/efi