Haiku on Dell Inspiron 15 3535 - Can't figure out grub menuentry

I’ve installed Haiku R1/Beta4 on above computer. I also have linux Mint on the same machine, and used it to add two menu entries to 40_custom for grub 2. Grub displays the two menu entries, but when I select either of them, I get one of the following:

"Booting a command list

error: disk 'name>,4" not found."

The output from fdisk -l shows [Note my comments are enclosed in square brackets]

"Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: P41PL NVMe SOLIDIGM 512GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal):L 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 4A180A67-2E24-2E24-4BA2-9A68-99C8851B0564

Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 616447 514400 300M EFI System
/dev/nvme0n1p2 616448 878591 262144 128M Microsoft Reserved
/dev/nvme0n1p3 878592 344502271 343623680 163.9G Microsoft basic data [Windows 11]
/dev/nvme0n1p4 344502272 478719999 134217728 64G Microsoft basic data [this is the partition I installed Haiku on]
/dev/nvme0n1p5 478722048 956567551 477845504 227.9G Linux filesystem [My linux Mint installation]
/dev/nvme0n1p6 956567552 958595071 2027520 990M Windows recovery environment
/dev/nvme0n1p7 958595072 997199871 38604800 18.4G Windows recovery environment
/dev/nvme0n1p8 997201920 1000214527 3012608 1.4G Windows recovery environment"

I won’t go through the whole list of what Haiku’s "drive setup’ program shows, but here is the single line that represents the partition where I installed Haiku after booting the anyboot environment from a USB stick:

Device File system Volume name Mounted at Size Free space
Block size Physical block size

/dev/disk/nvme/0/3 Be File System BeFS /BeFS 64.00GiB 63.31GiB 2048 512

/dev/disk/usb/0/0/0 Be File System Haiku /boot 1.37GiB 271.71MiB
2048 512

I’m hoping someone can help me with what the Grub “root =” entries should be for both the NVMe and the USB if possible.

Thanks in advance for any pointers. More information gladly given if requested.

Brian

1 Like

You need to see how ( which number ) Grub gives to your disk, as Haiku DriveSetup could count things differently.

Can you post your grub.cfg ? That error looks like some wrongly typed parameter

Thanks for the response. Can’t figure out how to attach a file (other than images) so I’ll post it inline. I hope it is readable:

#
# 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 ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
if [ "${initrdfail}" = 2 ]; then
   set initrdfail=
