rEFInd. How do you add a new OS entry?

I am getting really frustrated with rEFInd. I do not really understand how to make it do it’s thing. The website is dense with information but it assumes I know things that I do not. Every time I start in on something I feel like I am drowning very quickly.

I have a system with 2 SSDs. One has Linux Mint 21 and DraugerOS on it and the other has Pop!_OS on it.

I installed rEFInd on LM but couldn’t see Pop. I installed it on Pop and then I could see both. I added Drauger and I installed rEFInd there as well. But the rEFInd boot screen isn’t showing me a kernel to boot to. It gives me a GRUB like ‘select which Drauger you want’ dialog.

What it is booting for Drauger is:

Boot EFI\systemd\systemd-bootx64.efi from EFI-DRAUGER.

What the others are booting:

Boot @\boot\vmlinuz-5.19.0-76051900-generic from popos
Boot @\boot\vmlinuz-5.15.0-46-generic from linuxmint

Shouldn’t I be able to see an option for Drauger that makes it boot directly to a kernel? It’s on ext4, so it won’t be @, obviously. But how do I (and where do I) get rEFInd to find the kernel?

I have been going in circles running refind-install on the different OSs and then trying to get my BIOS to stay with the correct launcher.

It is obvious by the fact that I can’t find anything useful in my searches that I have wandered waaay off the path here. I have obviously missed the turning and I have no idea what to do except wipe the whole system and try again. But I would just end up in the same place because I still don’t know how rEFInd is supposed to be set up in the first place.

Any direction would be appreciated. I know I am doing this wrong. I just can’t seem to find anything that I can understand that tells me how to do it right.

And here is what ‘sudo efibootmgr’ tells me:

BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001,0003,0000,0005
Boot0000* rEFInd Boot Manager
Boot0001* rEFInd Boot Manager
Boot0003* ubuntu
Boot0005* UEFI OS

I’m surprised systemd-boot didn’t just work… heck it even sees my hackintosh.
Maybe just set it in the bios to boot from the grub on Mint and use os-prober to find the other OSs

Basically rEFInd will try to boot anything that looks bootable on the EFI partition. Your situation looks a little little messy for two reasons:

  • It sounds like your 2-SSD system has two EFI partitions (one on each disk). I think having one EFI partition would be a more straightforward setup, but more difficult to configure. If the way you have done it (installing rEFInd twice, once on each partition) is working, I would maybe just leave it alone.
  • You have installed systems that are using different bootloaders, which is absolutely fine to do but might be causing a little confusion when you are looking at your setup.

Most Linux distros install their own bootloader–not rEFInd, something else. The most common one is Grub, but there are others–Pop_OS! uses systemd-boot for example. Each bootloader sets stuff up its own specific way, which is why you are seeing different directory paths for different systems.

There are basically two ways you can use rEFInd:

  • As a boot manager, where you pick the distro you want to boot into and rEFInd hands off to the actual bootloader (Grub, ELILO, systemd-boot, or whatever). From there, the normal bootloader starts up and you go through that menu. This works well if you want to keep using the normal bootloader for some reason (booting into Btrfs snapshots from the Grub menu, for example)
  • As the actual bootloader, for which the kernel and kernel parameters to boot with are described to rEFInd and it takes over the entire boot process soup to nuts.

rEFInd is pretty good at finding anything that looks like it might be a bootable system, and if it spots something it will serve it up on the menu. If you booting any of your systems straight from the kernel entry (which it sounds like you are for LM and Pop_OS!), then this is an example of rEFInd being able to scrape together whatever it needs to boot your system without you having to do anything.

If your kernel is not autodetected, or you need other adjustments to get your system up, you can manually create boot entries using stanzas in refind.conf, as described here: https://wiki.archlinux.org/title/REFInd#For_manual_boot_stanzas

I’ve set up a couple rEFInd boot stanzas, and to be honest it is always something I struggle with a little bit; invariably it ends up being an hour of hacking around in the config before I get it right. :joy:

I know what you mean, it really is tough to get through some of that material. Also, there have been a couple times when I double back because I know I read something on his website somewhere about a specific thing…and it takes me an hour to find it, because something about that website is just a maze!

Do yourself a favor and read through the Arch Wiki page for rEFInd (even though you are not running Arch); it does a really good job of going over some of the basic features and thoroughly explaining how some of the more confusing stuff gets configured.

2 Likes

