Fedora is not discovered by foreign Grub

Hello, I’m a long-time Linux user, first time Fedora user (well apart from that time like 10 years ago when I tried it shortly)!
I’ve installed Fedora alongside Manjaro on my pc without installing the bootloader.

I did that like so in Anaconda:

To decline installation of a new boot loader, select the device currently marked for boot and click the Do not install bootloader button. This will remove the tick and ensure GRUB2 is not installed on any device.

Why not install the bootloader: Doing so would hand control of Grub to Fedora and, crucially, install the Fedora version of it. Standard Grub is unable to boot Manjaro, which therefore comes with a tweaked implementation of Grub, so keeping that one is necessary to dual boot anything with Manjaro.
The installation was successful, Fedora is now on my system, but I can’t boot it.
I proceeded to update Grub from inside Manjaro, but the grub-update mechanism seems to not detect Fedora on the disk. Do you know any reason why that could be the case?

Here’s partition information of my drive:

 sudo parted -l                                                                                       ✔ 
Model: ATA CT2000MX500SSD1 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system     Name  Flags
 1      2097kB  317MB   315MB   fat32                 boot, esp
 2      317MB   1669GB  1669GB  ext4
 3      1669GB  1677GB  8590MB  linux-swap(v1)        swap, legacy_boot
 4      1677GB  2000GB  323GB   btrfs

Fedora is on the btrfs partition (no4).

1 Like

This sounds like you probably need to run os-prober or whatever the Manjaro equivalent is to regenerate the boot config from the Manjaro side.

Thank you. I ran this under Manjaro (btw I also started a thread in MNJ forum, and some seem to think I should ask here instead - oh, well…):

sudo grub-mkconfig -o /boot/grub/grub.cfg                                                            ✔ 
Generating grub configuration file ...
Found theme: /usr/share/grub/themes/manjaro/theme.txt
Found linux image: /boot/vmlinuz-5.15-x86_64
Found initrd image: /boot/intel-ucode.img /boot/initramfs-5.15-x86_64.img
Found initrd fallback image: /boot/initramfs-5.15-x86_64-fallback.img
Found linux image: /boot/vmlinuz-5.10-x86_64
Found initrd image: /boot/intel-ucode.img /boot/initramfs-5.10-x86_64.img
Found initrd fallback image: /boot/initramfs-5.10-x86_64-fallback.img
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Adding boot menu entry for UEFI Firmware Settings ...
Found memtest86+ image: /boot/memtest86+/memtest.bin
done

I believe os-prober was executed here, yes? For some reason, it seems not to find Fedora.

Hmmm.
Manjaro grub is tweaked and cannot boot fedora, and you say that fedora cannot boot manjaro. This seems almost a catch-22. Since you did not install fedora grub you have no clue if it actually can boot manjaro.

However, it is necessary that fedora have an ext4 partition for /boot. Grub (of any flavor) cannot read a btrfs partition. I see no partition where fedora could store the boot images that are mandatory for booting.

To boot fedora in efi mode it needs an efi partition and boot loader. Since you prevented loading grub to the efi partition you did not get the part needed to boot.

I would

  1. look in the efi partition and see what the directory structure is. On fedora that is usually mounted at /boot/efi and contains EFI/fedora. I suspect it is similar for manjaro but with a different name.
  2. reinstall fedora, wiping out the current btrfs partition then do an automatic install which will create the /boot partition as ext4, use the existing efi partition as /boot/efi, and create a btrfs partition for the / and /home subvolumes.

I really believe that it will then be able to boot, and will give you a menu entry in grub to boot manjaro.

2 Likes

I made a post explaining how to chainload Fedora from Manjaro which should hopefully solve this problem.

https://discussion.fedoraproject.org/t/how-to-multiboot-fedora-using-existing-grub2-bootloader/68352/4?u=thegooselord

2 Likes

Typically the Manjaro bootloader can boot any other Linux distro (because they normally use a standard implementation of Grub). Are you saying that’s not the case for Fedora? Is Fedora’s bootloader also tweaked (but different from Manjaro’s)?

The /boot/efi partition on my system is fat32, which thus far I believed was the only possible file format for a boot partition :hushed:

Well, both are there already…

Is this the information I’m looking for?

[catull-mnj /]# cd /boot/efi
[catull-mnj efi]# ls
EFI
[catull-mnj efi]# cd EFI
[catull-mnj EFI]# ls
boot  Manjaro
[catull-mnj EFI]# 

That is exactly what I would expect since you did not load grub from fedora. If you had you would also see

# ls /boot/efi/EFI
Boot  fedora
2 Likes

I’m sorry to report this did not go well. I have a bootable install of Fedora now, but made Manjaro unbootable in the process. This makes sense because I did delete the /boot/efi partition that was created by Manjaro and installed the Fedora one - at least I think that’s what the installer ended up doing. I gotta say, Anaconda wasn’t being friendly to me, I don’t understand its behavior.

Anyways, when I try to boot Manjaro from the Fedora boot menu, it just goes to a backlit black screen forever until I power down the computer. When I boot Manjaro in fallback mode, this happens:


This means I can’t complete point 4. of this list:

Any ideas?

Just one quick question with a very important answer.

When you installed fedora did you tell it to format the esp partition? or did you allow it to find and automatically use it without formatting?

If the content of /boot/efi/EFI now has only Boot and fedora then you formatted it. If it contains Boot, boot, Manjaro, & fedora then you did not format it.

If it was not formatted then the UUID will be the same as it was before the fedora install. If it was re-formatted then it will have a new UUID.