elif [ "${initrdfail}" = 1 ]; then
   set next_entry="${prev_entry}"
   set prev_entry=
   save_env prev_entry
   if [ "${next_entry}" ]; then
      set initrdfail=2
   fi
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 initrdfail {
    if [ -n "${have_grubenv}" ]; then if [ -n "${partuuid}" ]; then
      if [ -z "${initrdfail}" ]; then
        set initrdfail=1
        if [ -n "${boot_once}" ]; then
          set prev_entry="${default}"
          save_env prev_entry
        fi
      fi
      save_env initrdfail
    fi; fi
}
function recordfail {
  set recordfail=1
  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; 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
search --no-floppy --fs-uuid --set=root 51fcefa8-1990-46e6-a6c4-b9b882e993d9
    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_US
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=hidden
    set timeout=10
  # Fallback hidden-timeout code in case the timeout_style feature is
  # unavailable.
  elif sleep --interruptible 10 ; then
    set timeout=0
  fi
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
    set gfxpayload="${1}"
    if [ "${1}" = "keep" ]; then
        set vt_handoff=vt.handoff=7
    else
        set vt_handoff=
    fi
}
if [ "${recordfail}" != 1 ]; then
  if [ -e ${prefix}/gfxblacklist.txt ]; then
    if [ ${grub_platform} != pc ]; then
      set linux_gfx_mode=keep
    elif hwmatch ${prefix}/gfxblacklist.txt 3; then
      if [ ${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
export linux_gfx_mode
menuentry 'Linux Mint 21.2 Cinnamon' --class linuxmint --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-51fcefa8-1990-46e6-a6c4-b9b882e993d9' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_gpt
    insmod ext2
    search --no-floppy --fs-uuid --set=root 51fcefa8-1990-46e6-a6c4-b9b882e993d9
    linux   /boot/vmlinuz-5.15.0-88-generic root=UUID=51fcefa8-1990-46e6-a6c4-b9b882e993d9 ro  quiet splash 
    initrd  /boot/initrd.img-5.15.0-88-generic
}
submenu 'Advanced options for Linux Mint 21.2 Cinnamon' $menuentry_id_option 'gnulinux-advanced-51fcefa8-1990-46e6-a6c4-b9b882e993d9' {
    menuentry 'Linux Mint 21.2 Cinnamon, with Linux 5.15.0-88-generic' --class linuxmint --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-88-generic-advanced-51fcefa8-1990-46e6-a6c4-b9b882e993d9' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root 51fcefa8-1990-46e6-a6c4-b9b882e993d9
        echo    'Loading Linux 5.15.0-88-generic ...'
        linux   /boot/vmlinuz-5.15.0-88-generic root=UUID=51fcefa8-1990-46e6-a6c4-b9b882e993d9 ro  quiet splash 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.15.0-88-generic
    }
    menuentry 'Linux Mint 21.2 Cinnamon, with Linux 5.15.0-88-generic (recovery mode)' --class linuxmint --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-88-generic-recovery-51fcefa8-1990-46e6-a6c4-b9b882e993d9' {
        recordfail
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root 51fcefa8-1990-46e6-a6c4-b9b882e993d9
        echo    'Loading Linux 5.15.0-88-generic ...'
        linux   /boot/vmlinuz-5.15.0-88-generic root=UUID=51fcefa8-1990-46e6-a6c4-b9b882e993d9 ro recovery nomodeset dis_ucode_ldr 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.15.0-88-generic
    }
    menuentry 'Linux Mint 21.2 Cinnamon, with Linux 5.15.0-87-generic' --class linuxmint --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-87-generic-advanced-51fcefa8-1990-46e6-a6c4-b9b882e993d9' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root 51fcefa8-1990-46e6-a6c4-b9b882e993d9
        echo    'Loading Linux 5.15.0-87-generic ...'
        linux   /boot/vmlinuz-5.15.0-87-generic root=UUID=51fcefa8-1990-46e6-a6c4-b9b882e993d9 ro  quiet splash 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.15.0-87-generic
    }
    menuentry 'Linux Mint 21.2 Cinnamon, with Linux 5.15.0-87-generic (recovery mode)' --class linuxmint --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-87-generic-recovery-51fcefa8-1990-46e6-a6c4-b9b882e993d9' {
        recordfail
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root 51fcefa8-1990-46e6-a6c4-b9b882e993d9
        echo    'Loading Linux 5.15.0-87-generic ...'
        linux   /boot/vmlinuz-5.15.0-87-generic root=UUID=51fcefa8-1990-46e6-a6c4-b9b882e993d9 ro recovery nomodeset dis_ucode_ldr 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.15.0-87-generic
    }
    menuentry 'Linux Mint 21.2 Cinnamon, with Linux 5.15.0-76-generic' --class linuxmint --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-76-generic-advanced-51fcefa8-1990-46e6-a6c4-b9b882e993d9' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root 51fcefa8-1990-46e6-a6c4-b9b882e993d9
        echo    'Loading Linux 5.15.0-76-generic ...'
        linux   /boot/vmlinuz-5.15.0-76-generic root=UUID=51fcefa8-1990-46e6-a6c4-b9b882e993d9 ro  quiet splash 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.15.0-76-generic
    }
    menuentry 'Linux Mint 21.2 Cinnamon, with Linux 5.15.0-76-generic (recovery mode)' --class linuxmint --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-76-generic-recovery-51fcefa8-1990-46e6-a6c4-b9b882e993d9' {
        recordfail
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root 51fcefa8-1990-46e6-a6c4-b9b882e993d9
        echo    'Loading Linux 5.15.0-76-generic ...'
        linux   /boot/vmlinuz-5.15.0-76-generic root=UUID=51fcefa8-1990-46e6-a6c4-b9b882e993d9 ro recovery nomodeset dis_ucode_ldr 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.15.0-76-generic
    }
}

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

### BEGIN /etc/grub.d/10_linux_zfs ###
### END /etc/grub.d/10_linux_zfs ###

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

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

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/nvme0n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-EE83-94B8' {
    insmod part_gpt
    insmod fat
    search --no-floppy --fs-uuid --set=root EE83-94B8
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
  set timeout=10
fi
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
    fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/35_fwupd ###
### END /etc/grub.d/35_fwupd ###

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

# Added entry to boot Haiku

menuentry "Haiku (NVMe)" {
    set root=(hd0,3)
    chainloader +1
}

menuentry "Haiku (USB)" {
    set root=(sda0,1)
    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 ###

Since you use an EFI system please add Haikus efi bootloader to your esp (the 300mib fat32 partition) and the check online how grub2 can chainload efi loaders.

This may work but I don’t know for sure, in general the advice for Haiku is not to use grub2 as it is complicated and error prone. instead an efi menu like rEFInd works much better.

regards

Adding to nephele’s answer, if you are sticking with grub2, you can copy the content from the entry for Windows and change the path for the chainloader command. The search command takes care of finding the correct value for root.

You’ll also have to change the partition type of /dev/nvme0n1p4 to Haiku BFS (42465331-3BA3-10F1-802A-4861696B7521) for the bootloader to find it. You can do that with fdisk.

For a USB disk, it depends on how the hardware sees it and how it is formatted. You may try again the search command if the partitions have unique labels.

I try to put the above answers together. Basically, you need to put the following in /etc/grub.d/40_custom file:

menuentry 'Haiku'  {
    insmod part_gpt
    insmod fat
    search --no-floppy --fs-uuid --set=root EE83-94B8
    chainloader /EFI/Haiku/Bootx64.efi
}

This code assumes your EFI partition UID is EE83-94B8 (it seems to be so), and in this partition you have Haiku EFI loader put under /EFI/Haiku/Bootx64.efi.

Of course, after changing 40_custom you need to run update-grub.

1 Like

alpopa,

A thanks to everyone else that responded of course, but your answer is exactly what I needed! I had been struggling for several hours, and following your advice - it just works. I now have Haiku booting from the NVMe in my dell inspiron. I can’t thank you enough.

2 Likes