1

I have three OSes installed on my PC currently: Windows 11 (nvme), Fedora 40 (sda), and Fedora 39 (sdb). I would like to configure Grub (installed on sda) to be able to boot all three OSes. It auto-detected Windows just fine, but it wouldn't detect the F39 install on sdb. I tried the following things to get this to work:

  • Copy the files in /boot/loader/entries from sdb to sda. Booting F39 with this configuration didn't work, as Grub couldn't find the files listed in the F39 entries, as they were on a different drive.
  • Copy the files in /boot/loader/entries AND the initrd and vmlinuz files from sdb to sda. Booting into F39 got past Grub this time, but it booted into emergency mode.
    • I'm not entirely sure how it happened, but, after booting into F40 an rebooting again, Grub failed to load either Fedora install (all installed kernels and the rescue image). Booting into a live environment, mounting the F40 boot partition (on sda), and removing the initrd and vmlinuz files copied from from F39 fixed this.

Because Fedora follows the new BFS spec (also discussed here on this Fedora changelog) instead of the older Grub2 menuentry spec, doing what I would like to do seems much harder. I would like to have all OSes under one unified boot loader, but I am not partial to Grub if a compelling alternative that does what I need it to do exists. I use F40 for the serious Linux stuff (development, testing, etc.) and F39 as a sandbox for whatever the heck I want (as well as the occasional drive cloning).

Maybe the best solution is to virtualize my sandbox... This computer certainly can run it without a hitch.

1 Answer 1

1

Note the Differences from BootLoaderSpec chapter in the Fedora change log you linked:

  • Only the device grub is loaded from is searched for config files.
  • The following keywords have not currently been implemented: multiboot, module, version, machine-id, filesystem, chainload, efi, devicetree. If encountered, they are ignored.

These will somewhat restrict what you can do with the BLS-style setup compared to a traditional one.

The files in /boot/loader/entries by default include the

options $kernelopts

line, which refers to a variable set in the grubenv file. By default, that variable includes the root= kernel boot parameter.

As a result, unless you have modified something, your F39 and F40 will both end up trying to use the same root filesystem. That might explain why F39 dropped into emergency mode.

If you want the F39 and F40 to use separate root filesystems, you would have to modify the BLS config files of one or the other OS to use a different options line, perhaps referring to a different GRUB environment variable or to not use a GRUB variable at all. Otherwise the use of the single $kernelopts variable defining a single root filesystem will become a point of conflict between the two distributions.

1
  • What’s weird is the root= variable is set to the correct drive UUIDs for each install by default, but the Grub installation on F40 won’t listen to it — or, if it is, it isn’t working correctly.
    – Noah R.
    Commented Jun 14 at 13:15

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .