Multiboot with various linux os: Tumbleweed is detected by os-prober but is not selectable at boot

Hi guys, so as per the title openSUSE Tumbleweed is detected by updating the grub from EOS, but then at startup it doesn’t appear as an option.

The main bootloader is the EOS one, but I installed a different version of the os-prober, namely os-prober-btrfs.

I also tried with the openSUSE bootloader, all the distros are detected and are selectable at startup but with EOS and Garuda it gives me the error that it can’t find the kernel/the path is the wrong one (something similar).

Garuda’s grub also detects openSUSE but it doesn’t let me select it at startup (the os-prober used is os-prober-garuda).

My grub file configuration is this:

Grub File cfg
> # GRUB boot loader configuration

GRUB_DEFAULT='0'
GRUB_TIMEOUT='20'
GRUB_DISTRIBUTOR='EndeavourOS'
GRUB_CMDLINE_LINUX_DEFAULT='nowatchdog nvme_load=YES loglevel=3'
GRUB_CMDLINE_LINUX=""
GRUB_TOP_LEVEL='/boot/vmlinuz-linux'

# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"

# Uncomment to enable booting from LUKS encrypted devices
#GRUB_ENABLE_CRYPTODISK=y

# Set to 'countdown' or 'hidden' to change timeout behavior,
# press ESC key to display menu.
GRUB_TIMEOUT_STYLE=menu

# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console

# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `videoinfo'
GRUB_GFXMODE=1920x1080

# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep

# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY='true'

Updating the grub gives me this:

Grub Update
>[sermor@sermor-eospc ~]$ sudo grub-mkconfig -o /boot/grub/grub.cfg
[sudo] password di sermor: 
Generating grub configuration file ...
Found theme: /home/sermor/Modelli/dark-eos-grub/theme.txt
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot:  initramfs-linux-fallback.img
Found linux image: /boot/vmlinuz-linux-zen
Found initrd image: /boot/initramfs-linux-zen.img
Found fallback initrd image(s) in /boot:  initramfs-linux-zen-fallback.img
Found linux image: /boot/vmlinuz-linux-xanmod-edge-linux-bin-x64v3
Found initrd image: /boot/initramfs-linux-xanmod-edge-linux-bin-x64v3.img
Found fallback initrd image(s) in /boot:  initramfs-linux-xanmod-edge-linux-bin-x64v3-fallback.img
Found linux image: /boot/vmlinuz-linux-rt-lts
Found initrd image: /boot/initramfs-linux-rt-lts.img
Found fallback initrd image(s) in /boot:  initramfs-linux-rt-lts-fallback.img
Found linux image: /boot/vmlinuz-linux-rt
Found initrd image: /boot/initramfs-linux-rt.img
Found fallback initrd image(s) in /boot:  initramfs-linux-rt-fallback.img
Found linux image: /boot/vmlinuz-linux-lts
Found initrd image: /boot/initramfs-linux-lts.img
Found fallback initrd image(s) in /boot:  initramfs-linux-lts-fallback.img
Found linux image: /boot/vmlinuz-linux-lqx
Found initrd image: /boot/initramfs-linux-lqx.img
Found fallback initrd image(s) in /boot:  initramfs-linux-lqx-fallback.img
Found linux image: /boot/vmlinuz-linux-hardened
Found initrd image: /boot/initramfs-linux-hardened.img
Found fallback initrd image(s) in /boot:  initramfs-linux-hardened-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.
Found Windows Boot Manager on /dev/nvme0n1p1@/efi/Microsoft/Boot/bootmgfw.efi
Found openSUSE Tumbleweed-Slowroll on /dev/nvme1n1p2
Found Garuda Linux on /dev/sdb2
Found Linux Mint 22 Wilma (22) on /dev/sdd2
Found Windows Boot Manager on /dev/sdf1@/efi/Microsoft/Boot/bootmgfw.efi
Found MakuluLinux Shift Beta-2 (Beta-2) on /dev/sdf2
Adding boot menu entry for UEFI Firmware Settings ...
Detecting snapshots ...
Found snapshot: 2024-10-14 12:14:39 | timeshift-btrfs/snapshots/2024-10-14_12-14-39/@ | ondemand | N/A |
Found 1 snapshot(s)
Unmount /tmp/grub-btrfs.t8hCR8qJ7N .. Success
done
[sermor@sermor-eospc ~]$

