You are not logged in.
I'm trying to set up a dual-boot system with Windows 11 and Archlinux, but for some reason, after finishing installation (including installing the bootloader) I get no 'Linux' entry during boot or any register of it on the Motherboard's boot section in the UEFI "BIOS" page.
I've installed Windows 11 first with a 1Gb EFI partition, then Archlinux, and lastly initramfs and the bootloader to the EFI partition.
I've checked that Fast Startup and Secure boot are disabled, and there are no errors when installing the bootloader, I get the /boot/EFI/systemd/systemd-bootx64.efi` entry as supposed.
I can boot into a USB live install of Arch and chroot into the local installation just fine (thus I assume the MB configuration is OK, Secure Boot is disabled), but reinstalling the bootloader produces no effect, it still won't boot or even show the systemd-boot entry (thus it isn't a case of Windows just being loaded first).
I see no information on the Wiki about such a scenario, is there something obvious I'm missing here?
EDIT: I am aware that I can attempt to create the boot entry directly with `efibootmgr`, but I am trying to understand what may be the issue here, considering I get no error during bootloader installation.
Last edited by joaocandre (2025-01-02 19:28:35)
Offline
There's probably something wrong with your entries files, but without seeing them it is impossible to tell exactly what.
Try to post here /boot/loader/loader.conf and your /boot/loader/entries/* files.
Offline
I've noticed that `bootctl` complains the system is not booted with EFI, which is strange considering the MB has legacy BIOS boot disabled and `/sys/firmware/efi/efivars` exists - I wonder if that's related with `arch-chroot`?
System:
Not booted with EFI
Available Boot Loaders on ESP:
ESP: /boot
File |_ /EFI/systemd/systemd-bootx64.efi (systemd-boot 257.1-1-arch)
|_ /EFI/BOOT/bootx64.efi (systemd-boot 257.1-1-arch)
Boot Loader Entries"
$BOOT: /boot
token: arch
0 entries, no entry could be determined as default.
`/boot/loader/loader.conf` only has two commented lines:
#timeout 3
#console-mode keep
and I have no entries under `/boot/loader/entries`.
To this point, having tried to manually add a boot entry with `efibootmgr`, the resulting boot screen from systemd-boot only has a 'Windows 11' entry.
Last edited by joaocandre (2025-01-02 21:21:39)
Offline
I've noticed that `bootctl` complains the system is not booted with EFI, which is strange considering the MB has legacy BIOS boot disabled and `/sys/firmware/efi/efivars` exists - I wonder if that's related with `arch-chroot`?
Hmm... If "Legacy"/"CSM" or similar options are already disabled in the motherboard's UEFI settings, try checking some EFI settings to see what's going on:
What is the output of:
$ ls -lahF /sys/firmware/efi/efivars
What is the output of:
$ efivar --list
What is the output of (as the "root" user, or with `sudo`):
# efibootmgr --unicode
What is the output of (depending on the filesystem mountpoint of the EFI System Partition on the drive):
$ findmnt /efi
$ findmnt /boot
$ findmnt /boot/efi
And also:
# ls -lahF -R /boot /efi
What is the output of:
$ cat /sys/firmware/efi/fw_platform_size
To this point, having tried to manually add a boot entry with `efibootmgr`, the resulting boot screen from systemd-boot only has a 'Windows 11' entry.
Linux is not auto-detected by systemd-boot, using Arch Wiki > Systemd-boot > 7: "Configuration" as a reference.
Arch default systemd-boot example template:
$ cat /usr/share/systemd/bootctl/arch.conf
I've installed Windows 11 first with a 1Gb EFI partition, then Archlinux, and lastly initramfs and the bootloader to the EFI partition.
First, find the location of the linux initramfs in the ESP (as root, or with `sudo`):
Replace '/efi' with '/boot' if the ESP is mounted on '/boot'.
# find /efi -name '*init*' -print
Then, since there was no mention of moving a linux kernel image to the ESP, copy a kernel image to the ESP (as root, or with `sudo`):
Name the file something you can keep track of manually on the ESP (like using the kernel version and distro in the filename), unless you want to use a separate /boot partition and systemd-boot XBOOTLDR.
# cp -vi /boot/vmlinuz-linux /efi/arch-linux-vmlinuz-linux-6.12.7.arch1-1
Make a systemd-boot entry (and create the directories on the ESP, if necessary) using the file location of the linux kernel image and initramfs relative to the root of the ESP (or XBOOTLDR) partition:
Make something like:
esp/loader/entries/arch.conf:
title Arch Linux
linux /arch-linux-vmlinuz-linux-6.12.7.arch1-1
initrd /initramfs-linux.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
Then replace 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' with the UUID of the root partition:
$ findmnt /
Rodsbooks "Managing EFI Boot Loaders for Linux" series is a very useful resource when dealing with UEFI booting. This in particular is essential to reference when managing default "fallback" boot entries: "Managing EFI Boot Loaders for Linux: Using fallback.efi" by Rod Smith
Last edited by Nyctfall (2025-01-03 06:36:36)
Offline
Sorry for the late reply!
In the end, I had to 1) create the Archlinux entry ''arch.conf" manually, pointing to the initramfs image generated by the 'mkinitcpio -P', as @Nyctfall describes on the second half of his comment; and 2) add a UEFI entry with 'efibootmg --create ...', basically everything 'bootctl install' should do (the issue of no archlinux entry in my previous comment was due to a malformed 'arch.conf' file).
The process is quite straighforward and well documented in the wiki; however I still haven't got a clue why 'bootctl install' did not work - nor why it complained about not being loaded with UEFI - and I haven't found any reference to a similar bug.
In relation to the suggestions in @Nyctfall's comment, I was sure that I was booting the live-USB in UEFI mode, I don't think that's the issue.
Nevertheless, for reference, I get the extensive list of EFI variables in 1) and 2);
3) prints the EFI bootloaders:
BootCurrent: 0002
Timeout: 1 seconds
BootOrder: 0002, 0000
Boot0000* Windows Boot Manager HD(1, GPT, <EFI Partition>/\EFI\Microsoft\Boot\bootmgfw.efi
Booot002* Linux Boot Manager HD(1, GPT, <EFI Partition>/\EFI\systemd\systemd-bootx64.efi
4) does not produce any output and and 5) simply prints '64'.
Offline