Systemd-boot can only install one kernel due to space constraints

Hello everyone,

I need some help with systemd-boot.

You see, I set up my efi partition with 512 MiB of space, which, is usually more than sufficient for anyone, at least with grub. Systemd-boot however seems to need any initramfs image in the efi partition in order to read it from an entry(which takes up a lot a lot of space).

As a result. I can only install a single linux kernel/kernel header at a time. I tried setting up XBOOTLDR on /boot to overcome this, but kernels/initramfs both still try to install to /efi. Is there a way I can tell the installer to install initramfs images & kernels to /boot instead? I know dracut(which I have) manages the installing of kernels/initramfs images, but I couldn’t find how to modify this to install things to /boot. I would really appreciate if someone told me how. Perhaps, maybe there’s a better solution to this that someone could shed light on?

Furthermore, could someone help me properly set up XBOOTLDR with systemd-boot, because I got the /boot partition with the correct guid, but it still doesn’t show any of the launch entries from it when starting up my computer. Does it need to be fat32?

You could also try reducing the size of your images. For example, some people remove the nvidia drivers from their images which makes them smaller. I also remove i18n support since I don’t personally need that.

If you don’t need fallback images, you can also not generate those which will reduce the size by a lot.

For me, a full set of images(including the fallback) including the kernel is only 85M.

Yes.

How can I do any of that? Disabling the fallback images might be useful to me, but I need the nvidia drivers. Still, could you tell me how do do both of these suggestions?

Other than that, I still think configuring initramfs images and kernels to install to /boot would be the best option since I made the partition much larger for that. How could I do this?

The fallback images can be disabled in /etc/kernel-install-for-dracut.conf. That will stop them from being generated in the future but won’t delete the existing ones. You can do that manually.

You can disable the nvidia drivers by adding a conf file in /etc/dracut.conf.d/ with the contents:

omit_drivers+=" nvidia nvidia_modeset nvidia_uvm nvidia_drm "

The nvidia drivers are probably most of your issue. They usually add ~100MB per image so ~200MB for both.

Some people have had success removing them. If you have a laptop with hybrid graphics, I am fairly certain you cannot remove them.

Looking into how to make an XBOOTLDR partition work is on my todo list but I haven’t done so yet.

I usually just enlarge the EFI partition if I need to.

I use this to make mine smaller:

omit_dracutmodules+=" network cifs nfs brltty i18n "
hostonly_mode=strict

Don’t remove i18n if you need language support in your boot image.

Thankyou.

I have my XBOOTLDR partition working now that I switched it to fat32. Previously it was set to btrfs.

With that said, do you know how to configure dracut to just install initramfs images and kernels to /boot? That way I can take advantage of the extra size in my boot partition. I can’t resize my efi partition because it’s the first partition with no available size after it. I could move it down I suppose to be the last partition, but then I’d have an empty partition space just floating around which would bug me even if it’s trivial.

It isn’t dracut that is doing that, it is our systemd-boot automation. You would need to disable all of our systemd-boot automation and replace it with your own.

It is probably possible to change it to work with an XBOOTLDR partition but I would need to do some testing.

As a side note, there is nothing special about /boot in this case. Mounting the partition /boot or somewhere else altogether shouldn’t make much difference. This is because we use kernel-install

Ah I see. Where does this systemd-boot automation take place? I don’t think I’ll be changing it. I’ll probably just enlarge the efi partition at this point. Still, I would like to take a look at the automation stuff and maybe see how I could replace it with my own.

It is the package kernel-install-for-dracut.

You can see all the files with pacman -Ql kernel-install-for-dracut

Thankyou.

That’s a bit beyond my technical savvy. I might take a look at it still. Those kind of things interest me.

Anyways, I would like to suggest the endeavourOS installer to make a bigger efi partition when using systemd-boot than the traditional 512MiB. And maybe a note for manual partitioners that recommends them to use a size over a gig. This is useful, especially if they have Nvidia on their system.

It does. If requires a minimum of 500MB but when it creates an EFI partition, it makes it 1000MB.

Gotcha. I usually use manual partitioning, so I didn’t know. It would still be nice for manual partitioners to get a note suggesting they use a size of 1 GiB or greater for their efi partition explaining that systemd-boot takes up more space on the efi partition.

3 Likes