Thank you for getting back to me so quickly. I saw your reply yesterday but I was out and about and knew I would be at this today. I ended up uninstalling rEFInd on all but my Linux Mint install and that, at least, means I know which config file I need to edit.

I’m all ears.

I just spent 6 hours trying to make a stanza work. I think I tried every single combination of inputs I could figure out and it just doesn’t work. The example stanzas from rEFInd don’t answer the questions I have and, while I can find a few Arch examples, Ubuntu based examples are scarce.

What I need to understand is what version of which way of identifying which particular thing goes in each entry. Everything I find sounds like “whatever” can go in there. Which, after six hours of best guessing, I can attest is not the case.

My LM21 and Pop!_OS are both showing up as I want them to. But I have a choice of Drauger through the auto detected “EFI\systemd\systemd-bootx64.efi from EFI-DRAUGER” recovery entry using a life raft as it’s icon. I want to be able to launch right into Drauger like I can into the other two distros.

Here is the stanza I have been trying to get working at it’s last iteration:

menuentry "Drauger OS" {
    icon EFI/refind/icons/os_drauger.png
    volume 0FC63DAF-8483-4772-8E79-3D69D8477DE4
    loader /boot/vmlinuz
    initrd /boot/initrd.img
    options "root=PARTUUID=4ff9f795-a306-4639-bfce-8ce66811a118 quiet splash"
}

I get the icon but the launcher doesn’t. What I need to know is:

What specific type of name of what specific partition goes in ‘volume’. Is it a UUID, GUUID, PARTUUID, PARTLABEL, secret decoder ring sample? And is that the partition with the OS on it? Or is that the EFI partition? I think I have tried every combination of those but obviously I haven’t done it right yet.

Should ‘loader’ be the full ‘/boot/vmlinuz...*.’ or just ‘/boot/vmlinuz’

Should ‘initrd’ be full or partial?

(And, if hey are the whole name out to ‘generic’ does that mean I have to update the stanza each time the kernel is updated?)

Under options I keep seeing that it should be “root=PARTUUID=********************** quiet splash”. I assume that the PARTUUID is the PARTUUID of the root file system. But since I haven’t been able to get a stanza to work maybe it’s the PARTUUID of RMS’s /home. (Can you tell I’m getting exasperated?)

Since I can’t find too many non-Arch examples of stanzas, should I be using ‘ostype’ and/or some other token as well? The token explanations on the rEFInd website never quite get around to telling you what the entries should look like or whether you need them for any given purpose.

And, while I am venting: WHY does /efi/EFI/ sometimes not show the refind directory? So you reboot and it’s there. Then again and it’s not.

Any way: If you could share a working non Arch stanza with some clarification as to which id for what to put where I would be quite grateful. Thank you.

You can always use the PARTUUID. A filesystem LABEL or PARTLABEL are also acceptable, but require first creating the label in parted or gparted or whatever. The PARTUUID can just be pasted in without any additional futzing about. Just run sudo blkid and identify the partition you need, scoop up the PARTUUID and you are off to the races.

The PARTUUID for the volume entry should be the partition where the kernel image is–usually this is the EFI partition (/boot/efi would be the most common place) but some configurations put it in /boot which might be the main partition.

If you aren’t sure, poke around until you find the actual kernel bits:

root@debian:~# cd /boot
root@debian:/boot# ls
config-5.10.0-13-amd64  config-5.10.0-16-amd64  grub                        initrd.img-5.10.0-14-amd64  System.map-5.10.0-13-amd64  System.map-5.10.0-16-amd64  vmlinuz-5.10.0-14-amd64
config-5.10.0-14-amd64  efi                     initrd.img-5.10.0-13-amd64  initrd.img-5.10.0-16-amd64  System.map-5.10.0-14-amd64  vmlinuz-5.10.0-13-amd64     vmlinuz-5.10.0-16-amd64

Then use df to help figure out what partition you are in.

root@debian:/boot# df /boot
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda2      243520884 14241548 216836304   7% /

Finally, use the device to grab the PARTUUID.

root@debian:/boot# sudo blkid /dev/sda2
/dev/sda2: UUID="090f73ad-a4ab-4819-83d5-6fd6add31b5a" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="fd52a804-e4bc-4c19-9751-72c81ccffc10"

In this example, my volume entry should look something like this:

