How to dual boot EndeavorOS and openSUSE

Hi people!
I have a read a lot of topics here on dual booting, but most handles Linux and Windows.
I use UEFI and my EndeavorOS is installed on /dev/sdc2 and my EFI partition is /dev/sdc1. openSUSE is installed on /dev/sda1 and uses the same EFI partition but I have trouble to get grub to find openSUSE. The command sudo grub2-mkconfig -o /boot/grub/grub.cfg does only show:

Generating grub configuration file ...
Found theme: /boot/grub/themes/EndeavourOS/theme.txt
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/intel-ucode.img /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
done

The command efibootmgr shows:

BootCurrent: 0005
Timeout: 0 seconds
BootOrder: 0005,0003,0004,0000,0002,0001
Boot0000* EndeavourOS
Boot0001* Hard Drive 
Boot0002* UEFI OS
Boot0003* opensuse
Boot0004* grub
Boot0005* EndevourOS-grub

I now I have no clue what to do. I can change boot order in BIOS to boot into openSUSE but that’s a hassle. Anyone got any idea how to fix this?
Thanks in Advance,
Isak

First of all, install and try to run os-prober.
sudo pacman -S os-prober
sudo os-prober

Do you happen to have them installed with the btrfs filesystem?

1 Like

That returns nothing.

Yeah, all filesystems are formatted btrfs.

Courtesy of @manuel

isak@motherbrain /t/os-prober (master)> sudo os-prober                       
/dev/sda1:openSUSE Tumbleweed:openSUSE:linux:btrfs:UUID=b745a10a-0cd4-4dcc-b203-c3c9c6619e2f:subvol=@/.snapshots/1/snapshot
1 Like

Looks good! Now you can re-generate the grub.cfg file and you should get the the boot entry on the Grub menu.

isak@motherbrain /t/os-prober (master)>                                      sudo grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found theme: /boot/grub/themes/EndeavourOS/theme.txt
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/intel-ucode.img /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
Found openSUSE Tumbleweed on /dev/sda1
done

This is looking interesting! I am going to reboot. Brb.

1 Like

Sorry to say, I did not work. Only EndeavorOS is showing in grub-menu. :roll_eyes:

That’s odd! It did work out in my setup. Now a triple boot all installed on btrfs. Perhaps @manuel might have some ideas.

Maybe try again generate grub.cfg after you now have rebooted?
If that doesn’t help, can you show the generated grub.cfg?

# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
insmod part_gpt
insmod part_msdos
if [ -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="0"
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
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_gpt
insmod btrfs
set root='hd2,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt2' --hint-bios=hd2,gpt2 --hint-efi=hd2,gpt2 --hint-baremetal=ahci2,gpt2  c89a7a41-6950-4f22-8dd0-09421657a3d8
else
  search --no-floppy --fs-uuid --set=root c89a7a41-6950-4f22-8dd0-09421657a3d8
fi
    font="/@/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_GB
  insmod gettext
fi
terminal_input console
terminal_output gfxterm
insmod part_gpt
insmod btrfs
set root='hd2,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt2' --hint-bios=hd2,gpt2 --hint-efi=hd2,gpt2 --hint-baremetal=ahci2,gpt2  c89a7a41-6950-4f22-8dd0-09421657a3d8
else
  search --no-floppy --fs-uuid --set=root c89a7a41-6950-4f22-8dd0-09421657a3d8
fi
insmod gfxmenu
loadfont ($root)/@/boot/grub/themes/EndeavourOS/unifont-regular-16.pf2
insmod png
set theme=($root)/@/boot/grub/themes/EndeavourOS/theme.txt
export theme
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/10_linux ###
menuentry 'EndeavourOS, on linux' --class endeavouros --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-c89a7a41-6950-4f22-8dd0-09421657a3d8' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod btrfs
        set root='hd2,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt2' --hint-bios=hd2,gpt2 --hint-efi=hd2,gpt2 --hint-baremetal=ahci2,gpt2  c89a7a41-6950-4f22-8dd0-09421657a3d8
        else
          search --no-floppy --fs-uuid --set=root c89a7a41-6950-4f22-8dd0-09421657a3d8
        fi
        echo    'Loading kernel linux ...'
        linux   /@/boot/vmlinuz-linux root=UUID=c89a7a41-6950-4f22-8dd0-09421657a3d8 rw rootflags=subvol=@  loglevel=3 nowatchdog
        echo    'Loading initial ramdisk ...'
        initrd  /@/boot/intel-ucode.img /@/boot/initramfs-linux.img
}
menuentry 'EndeavourOS, on linux (fallback initramfs)' --class endeavouros --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-c89a7a41-6950-4f22-8dd0-09421657a3d8' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod btrfs
        set root='hd2,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt2' --hint-bios=hd2,gpt2 --hint-efi=hd2,gpt2 --hint-baremetal=ahci2,gpt2  c89a7a41-6950-4f22-8dd0-09421657a3d8
        else
          search --no-floppy --fs-uuid --set=root c89a7a41-6950-4f22-8dd0-09421657a3d8
        fi
        echo    'Loading kernel linux ...'
        linux   /@/boot/vmlinuz-linux root=UUID=c89a7a41-6950-4f22-8dd0-09421657a3d8 rw rootflags=subvol=@  loglevel=3 nowatchdog
        echo    'Loading initial ramdisk ...'
        initrd  /@/boot/initramfs-linux-fallback.img
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###

