Today we will cover configuring a Linux system to boot using systemd boot on a UEFI system.
Firstly you'll need to check you're booted into EFI mode. You can do this with
dmesg | grep "EFI v".
Sometimes it's possible to boot your system from legacy BIOS mode instead of UEFI mode - look for the UEFI options in your boot override menu. Note, the media you are booting from most support UEFI for this to show up.
I used Arch for this guide but, being Linux, you should be able to easily adapt them for the distro of your choice.
Next we'll create the minimal viable partitions required for this to work. You should adjust the partitioning steps as required for your steup.
The use of gdisk means we'll be using
gpt formatting not
mbr - use
gpt unless you have a very good reason for doing otherwise.
BEWARE: We're about to wipe everything off this drive
We're going to create the partition which will hold
ocreate a new EMPTY gpt and erase everything off the drive
ncreate a new partition
- default partition number (1)
- First sector: leave blank
ef00partition type code – EFI system
ncreate a new partition (this is going to be your root filesystem) - accept defaults
wthis will write the changes listed above and ERASE YOUR DRIVE
Use the same method to partition rest of your drive as required. You can leave
last sector blank and it will use the remaining free space for that partition.
\boot should be no larger than
Create the filesystem(s)
Time to put a filesystem on those partitions. Double check your numbers before running any of these commands, just in case.
mkfs.ext4 /dev/sda2 #the larger one used for / mkfs.vfat -F32 /dev/sda1 #used for /boot
Mount the partitions
This must be done in a specific order. First, mount the partition which will form
/dev/sda2 in our case. Don't forget I'm on Arch, this may differ for other distros.
mount /dev/sda2 /mnt mkdir -p /mnt/boot mount /dev/sda1 /mnt/boot pacstrap /mnt base base-devel
Install the bootloader
Once you've entered your
chroot it’s then time to install the bootloader using:
bootctl --path=/boot$esp install
/boot and you’ll want to end up with a file layout thus (I used
tree to generate this):
$ tree /boot /boot ├── EFI │ ├── Boot │ │ └── BOOTX64.EFI │ └── systemd │ └── systemd-bootx64.efi ├── initramfs-linux-fallback.img ├── initramfs-linux.img ├── loader │ ├── entries │ │ └── arch.conf │ └── loader.conf └── vmlinuz-linux
The important files are
/boot/loader/loader.conf ############## default arch timeout 1 editor 0
PARTUUID by running
blkid -s PARTUUID -o value /dev/sda2.
/boot/loader/entries/arch.conf ################## title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=66e3f67d-f59a-4086-acdd-a6e248a3ee80 rw
Optionally, your options line could be
options root=/dev/nvme0n1p3 rw intel_iommu=on.
Now you can continue with your installation as required and reboot. That's it.