The gist of the story is that if you did not format the efi (esp) partition then you should be able to boot with steps 3 & 4 in that list. If you did format it then you wiped out the manjaro boot loader and will not be able to boot manjaro. In that case you will have to do another install of manjaro to recover the boot process, but do not format the efi partition during the install.

3 Likes

As far as I can tell, the black screen is to be expected, since Manjaro can only be booted by Manjaro’s grub. In this case, though, it seems like Manjaro is using its existing configuration which refers to a partition that no longer exists (because you deleted it), hence the the device ... not found.

You’ll need to restore Manjaro’s grub (or you can fully reinstall Manjaro). Use Manjaro live and follow a guide like this, or see the wiki page. After that you should be able to do step 3 onward.

1 Like

Here it is:

[ben@fedora ~]$ sudo ls /boot/efi/EFI
BOOT  fedora

So yeah, formatted it I guess.
However, I think Anaconda actually provided no option to do that any other way. It wasn’t possible to assign the installation to the existing boot partition. When I tried, it just kept insisting that I hadn’t done that yet and wouldn’t proceed to the installation.

If there was a way I could have done it though (install Fedora leaving the existing boot partition in place), I’d like to know what it was. Your instructions said to just leave all the defaults in place.

Here is what the partition table now looks like:

[ben@fedora ~]$ sudo parted -l
Model: ATA CT2000MX500SSD1 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system     Name                  Flags
 1      1049kB  316MB   315MB   fat16           EFI System Partition  boot, esp
 2      317MB   1669GB  1669GB  ext4
 3      1669GB  1677GB  8590MB  linux-swap(v1)                        swap, legacy_boot
 4      1677GB  2000GB  323GB   btrfs


Model: VendorCo ProductCode (scsi)
Disk /dev/sdb: 8053MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  8053MB  8052MB  primary  fat32        boot, lba

This brings me to another point that may have gone wrong:

  1. Reboot into UEFI settings and put Manjaro at the top of the boot order.

#1 is just a flash that I forgot to remove, there’s really only two Fedora options.

In the current Grub menu, the two Fedora options are still at the top.

Completely reinstalling Manajaro will be last resort, I’d rather try anything else first - so will follow the Wiki page for restoring the bootloader now.

1 Like

I think what I would do in this case is not have Manjaro and Fedora share the same grub. Since Fedora seems to play better with users in general, I would install Fedora first and let Fedora manage the main grub/efi and then install Manjaro using a separate /boot partition and not touching efi, and then let Fedora detect and chainload the Manjaro grub partition. That way there’s no worry about one distro inadvertently breaking the other’s grub since it seems Manjaro depends on some custom hacks.

Yeah that’s the plan, see

Other way round in this instance (Manjaro loading Fedora grub), but the same concept. There shouldn’t be a need for seperate EFI partitions though, if that’s what you mean by

Wouldn’t Fedora just continue to configure grub to try to boot Manjaro directly? The end result is the same anyway so it doesn’t really matter how you go about doing it.

1 Like

Sorry, I should have been clearer there; you should install Fedora with ‘Storage Configuration’ set to ‘Automatic’, this should put the bootloader on the existing EFI partition without recreating it.

At the moment, you don’t have a separate boot partition for Fedora (#4). You don’t necessarily need a separate /boot but Anaconda creates one when you use automatic partitioning. You can install again in this way if you want but you should be fine continuing as is.

So I finally fixed my issue booting Manjaro, it works again. Now the repaired Grub is still missing that entry for Fedora.
@thegooselord, your instructions says to enter this in /etc/grub.d/40_custom:

menuentry "Fedora Workstation Live 36 Beta" {
    insmod part_gpt

    set root='hd0,gpt1'
    chainloader /EFI/fedora/grubx64.efi
}

Will this also work for my scenario, or do I e.g. need to replace set root='hd0,gpt1' with something else?

1 Like

It’s generally better to use uuid instead of hdX since drive number can potentially change. blkid command can be used to find the right UUID to use instead. So, try set root="UUID=<replace with uuid from blkid command>"

1 Like

Doesn’t grub require the ‘hd0,gpt1’ syntax ? since it has not yet gotten to the kernel and must know which physical device & partition to access from the bios level? The UUID or /dev/sdX syntax becomes usable once the kernel starts loading things, thus the use of the UUID in the kernel command line.

Would it be possible to use LABEL?

Grub can use UUID and it’s genreally safer to do so. Fedora actually attempts to do this by default as well:

/etc/grub.d/10_linux:

if ( [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] ) \
    || ( [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
        && [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ] ) \
    || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
        && ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \
    || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then
  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
elif [ "x${GRUB_DEVICE_UUID}" = "x" ] \
    || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]; then
  LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID}
else
  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi

(This is used later to set root= in the menu entries.)

1 Like

Okay, /etc/grub.d/40_custom in Manjaro now looks like this:

menuentry "Fedora Workstation 35" {
    insmod part_gpt

    set root="UUID=ae065b6d-d345-4ac6-8b5d-460ab4f2e7b7"
    chainloader /EFI/fedora/grubx64.efi
}

That UUID is for the Fedora partition /dev/sda4.
The Grub menu now has an entry for Fedora, but it doesn’t boot - there’s a message saying something like: “No server provided”

EDIT: I also tried the UUID EC5E-9DE5 of /dev/sda1 which is the boot partition, but same result.

I wonder if the syntax is good:
set root="UUID=ae065b6d-d345-4ac6-8b5d-460ab4f2e7b7"
or
set root=UUID="ae065b6d-d345-4ac6-8b5d-460ab4f2e7b7"?
also, double quotes or single ones?