menuentry "Debian" {
	icon     /EFI/refind/icons/os_debian.png
	volume   PARTUUID="fd52a804-e4bc-4c19-9751-72c81ccffc10"
	loader   /boot/vmlinuz
	initrd   /boot/initrd.img
	options  "root=PARTUUID=fd52a804-e4bc-4c19-9751-72c81ccffc10 quiet splash"
}

Note the “volume” and “root” PARTUUID’s are the same in this example because the kernel image is stored at /boot on the root partition (instead of /boot/efi on the EFI partition)–that is not always the case.

:point_up: That “volume” line needs the PARTUUID=" - ", so like this:

    volume PARTUUID='0FC63DAF-8483-4772-8E79-3D69D8477DE4'

Other than that, assuming those PARTUUID’s are pointing to the correct partitions, it looks good to me! :slightly_smiling_face:

Thank you for walking me through that. I have tried your suggestion, with and without quotes, single and double. I have retried several combinations without joy.

I have just spent another three hours poking this. I am close to concluding that there is something wrong with the EFI partition. Let me lay out the all the pieces and see if you agree.

Two SSDs: sda and sdb. Since Pop on sdb seems to be happy let’s leave it aside.

sda1  LABEL_FATBOOT="EFI" LABEL="EFI" UUID="D2AD-E0C2" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="faa4a6f3-3e7d-4baf-a0b3-b6c70c2b726f"

sda2  LABEL_FATBOOT="EFI-DRAUGER" LABEL="EFI-DRAUGER" UUID="5C6E-6C3D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="efi-drauger" PARTUUID="1ec0f710-0745-4448-b1e5-04c3ea2c71cd"

sda3  UUID="04e38793-3dca-4dd8-a809-424bc171d22b" UUID_SUB="75ac8da7-d4ac-46d0-a4e3-893ba57c0759" BLOCK_SIZE="4096" TYPE="btrfs" PARTLABEL="linuxmint" PARTUUID="4c6f5a70-920c-425d-b1a1-263a9291abd0"

sda4  UUID="d8758418-570a-4579-ae14-b54389bb0b3c" UUID_SUB="a08ad148-c1f2-4e3a-b377-373af3b96142" BLOCK_SIZE="4096" TYPE="btrfs" PARTLABEL="popos" PARTUUID="638eb0e4-5ef7-423b-8bc3-d07ed7680996"

sda5  UUID="604e5c35-ac83-48b9-9a29-6db48c4cef18" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="drauger" PARTUUID="4ff9f795-a306-4639-bfce-8ce66811a118"

rEFInd is installed on Linux Mint (sda3) using EFI (sda1)
Drauger OS is installed on sda5 using EFI-DRAUGER (sda2)

rEFInd finds and populates launchers for Linux Mint (sda3) and Pop!_OS (sdb4)

eEFInd finds a recovery for Drauger labelled “Boot EFI\systemd\systemd-bootx64.efi from EFI-DRAUGER” which give a list of options to boot Drauger or go back to bios.

Every attempt to craft a rEFInd stanza to create a direct launcher to Drauger has failed. I get a launcher which is labelled “Boot Drauger OS from 3 GiB FAT volume”. sda2 used to be a 3 GiB volume but was resized to 512 MiB.

I’ve spent some time looking for a way to repair or rewrite the EFI thinking that might be a solution but I am not finding anything that seems like it is what I need.

Here is what my stanza looks like as of the last attempt:

menuentry "Drauger OS" {
    icon EFI/refind/icons/os_drauger.png
    volume PARTUUID='4ff9f795-a306-4639-bfce-8ce66811a118'
    loader /boot/vmlinuz
    initrd /boot/initrd.img
    options "root=PARTUUID=4ff9f795-a306-4639-bfce-8ce66811a118 quiet splash"
}

I’m wondering if reinstalling Drauger is my best option, but it took help from the developer to get it in last time…

This is what I mean about the rEFInd stanzas always being a bit of a struggle. :face_with_spiral_eyes:

:point_up_2: Are you sure your kernel image is not in the EFI partition? I’m wondering because it is named “EFI-DRAUGER” and so on. If so, the stanza would look more like this:

menuentry "Drauger OS" {
    icon EFI/refind/icons/os_drauger.png
    volume PARTUUID='1ec0f710-0745-4448-b1e5-04c3ea2c71cd'
    loader /vmlinuz
    initrd /initrd.img
    options "root=PARTUUID=4ff9f795-a306-4639-bfce-8ce66811a118 quiet splash"
}

