How to change from using systemdboot to Grub

Hello there! I’ve not long had Endeavour as my first OS, and so far so good. Something has bothered me with it though, which is I have it using systemdboot. I didn’t notice an option for grub when installing, but having broken my system a few times now I can very much see the appeal in using it if for no other reason than just because of how much more information on it there is out there.

I don’t really know how swap to it though, and I can easily see myself making a mistake. Looking online the information I’ve seen is either a bit over my head or simply not for arch, and even then has some mixed warnings with it.

Any pointers are appreciated, thank you!

1 Like

You will have to work through some pieces of it yourself but the high level process would be something like this:

  • sudo pacman -R kernel-install-for-dracut
  • sudo pacman -S eos-dracut grub
  • Run sudo dracut-rebuild
  • Copy the contents of /etc/kernel/cmdline and put them in /etc/default/grub in the appropriate line
  • Run sudo grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=EndeavourOS
  • Run sudo grub-mkconfig -o /boot/grub/grub.cfg

That isn’t tested but I think that should be pretty close.

Make sure your read the output for each step and if there any errors, stop and fix them before continuing the next step.

2 Likes

During the install process if your booted your system with uefi boot it will default to systemd-boot but there will be an option to select a slider to use Grub instead.

Hey Dalto! Good to see you.

Going through that now, I’m stuck at the third line. It says it cannot find reinstall-kernels. Is there a typo in sudo pacman -S eos-dracut grub not having a - before grub or is this just some other problem?

I’m not sure I read that right. Do you mean that option is still there or that there was a slider when installing not using uefi boot?

My fault, that is the wrong command. I fixed it above.

The option is still there in the installer to use grub.

Ok. So I’m a bit past that option now and so need the commands to do it manually, plus the cleanup of removing the old.

I fixed that command above in my instructions. Is it working for you now?

There option is there when you boot your system as an uefi boot system, but the default is to use systemd-boot.


But the faster option is to convert it, since it will save you a reinstall.

Yes, thank you. Now I’m trying to find the right place in grub to move the entry from cmdline to.

GRUB_CMDLINE_LINUX_DEFAULT

Ah, gotcha. I have now replaced loglevel=3 quiet with nvme_load=YES rw root=UUID=ae3cb8f6-3d67-44a0-8de7-5090a5e016c5

@dalto Isn’t that setting only necessary when your ssd isn’t picked up by the kernel and that it was added as default because of some hardware running into that problem?

It is only needed for certain circumstances, yes. We add it by default to support the greatest number of hardware configurations out of the box.

So, good news, it boots into grub! Bad news, it gets stuck on A start job is running for /dev/disk/by-uuid/[the uuid I gave before]. Oh dear. It does this right after Reached target Basic System

I found a post where someone mentioned the swap partition being the problem, but I’m doubting that’s it here and I already know what sorta damage I can do when following fixes for the wrong problems. As it stands I’m stuck unable to boot.

Can you boot off the live ISO, arch-chroot into your install and share both the contents of /etc/default/grub and the contents of /etc/fstab

grub contains

# GRUB boot loader configuration

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="nvme_load=YES rw root=UUID=ae3cb8f6-3d67-44a0-8de7-5090a5e016c5"
GRUB_CMDLINE_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=auto

# 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

# Uncomment and set to the desired menu colors.  Used by normal and wallpaper
# modes only.  Entries specified as foreground/background.
#GRUB_COLOR_NORMAL="light-blue/black"
#GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/path/to/wallpaper"
#GRUB_THEME="/path/to/gfxtheme"

# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"

# Uncomment to make GRUB remember the last selection. This requires
# setting 'GRUB_DEFAULT=saved' above.
#GRUB_SAVEDEFAULT=true

# Uncomment to disable submenus in boot menu
#GRUB_DISABLE_SUBMENU=y

# Probing for other operating systems is disabled for security reasons. Read
# documentation on GRUB_DISABLE_OS_PROBER, if still want to enable this
# functionality install os-prober and uncomment to detect and include other
# operating systems.
#GRUB_DISABLE_OS_PROBER=false

and fstab contains

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a device; this may
# be used with UUID= as a more robust way to name devices that works even if
# disks are added and removed. See fstab(5).
#
# <file system>             <mount point>  <type>  <options>  <dump>  <pass>
UUID=74E8-6578                            /efi           vfat    defaults,noatime 0 2
UUID=ae3cb8f6-3d67-44a0-8de7-5090a5e016c5 /              ext4    defaults,noatime 0 1
tmpfs                                     /tmp           tmpfs   defaults,noatime,mode=1777 0 0

Try changing GRUB_CMDLINE_LINUX_DEFAULT to 'nowatchdog nvme_load=YES loglevel=3'

I think grub generates the root= part for you.

Then run grub-mkconfig -o /boot/grub/grub.cfg from within the chroot.

Same result, unfortunately.