Dual boot with BSD (TrueOS) possible?

Hi!

Have an old 64bit Xeon with a 1TB HDD, installed recent TrusOS (based on BSD) and subsequently on the same HDD a 42.1 with KDE. TrueOS is installed with GRUB, 42.1 did not detect and installed GRUB2 (boot from / I chose). First boot of 42.1 only Leap in GRUB menu…

Did restore the TrueOS bootloader booting from install DVD, now the 42.1 install is no longer reachable.

Is it possible to mix BSD and openSuse on one HDD and get both to boot from GRUB?

Which grub? You have two of them.

Anyway, it is always possible to chainload another bootblock. Install bootblock of one OS in MBR, bootblock of another OS in partition and configure the former to chainload the latter. I can explain how to do it with GRUB2; but it was too long ago I had to do anything with GRUB legacy, so hopefully someone can chime in.

Does TrusOS grub support BTRFS? If not you will need to use the grub in openSUSE to control boot. Or use ext4 in openSUSE. This all assumes a MBR boot and not a EFI boot

Hi again!

Which GRUB? Basically I would not care WHICH, as long as it works. :wink:

I never use BTRFS with Suse, I tried it on 2-3 machines last year, was a nightmare (more than once no space left, no boot, had to remove older images to get machines to reboot), always install to EXT4… :slight_smile:

Yeah, no EFI, old machine only MBR.

I installed a Tumbleweed on the same machine in the meantime with GRUB2 in MBR, now I see TW and 42.1 on boot. Any idea how to add TrueOS now?

Bootloader in YaST did not do the trick, does not recognize the BSD installation, even with “Probe foreign OS” checked.

Many thanks in advance!

PS: slightly OT: Is it possible to share the /home partition (EXT4) for 42.1 and TW?

The first step is to install TrueOS bootblock somewhere else, in partition. Then edit /boot/grub2/custom.cfg in TW and add something like

menuentry TrueOS {
  set root=hd0,1
  chainloader +1
}

assuming you have single disk sda and TrueOS bootblock is installed on /dev/sda1. Adjust partition number as appropriate. If you have multiple disks situation is more complicated, but still manageable.

Open bug report so it can be added. If you can attach patch to os-prober it would be even better (writing it requires access to your OS anyway, so it will save much time and roundtrips on bugzilla).

… I never opened a bug (no account, nothing), dunno how to write a patch, I’m a dumb user!

I don’t even get my TW to switch off the display of my laptop for longer than 2-3 seconds. >:)

Any solution on a more basic level? :wink:

Added the lines to grub.conf, see a TrueOS entry on boot, but get

error: invalid signature

when choosing TrueOS to boot. Maybe some details needed on the type of OS to be booted?

In remove the lines you hanged then in Yast -bootloader check scan for foreign OS box. This should then add TrusOS to grub menu. If it does not then

  1. TrusOS is using some odd file system that openSUSE does not understand
  2. openSUSE can not find the TrusOS kernel which is named???

This means the first block of the first partition of the first disk is not bootblock. Well, you neither said that you actually installed TrueOS bootblock in that place, nor did you even say where your TrueOS is installed. So I can only give you example and expect you to apply common sense to adapt it to your configuration. I never expected nor implied it will work verbatim.

In TW Partitioner there is an entry on sda1 called

1MiB BIOS Grub

the next partition is the root for TrueOS, then swap for TrueOS, then 42.1 partitions, then TW, so I thought hd0,1 would be correct :slight_smile:

I found this here:

https://unix.stackexchange.com/questions/859/how-do-i-add-pc-bsd-freebsd-to-grub-2-boot-loader

Gave me other errors (“Could not find kfreebsd” and “Could not find
kfreebsd_loadenv”).

PS: In BSD the file system is normally ZFS.

So people can avoid guessing (despite all you posted, for example we still don’t know the method your disks are identified)

Post the results of the following

fdisk -l

It sounds like you may have become familiar with how to edit your grub entry (or you’re using YAST), so that info may not be necessary at this time…

TSU

…here we go:

# fdisk -l
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: DB3060DD-A9C7-11E5-AD66-000F1F90AE58

Device         Start       End   Sectors   Size Type
/dev/sda1         40      2087      2048     1M BIOS boot
/dev/sda2       2088 306706471 306704384 146.3G FreeBSD ZFS
/dev/sda3  306706472 315095079   8388608     4G FreeBSD swap
/dev/sda4  315097088 315115519     18432     9M BIOS boot
/dev/sda5  315115520 319324159   4208640     2G Microsoft basic data
/dev/sda6  319324160 361269247  41945088    20G Microsoft basic data
/dev/sda7  361269248 570982399 209713152   100G Microsoft basic data
/dev/sda8  570982400 571015167     32768    16M BIOS boot
/dev/sda9  571015168 612960255  41945088    20G Linux filesystem
/dev/sda10 612960256 822673407 209713152   100G Linux filesystem


And the grub.cfg:

#
# DO NOT EDIT THIS FILE
#
# 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 ###
if  -f ${config_directory}/grubenv ]; then
  load_env -f ${config_directory}/grubenv
elif  -s $prefix/grubenv ]; then
  load_env
fi

if  "${env_block}" ] ; then
  load_env -f "${env_block}"
fi

if  "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   if  "${env_block}" ] ; then
     save_env -f "${env_block}" next_entry
   fi
   set boot_once=true
else
   set default="${saved_entry}"
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 ext2
set root='hd0,gpt9'
if  x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
else
  search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
fi
    font="/usr/share/grub2/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_output gfxterm
insmod part_gpt
insmod ext2
set root='hd0,gpt9'
if  x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
else
  search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
fi
insmod gfxmenu
loadfont ($root)/boot/grub2/themes/openSUSE/ascii.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans10.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans12.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans-Bold14.pf2
insmod png
set theme=($root)/boot/grub2/themes/openSUSE/theme.txt
export theme
if  x${boot_once} = xtrue ]; then
  set timeout=0
elif  x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=8
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=8
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/00_tuned ###
set tuned_params=""
### END /etc/grub.d/00_tuned ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE Tumbleweed '  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt9'
    if  x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
    else
      search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
    fi
    echo    'Loading Linux 4.7.5-1-default ...'
    linux    /boot/vmlinuz-4.7.5-1-default root=UUID=70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0  resume=/dev/disk/by-uuid/b15145d8-ca83-4d11-b802-feec4846085c splash=silent quiet showopts
    echo    'Loading initial ramdisk ...'
    initrd    /boot/initrd-4.7.5-1-default
}
submenu 'Advanced options for openSUSE Tumbleweed ' --hotkey=1 $menuentry_id_option 'gnulinux-advanced-70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0' {
    menuentry 'openSUSE Tumbleweed , with Linux 4.7.5-1-default' --hotkey=2 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.7.5-1-default-advanced-70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt9'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
        else
          search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
        fi
        echo    'Loading Linux 4.7.5-1-default ...'
        linux    /boot/vmlinuz-4.7.5-1-default root=UUID=70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0  resume=/dev/disk/by-uuid/b15145d8-ca83-4d11-b802-feec4846085c splash=silent quiet showopts
        echo    'Loading initial ramdisk ...'
        initrd    /boot/initrd-4.7.5-1-default
    }
    menuentry 'openSUSE Tumbleweed , with Linux 4.7.5-1-default (recovery mode)' --hotkey=3 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.7.5-1-default-recovery-70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt9'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
        else
          search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
        fi
        echo    'Loading Linux 4.7.5-1-default ...'
        linux    /boot/vmlinuz-4.7.5-1-default root=UUID=70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0  
        echo    'Loading initial ramdisk ...'
        initrd    /boot/initrd-4.7.5-1-default
    }
}

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

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

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

### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'openSUSE 42.1 (x86_64) (on /dev/sda6)' --class suse --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt6'
    if  x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'  bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
    else
      search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
    fi
    linux /boot/vmlinuz-4.1.31-30-default root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca resume=/dev/sda5 splash=silent quiet showopts
    initrd /boot/initrd-4.1.31-30-default
}
submenu 'Advanced options for openSUSE 42.1 (x86_64) (on /dev/sda6)' $menuentry_id_option 'osprober-gnulinux-advanced-bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
    menuentry 'openSUSE Leap 42.1 (on /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.1.31-30-default--bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt6'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'  bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        else
          search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        fi
        linux /boot/vmlinuz-4.1.31-30-default root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca resume=/dev/sda5 splash=silent quiet showopts
        initrd /boot/initrd-4.1.31-30-default
    }
    menuentry 'openSUSE Leap 42.1, with Linux 4.1.31-30-default (on /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.1.31-30-default--bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt6'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'  bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        else
          search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        fi
        linux /boot/vmlinuz-4.1.31-30-default root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca resume=/dev/sda5 splash=silent quiet showopts
        initrd /boot/initrd-4.1.31-30-default
    }
    menuentry 'openSUSE Leap 42.1, with Linux 4.1.12-1-default (on /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.1.12-1-default--bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt6'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'  bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        else
          search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        fi
        linux /boot/vmlinuz-4.1.12-1-default root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca resume=/dev/sda5 splash=silent quiet showopts
        initrd /boot/initrd-4.1.12-1-default
        }
}
menuentry 'TrueOS' --class freebsd --class bsd --class os {
    insmod ufs2
    insmod bsd
    set root='hd0,1'
    set kTrueOS.vfs.root.mountfrom=ufs:/dev/ada0s1a
    set kTrueOS.vfs.root.mountfrom.option=rw
    chainloader +1
    }    

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

### BEGIN /etc/grub.d/80_suse_btrfs_snapshot ###
### END /etc/grub.d/80_suse_btrfs_snapshot ###

### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###

### BEGIN /etc/grub.d/95_textmode ###
### END /etc/grub.d/95_textmode ###


Seems to me your Grub entries pointing to your openSUSE are incorrect,
They seem to be pointing to sda6 when they should be pointing to sda8 and hd0,gpt7.

Did you regenerate your grub.cfg file following the instructions re-running mkinitrd?

It looks like have a triple-boot configured (3 boot partitions) with a boot partition likely set for a Microsoft Windows but you don’t have a Windows grub entry listed, you may need to resolve that issue. Maybe you used to have a Windows, removed the Windows files but left the Windows partitions?

TSU

Believe it or not, both Leap and TW are booting fine with this grub.cfg ! :smiley: And: No, never ever has been a Windows on this HDD. Never.

Let’s focus on TrueOS. Tried ‘hd0,2’ but gave the same

error: invalid signature

Hmmm, somethink is missing in this grub.cfg…

Repeat,
Have you run grub2-mkconfig?

For reference,
https://doc.opensuse.org/documentation/leap/reference/html/book.opensuse.reference/cha.grub2.html#sec.grub2.etc_grub_d

Am thinking if you re-created your grub.cfg the proper way (instead of directly editing grub.cfg, which would mean your edits would likely be lost the next time you install a kernel or otherwise run grub2-mkconfig), your grub entries would have been automatically straightened themselves out.

Although I referenced only the specific section which describes what happens when you run grub2-mkconfig, you’ll probably wan to skim the entire page for a more complete understanding how grub is configured and regenerated.

TSU

Did, just for you :shame:

On TW afterwards:

#
# DO NOT EDIT THIS FILE
#
# 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 ###
if  -f ${config_directory}/grubenv ]; then
  load_env -f ${config_directory}/grubenv
elif  -s $prefix/grubenv ]; then
  load_env
fi

if  "${env_block}" ] ; then
  load_env -f "${env_block}"
fi

if  "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   if  "${env_block}" ] ; then
     save_env -f "${env_block}" next_entry
   fi
   set boot_once=true
else
   set default="${saved_entry}"
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 ext2
set root='hd0,gpt9'
if  x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
else
  search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
fi
    font="/usr/share/grub2/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_output gfxterm
insmod part_gpt
insmod ext2
set root='hd0,gpt9'
if  x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
else
  search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