If the kernel image is in /boot/efi then the “/boot” part of the loader and initrd lines comes out, because the paths are relative to the root of volume.

Thank you, again. My eyes are crossing and I am mumbling lyrics from ancient breakfast cereal commercials, if you get my drift.

Here is what EFI-DRAUGER looks like:

To be honest, I think the way EFI is sucked into the file tree is messing with my ability to figure out the relative path.

But looking at that makes me think I need to move the contents of 'Drauger_OS into ‘EFI’. But how does that effect kernel updates? Will I have to manually fix the stanza every time a kernel update arrives? Do I symlink or bind the contents of 'Drauger_OS to ‘EFI’ somehow? I see a lot of ways I could handily ruin my system here.

Well. I just copied ‘Drauger_OS’ into ‘EFI’. I’m going to reboot and see what happens. I’ll report back.

Well. It gave me a launcher that looked like it should work. It found and loaded a stub then complained a root wasn’t specified and ended with an initramfs prompt.

I have also figured out that the reason I am getting different /EFI is that it is pulling the EFI from sdb instead of sda if I don’t hold my tongue right when I restart the box…

Here is a result: Copying the ‘Drauger_OS’ directory into /EFI made it so that rEFInd found it and created that suspiciously correctish launcher. My stanza is worthless no matter what I change about it.

That leaves me trying to figure out what I need to do to get rEFInd to finish the job on it’s auto detected stub.

Before it dumps me into BusyBox it complains of
No root device specified, Boot arguments must include a root= parameter.
so how do I give it that info?

I was going to do a rEFInd uninstall/reinstall but the last two times I booted into LM the EFI from sdb has been attached and I don’t want to install rEFInd on that drive. I’m so done for the night.

Masochist.

Anyway. I’ve been digging this morning. In reading, again, through the rEFInd web tome I see that each file system type needs it’s own driver. In searching my EFI/refind/drivers_x64/ I see only the btrfs_x64.efi driver is present.

Seeing as how refind-install did not pull ext4_x64.efi in for Drauger and since it is the only ext4 of the three… Power cycle time.

No joy.

Then I realized that it was time: Boot into a live usb and strip every reference to rEFInd I could find from all the disks and partitions. (That’s actually the uninstall procedure.)

I found that rEFInd was still installed twice. Once on each SSD. Once I had cleaned it out I rebooted and set EFI boot order in BIOS.

I got into Linux Mint and installed rEFInd again. I added ext4_x64.efi to the driver folder (The driver for BTRFS was automagically there). I rebooted and set BIOS up to boot rEFInd Boot Manager first.

Upon booting rEFInd found LM and Drauger with working launchers. But Pop!_OS was without a usable launcher. I checked for a refind_linux.conf file in Pop!_OS’s /boot. There was none. I copied the one from Mint’s /boot and changed the UUID to the correct one and dropped it in Pop’s. Reboot.

This time I had three working launchers. I hid all the recovery and non-functional launchers so it is just the three primaries that greet you at boot. That was a bit of a journey, but a lot of it was self inflicted.

TIL:
Do Not install rEFInd on each distro.
Do boot from a live USB and uninstall rEFInd from all the things earlier rather than later.
You need to make sure you have the rEFInd drivers for each file system in EFI/refind/drivers_x64/.
A BTRFS Linux OS needs a correct refind_linux.conf file in /boot.

BTRFS:

"Boot with standard options"  "root=UUID=d8758418-570a-4579-ae14-b54389bb0b3c ro rootflags=subvol=@ quiet splash"
"Boot to single-user mode"    "root=UUID=d8758418-570a-4579-ae14-b54389bb0b3c ro rootflags=subvol=@ quiet splash single"
"Boot with minimal options"   "ro root=UUID=d8758418-570a-4579-ae14-b54389bb0b3c"

And the EFI with rEFInd installed on it may or may not mount to the OS with rEFInd installed on it. So make sure it is on the EFI that mounted on boot before running refind-install.

Thank you for suffering through my little adventure. Now, there seems to be customizations for rEFInd…

2 Likes

I went with this one:


Themes are pretty easy after all.

1 Like

PepperMint!

1 Like

Mine only has LM, Drauger and Pop. That’s the demo image. That theme has these icons baked in:

I had to make ones for Pop!_OS and Drauger OS and add them to the directory.
os_popos
os_drauger

2 Likes