And this is the situation at reboot:

Reboot menù

If it can be solved, is there a simple way to do it (i.e. to be able to select opensuse at startup)?

Hmmm…why do you have (3) entries for Windows Boot Manager, (2) of which are using the same partition? What does

sudo awk -F[\'\'|\"\"] '/^menuentry/ {print $2}' /boot/grub/grub.cfg

return?

My command fails, here’s what it tells me:

[sermor@sermor-eospc ~]$ sudo awk -F[''|""] ‘/^menuentry/ {print $2}’ /boot/grub/grub.cfg
bash: “”]: comando non trovato
awk: fatale: invalid regexp: [, [^, [:, [. o [= non chiusa: /[‘’/

Oh, another thing, arch-based distros regardless of the file system (ext4, btfrs etc.) are detected and can be selected without problems.

Other distros are detected and can be selected only if they have the ext4 file system, such as openSUSE. If I were to reinstall it in ext4, I could also select it at startup. But in the current case it is in btrfs.

Other distros like debian instead, are detected and can be booted even with fs in btfrs.

My not so trustworthy vision sees two entries in different partitions :open_mouth:
The command is not escaped properly. In my (bash) terminal, this works without errors:

sudo awk -F"[''|\"\"]" '/menuentry / {print $2}' /boot/grub/grub.cfg

grub had not been detecting btrfs Linux OSes for a long time, so many distros have been using a modified grub. I am not sure what the latest grub (which is used by archlinux) does with btrfs, but I guess your issue depends on which grub is used on boot.

Maybe you need to grub-install again (or not).

It might be helpful if we could see your EnOS /boot/grub/grub.cfg contents.
You may want to compare grub.cfg on EnOS vs. OpenSuse (or other Linux OSes), looking how menu entries are defining drive/partition addresses.

Here, now it worked and the result is this:

> [sermor@sermor-eospc ~]$ sudo awk -F"[''|\"\"]" '/menuentry / {print $2}' /boot/grub/grub.cfg
[sudo] password di sermor: 
ùùEndeavourOS Linux
EndeavourOS Linux, with Linux linux
EndeavourOS Linux, with Linux linux (fallback initramfs)
EndeavourOS Linux, with Linux linux-zen
EndeavourOS Linux, with Linux linux-zen (fallback initramfs)
EndeavourOS Linux, with Linux linux-xanmod-edge-linux-bin-x64v3
EndeavourOS Linux, with Linux linux-xanmod-edge-linux-bin-x64v3 (fallback initramfs)
EndeavourOS Linux, with Linux linux-rt-lts
EndeavourOS Linux, with Linux linux-rt-lts (fallback initramfs)
EndeavourOS Linux, with Linux linux-rt
EndeavourOS Linux, with Linux linux-rt (fallback initramfs)
EndeavourOS Linux, with Linux linux-lts
EndeavourOS Linux, with Linux linux-lts (fallback initramfs)
EndeavourOS Linux, with Linux linux-lqx
EndeavourOS Linux, with Linux linux-lqx (fallback initramfs)
EndeavourOS Linux, with Linux linux-hardened
EndeavourOS Linux, with Linux linux-hardened (fallback initramfs)
Windows Boot Manager (on /dev/nvme0n1p1)
Garuda Linux (on /dev/sdb2)
Garuda Linux (on /dev/sdb2)
Garuda Linux, with Linux linux-zen (on /dev/sdb2)
Garuda Linux, with Linux linux-zen (fallback initramfs) (on /dev/sdb2)
Garuda Linux, with Linux linux-zen (recovery mode) (on /dev/sdb2)
Garuda Linux, with Linux linux-xanmod (on /dev/sdb2)
Garuda Linux, with Linux linux-xanmod (fallback initramfs) (on /dev/sdb2)
Garuda Linux, with Linux linux-xanmod (recovery mode) (on /dev/sdb2)
Garuda Linux, with Linux linux-mainline (on /dev/sdb2)
Garuda Linux, with Linux linux-mainline (fallback initramfs) (on /dev/sdb2)
Garuda Linux, with Linux linux-mainline (recovery mode) (on /dev/sdb2)
Garuda Linux, with Linux linux-lts (on /dev/sdb2)
Garuda Linux, with Linux linux-lts (fallback initramfs) (on /dev/sdb2)
Garuda Linux, with Linux linux-lts (recovery mode) (on /dev/sdb2)
Garuda Linux, with Linux linux-hardened (on /dev/sdb2)
Garuda Linux, with Linux linux-hardened (fallback initramfs) (on /dev/sdb2)
Garuda Linux, with Linux linux-hardened (recovery mode) (on /dev/sdb2)
Garuda Linux, with Linux linux-cachyos-bore (on /dev/sdb2)
Garuda Linux, with Linux linux-cachyos-bore (fallback initramfs) (on /dev/sdb2)
Garuda Linux, with Linux linux-cachyos-bore (recovery mode) (on /dev/sdb2)
Garuda Linux, with Linux linux-amd-znver3 (on /dev/sdb2)
Garuda Linux, with Linux linux-amd-znver3 (fallback initramfs) (on /dev/sdb2)
Garuda Linux, with Linux linux-amd-znver3 (recovery mode) (on /dev/sdb2)
Memory Tester (memtest86+) (on /dev/sdb2)
Linux Mint 22 Wilma (22) (on /dev/sdd2)
Linux Mint 22 Cinnamon (on /dev/sdd2)
Linux Mint 22 Cinnamon, with Linux 6.11.3-3-liquorix-amd64 (on /dev/sdd2)
Linux Mint 22 Cinnamon, with Linux 6.11.3-3-liquorix-amd64 (recovery mode) (on /dev/sdd2)
Linux Mint 22 Cinnamon, with Linux 6.8.0-45-generic (on /dev/sdd2)
Linux Mint 22 Cinnamon, with Linux 6.8.0-45-generic (recovery mode) (on /dev/sdd2)
Linux Mint 22 Cinnamon, with Linux 6.8.0-38-generic (on /dev/sdd2)
Linux Mint 22 Cinnamon, with Linux 6.8.0-38-generic (recovery mode) (on /dev/sdd2)
Windows Boot Manager (on /dev/sdf1)
MakuluLinux Shift Beta-2 (Beta-2) (on /dev/sdf2)
MakuluLinux GNU/Linux (on /dev/sdf2)
MakuluLinux GNU/Linux, with Linux 5.15.0-105-generic (on /dev/sdf2)
MakuluLinux GNU/Linux, with Linux 5.15.0-105-generic (recovery mode) (on /dev/sdf2)
UEFI Firmware Settings
Windows Boot Manager (on /dev/nvme0n1p1)
[sermor@sermor-eospc ~]$

If I install opensuse with the file system in ext4 it detects it and it is also selectable. Not all os with the fs in btfrs are added completely.

Debian and some derivatives yes, from what I have seen, other distros like in this case no. Personally I could not say the reason for this, but I imagine that someone more expert than me can trace why this happens.

Tumbleweed’s grub detects all the distros, but EOS and Garuda won’t load them because it can’t find the correct address.

I have just explained the why in my previous post.
The question is what do you want to do now?, so that you get relevant advice :man_shrugging: .

If you want to use EnOS bootloader to boot OpenSuse, I suggest you ask at OpenSuse support for info. As explained, distros usually customize their bootloaders code, but I wouldn’t care to get educated more. Archlinux and derivatives fulfil my needs (and fill up my spare time) :smile: .

By experience, I always recommend multi-boot users, especially those experimenting/distro-hopping, to use UEFI boot menu for each OS, using that OS’s native bootloader. It is the easiest and more trusted method.

Thanks. I think I’ll install some other distro instead of tumbleweed. After all, I prefer to complicate my life by having a bootloader from a distro (be it grub or something else, but personally I’m only a little familiar with grub) start all the others, rather than starting them manually from the bios. XD

Another option is to use /etc/grub.d/40_custom to setup chain-loading of other distros’ GRUB, similar to how Windows Boot Loader is chain-loaded. I made an answer here to that question - https://unix.stackexchange.com/questions/660393/how-can-i-chain-load-grub-from-systemd-boot. It’s specific to systemd-boot, but the concept is the same.

Obviously this will take more manual work in the beginning. But once done, your new distro entries will always be there, and changes to a distro’s boot specifications (openSUSE is switching to BLSCFG soon, like what Fedora has now) will not affect your GRUB menu.

In a nutshell, this does exactly what @petsam suggests, just within your GRUB menu.

1 Like