4

I have tried updating the systemd-boot configuration according to this: https://wiki.archlinux.org/index.php/systemd-boot

I am trying to add Windows 10 to my boot menu. Here are my drives:

    kaisellgren@pop-os:~$ lsblk
    NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda           8:0    0 931,5G  0 disk
    ├─sda1        8:1    0   128M  0 part
    └─sda2        8:2    0 931,4G  0 part
    sdb           8:16   0 931,5G  0 disk
    ├─sdb1        8:17   0    16M  0 part
    ├─sdb2        8:18   0   600M  0 part /boot/efi
    └─sdb3        8:19   0 930,9G  0 part /
    nvme0n1     259:0    0 465,8G  0 disk
    ├─nvme0n1p1 259:1    0   499M  0 part
    ├─nvme0n1p2 259:2    0    99M  0 part
    ├─nvme0n1p3 259:3    0    16M  0 part
    └─nvme0n1p4 259:4    0 465,2G  0 part

As you can see, my boot SATA3 drive is sdb (partition sdb2).

I have the /EFI/Microsoft/Boot/bootmgfw.efi boot loader in nvme0n1 drive in partition 2 (I checked).

So I created this:

kaisellgren@pop-os:~$ sudo cat /boot/efi/loader/entries/windows.conf
title Windows
efi /EFI/Microsoft/Boot/bootmgfw.efi
options root=UUID=4C58-E6DF

And I got the root drive UUID from here:

kaisellgren@pop-os:~$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Jul 10 18:53 02165C56165C4D33 -> ../../sda2
lrwxrwxrwx 1 root root 15 Jul 10 18:53 160469B004699391 -> ../../nvme0n1p4
lrwxrwxrwx 1 root root 15 Jul 10 18:53 3C025449025409F2 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Jul 10 18:53 4C58-E6DF -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 10 Jul 10 18:53 5B44-2C7F -> ../../sdb2
lrwxrwxrwx 1 root root 10 Jul 10 18:53 646d95a4-1bb4-45c0-96bc-3ee20c4b4211 -> ../../sdb3

Here is my loader conf:

kaisellgren@pop-os:~$ sudo cat /boot/efi/loader/loader.conf
default Pop_OS-current
timeout 5

When I boot my PC, I see the boot menu with two options: PopOS current and old. I see no Windows entry on the list. What am I doing wrong? If I change the timeout parameter, it impacts the boot menu so I am definitely editing the correct configuration files.

Thanks for all the help in advance!

1 Answer 1

4

After a long time, I have a found a solution to this, boot into your Linux partition, mount your windows EFI partition in a folder, copy the Microsoft folder to /boot/EFI/ (on your linux machine), this will do the trick.

The process described in the question of manually adding a windows.conf to the loader-entries was not necessary for me.

This is the initially mentioned copy-process in detail:

sudo fdisk -l

Look for a partition with the size 100M and type EFI System. You can tell it is the correct one if it's on the same disk with another partition with the size 499M and type Windows recovery environment. Note the device-name of the EFI-partition, e.g. /dev/nvme0n1p2 (use it with the mount command further down).

Create a directory and mount the Windows-EFI partition into it:

sudo mkdir /mnt/winefi
sudo mount /dev/nvme0n1p2 /mnt/winefi

Copy the boot-configuration-data (BCD) to the systemd-boot EFI menu and un-mount the windows-partition:

sudo cp -R /mnt/winefi/EFI/Microsoft/ /boot/EFI/Microsoft
sudo umount /mnt/winefi
sudo rm -rf /mnt/winefi

This all only works if the GPT/MBR/UEFI/BIOS constellation for Arch is the same as for Windows, e.g. Arch = GPT/UEFI can't chain-load Windows=Bios/MBR with systemd-boot. See the wiki.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.