fi
insmod gfxmenu
loadfont ($root)/boot/grub2/themes/openSUSE/ascii.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans10.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans12.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans-Bold14.pf2
insmod png
set theme=($root)/boot/grub2/themes/openSUSE/theme.txt
export theme
if  x${boot_once} = xtrue ]; then
  set timeout=0
elif  x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=8
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=8
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/00_tuned ###
set tuned_params=""
### END /etc/grub.d/00_tuned ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE Tumbleweed '  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt9'
    if  x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
    else
      search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
    fi
    echo    'Loading Linux 4.7.5-1-default ...'
    linux    /boot/vmlinuz-4.7.5-1-default root=UUID=70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0  resume=/dev/disk/by-uuid/b15145d8-ca83-4d11-b802-feec4846085c splash=silent quiet showopts
    echo    'Loading initial ramdisk ...'
    initrd    /boot/initrd-4.7.5-1-default
}
submenu 'Advanced options for openSUSE Tumbleweed ' --hotkey=1 $menuentry_id_option 'gnulinux-advanced-70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0' {
    menuentry 'openSUSE Tumbleweed , with Linux 4.7.5-1-default' --hotkey=2 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.7.5-1-default-advanced-70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt9'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
        else
          search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
        fi
        echo    'Loading Linux 4.7.5-1-default ...'
        linux    /boot/vmlinuz-4.7.5-1-default root=UUID=70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0  resume=/dev/disk/by-uuid/b15145d8-ca83-4d11-b802-feec4846085c splash=silent quiet showopts
        echo    'Loading initial ramdisk ...'
        initrd    /boot/initrd-4.7.5-1-default
    }
    menuentry 'openSUSE Tumbleweed , with Linux 4.7.5-1-default (recovery mode)' --hotkey=3 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.7.5-1-default-recovery-70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt9'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9'  70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
        else
          search --no-floppy --fs-uuid --set=root 70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0
        fi
        echo    'Loading Linux 4.7.5-1-default ...'
        linux    /boot/vmlinuz-4.7.5-1-default root=UUID=70cb734a-0f96-4a8d-aeb8-d24f7a3ef5d0  
        echo    'Loading initial ramdisk ...'
        initrd    /boot/initrd-4.7.5-1-default
    }
}

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

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

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

### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'openSUSE 42.1 (x86_64) (on /dev/sda6)' --class suse --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt6'
    if  x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'  bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
    else
      search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
    fi
    linux /boot/vmlinuz-4.1.31-30-default root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca resume=/dev/sda5 splash=silent quiet showopts
    initrd /boot/initrd-4.1.31-30-default
}
submenu 'Advanced options for openSUSE 42.1 (x86_64) (on /dev/sda6)' $menuentry_id_option 'osprober-gnulinux-advanced-bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
    menuentry 'openSUSE Leap 42.1 (on /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.1.31-30-default--bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt6'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'  bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        else
          search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        fi
        linux /boot/vmlinuz-4.1.31-30-default root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca resume=/dev/sda5 splash=silent quiet showopts
        initrd /boot/initrd-4.1.31-30-default
    }
    menuentry 'openSUSE Leap 42.1, with Linux 4.1.31-30-default (on /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.1.31-30-default--bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt6'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'  bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        else
          search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        fi
        linux /boot/vmlinuz-4.1.31-30-default root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca resume=/dev/sda5 splash=silent quiet showopts
        initrd /boot/initrd-4.1.31-30-default
    }
    menuentry 'openSUSE Leap 42.1, with Linux 4.1.12-1-default (on /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.1.12-1-default--bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt6'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'  bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        else
          search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        fi
        linux /boot/vmlinuz-4.1.12-1-default root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca resume=/dev/sda5 splash=silent quiet showopts
        initrd /boot/initrd-4.1.12-1-default
    }
}

### 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.
menuentry 'TrueOS' --class os {
    set root='(hd0,2')
    chainloader +1
}

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

### BEGIN /etc/grub.d/80_suse_btrfs_snapshot ###
### END /etc/grub.d/80_suse_btrfs_snapshot ###

### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###

### BEGIN /etc/grub.d/95_textmode ###
### END /etc/grub.d/95_textmode ###

on 42.1 afterwards

#
# DO NOT EDIT THIS FILE
#
# 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 ###
if  -f ${config_directory}/grubenv ]; then
  load_env -f ${config_directory}/grubenv
elif  -s $prefix/grubenv ]; then
  load_env
fi

if  "${env_block}" ] ; then
  load_env -f "${env_block}"
fi

if  "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   if  "${env_block}" ] ; then
     save_env -f "${env_block}" next_entry
   fi
   set boot_once=true
else
   set default="${saved_entry}"
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 ext2
set root='hd0,gpt6'
if  x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6  --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'   bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
else
  search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
fi
    font="/usr/share/grub2/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
fi
terminal_output gfxterm
insmod part_gpt 
insmod ext2
set root='hd0,gpt6'
if  x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6  --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'   bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
else
  search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
fi
insmod gfxmenu
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans-Bold14.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans10.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans12.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/ascii.pf2
insmod png
set theme=($root)/boot/grub2/themes/openSUSE/theme.txt
export theme
if  x${boot_once} = xtrue ]; then
  set timeout=0
elif  x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=8
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=8
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/00_tuned ###
set tuned_params=""
### END /etc/grub.d/00_tuned ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE Leap 42.1'  --class opensuse --class gnu-linux  --class gnu --class os $menuentry_id_option  'gnulinux-simple-bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_gpt 
    insmod ext2
    set root='hd0,gpt6'
    if  x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6  --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'   bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
    else
      search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
    fi
    echo    'Loading Linux 4.1.31-30-default ...'
    linux    /boot/vmlinuz-4.1.31-30-default  root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca  resume=/dev/sda5  splash=silent quiet showopts
    echo    'Loading initial ramdisk ...'
    initrd    /boot/initrd-4.1.31-30-default
}
submenu 'Advanced options for openSUSE Leap 42.1' --hotkey=1  $menuentry_id_option  'gnulinux-advanced-bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca' {
    menuentry 'openSUSE Leap 42.1, with Linux 4.1.31-30-default'  --hotkey=2 --class opensuse --class gnu-linux --class gnu --class os  $menuentry_id_option  'gnulinux-4.1.31-30-default-advanced-bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca'  {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt 
        insmod ext2
        set root='hd0,gpt6'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6  --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'   bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        else
          search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        fi
        echo    'Loading Linux 4.1.31-30-default ...'
        linux    /boot/vmlinuz-4.1.31-30-default  root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca  resume=/dev/sda5  splash=silent quiet showopts
        echo    'Loading initial ramdisk ...'
        initrd    /boot/initrd-4.1.31-30-default
    }
    menuentry 'openSUSE Leap 42.1, with Linux 4.1.12-1-default'  --class  opensuse --class gnu-linux --class gnu --class os $menuentry_id_option  'gnulinux-4.1.12-1-default-advanced-bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca'  {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt 
        insmod ext2
        set root='hd0,gpt6'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6  --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 --hint='hd0,gpt6'   bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        else
          search --no-floppy --fs-uuid --set=root bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca
        fi
        echo    'Loading Linux 4.1.12-1-default ...'
        linux    /boot/vmlinuz-4.1.12-1-default  root=UUID=bf4ae7fb-17c3-4f34-aa70-0c1d76e4c6ca  resume=/dev/sda5  splash=silent quiet showopts
        echo    'Loading initial ramdisk ...'
        initrd    /boot/initrd-4.1.12-1-default
    }
}

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

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

### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###

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

### BEGIN /etc/grub.d/80_suse_btrfs_snapshot ###
### END /etc/grub.d/80_suse_btrfs_snapshot ###

### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###

### BEGIN /etc/grub.d/95_textmode ###
### END /etc/grub.d/95_textmode ###

On reboot there is still the option “TrueOS” I entered manually.

End of story. Lesson learned: GRUB2 can not detect correctly ZFS, don’t install BSD and Linux on same HDD…