### END /etc/grub.d/30_os-prober ###

### 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 ###

There’s no change after another grub-mkconfig.

Strange that it doesn’t generate anything about openSUSE even though os-prober shows it exists. Is the os-prober showing the correct UUID for it? Try command lsblk -fm.

Here’s a workaround idea (that may or may not help):

  • You can copy a menuentry from openSUSE’s grub.cfg into EndeavourOS file /boot/grub/custom.cfg. It will show itself as a new menu entry at boot time.

If you do that, could you show the contents here?

Thanks for your reply!

NAME FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINT   SIZE OWNER GROUP MODE
sda                                                                                    232,9G root  disk  brw-rw----
└─sda1
     btrfs        ROOT  b745a10a-0cd4-4dcc-b203-c3c9c6619e2f                           232,9G root  disk  brw-rw----
sdb                                                                                      1,8T root  disk  brw-rw----
└─sdb1
     btrfs        DATA  b05bbb9f-b41c-4b60-9644-bfdc9c4a7b53  712,4G    62% /data        1,8T root  disk  brw-rw----
sdc                                                                                    238,5G root  disk  brw-rw----
├─sdc1
│    vfat   FAT32 EFI   C747-4A78                             509,3M     0% /boot/efi    512M root  disk  brw-rw----
└─sdc2
     btrfs              c89a7a41-6950-4f22-8dd0-09421657a3d8    160G    33% /            238G root  disk  brw-rw----
sdd                                                                                    931,5G root  disk  brw-rw----
└─sdd1
     ext4   1.0   HOME  7c210038-7ebf-4aed-a254-c3947cd2452f  546,5G    35% /home      931,5G root  disk  brw-rw----
sde                                                                                    232,9G root  disk  brw-rw----
├─sde1
│    swap   1     SWAP  8e32bb00-a3fd-4701-9d99-b1d57165fa24                            15,6G root  disk  brw-rw----
└─sde2
     btrfs        OPT   3c8217cb-d1f1-4771-9f9f-4be59940ac38  214,6G     0% /opt       217,3G root  disk  brw-rw----
isak@motherbrain ~>

This is the grub.cfg from openSUSE:

### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE Tumbleweed'  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b745a10a-0cd4-4dcc-b203-c3c9c6619e2f' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod btrfs
        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  b745a10a-0cd4-4dcc-b203-c3c9c6619e2f
        else
          search --no-floppy --fs-uuid --set=root b745a10a-0cd4-4dcc-b203-c3c9c6619e2f
        fi
        echo    'Loading Linux 5.8.7-1-default ...'
        linuxefi /boot/vmlinuz-5.8.7-1-default root=UUID=b745a10a-0cd4-4dcc-b203-c3c9c6619e2f  ${extra_cmdline} splash=silent resume=/dev/disk/by-uuid/8e32bb00-a3fd-4701-9d99-b1d57165fa24 mitigations=auto quiet
        echo    'Loading initial ramdisk ...'
        initrdefi       /boot/initrd-5.8.7-1-default
}

What do you think?

First I must say I don’t have any knowledge about brtfs filesystems :blush:

If the distributions are on different disks, maybe you could mount that other disk with SUSE on it in the filemanager of EndeavourOS and once mounted then generate your grub.cfg file through EndeavourOS.

That contents can be written to /boot/grub/custon.cfg in EndeavourOS.
Assuming EndeavourOS is in control of booting, now you should see openSUSE Tumbleweed in the boot menu too.

EDIT: the openSUSE grub.cfg looks a bit strange for a btrfs system. Is this the latest available grub.cfg in openSUSE?

I’ll try that.

Why strange?
This is just the part where it boots openSUSE, if I change the boot order in bios the grub for openSUSE works just fine (only for openSUSE, does not boot Endeavor).

Would you like to see the whole file?