Post

📝 How I Successfully Fixed the Dual Boot Menu (Pop! OS + Windows)

Successfully fixed the missing Windows boot option in systemd-boot with Pop!_OS 22.04. Step-by-step guide covering ESP partition issues, windows.conf mistakes, and the final working solution.

📝 How I Successfully Fixed the Dual Boot Menu (Pop! OS + Windows)

🖥️ The Problem

Even after having both Pop!_OS and Windows 11 installed, only Pop!_OS and “Reboot Into Firmware Interface” were showing in the systemd-boot menu. Windows wouldn’t appear as a boot option.


🔧 Step-by-Step Solution

1️⃣ Check if the Windows Boot Loader Exists

1
2
3
sudo mkdir /mnt/nvmeboot
sudo mount /dev/nvme0n1p1 /mnt/nvmeboot
ls /mnt/nvmeboot/EFI/Microsoft/Boot/bootmgfw.efi

✅ If the file /mnt/nvmeboot/EFI/Microsoft/Boot/bootmgfw.efi exists, the Windows bootloader is present.


2️⃣ Copy the Microsoft Boot Folder to Pop!_OS ESP

1
sudo cp -r /mnt/nvmeboot/EFI/Microsoft /boot/efi/EFI/

This puts the Windows bootloader into Pop’s EFI partition so systemd-boot can find it.


3️⃣ Fix the Loader Entry for Windows

First, open the Windows loader entry:

1
sudo nano /boot/efi/loader/entries/windows.conf

It might look like this:

1
2
3
title   Windows 11
efi     /EFI/Microsoft/Boot/bootmgfw.efi
options rootfstype=ntfs root=UUID=xxxx

👉 Important: Delete the line starting with options:

1
options rootfstype=ntfs root=UUID=xxxx

Why? → systemd-boot doesn’t need (and may even break with) the options line for Windows. Windows handles its own options internally.

So the final windows.conf should look like:

1
2
title   Windows 11
efi     /EFI/Microsoft/Boot/bootmgfw.efi

4️⃣ Update systemd-boot Entries

1
2
sudo update-initramfs -c -k all
sudo bootctl update

Optional but recommended:

1
sudo bootctl install

5️⃣ Check Boot Loader Status

1
sudo bootctl status

Make sure it shows both Pop!_OS and Windows 11 in the boot entries.

Or list the loader entries directly:

1
sudo bootctl list

🏁 Final Result

After rebooting, the systemd-boot menu correctly displayed:

1
2
3
4
Pop!_OS
Windows 11
Windows Boot Manager
Reboot Into Firmware Interface

Both OS choices work perfectly. Mission accomplished.


💡 Key Lessons Learned

  • Pop!_OS uses systemd-boot, not GRUB.
  • Windows loader must be copied to the same ESP Pop!_OS uses.
  • The options line in windows.conf should be removed for systemd-boot compatibility.
  • BIOS boot priority should point to Linux Boot Manager or the Pop!_OS drive first.
  • bootctl update and bootctl install are essential after changing boot entries.

⚠ What if Windows Updates Break the Boot Entry?

Since the Microsoft bootloader (bootmgfw.efi) was copied (not symlinked) into Pop!_OS’s ESP (/boot/efi/EFI/Microsoft/), there’s a possibility that:

  • Major Windows updates (especially feature updates) might replace or update the bootloader file only on the original Windows ESP (nvme0n1p1).
  • The copied version in the Pop!_OS ESP would then become outdated or invalid.

🔄 How to Fix It (If Windows Stops Booting from systemd-boot Menu):

1️⃣ Boot into Pop!_OS.
2️⃣ Mount the Windows EFI partition again:

1
2
sudo mkdir -p /mnt/windows-esp
sudo mount /dev/nvme0n1p1 /mnt/windows-esp

3️⃣ Re-copy the updated bootloader:

1
sudo cp -r /mnt/windows-esp/EFI/Microsoft/Boot /boot/efi/EFI/Microsoft/

4️⃣ Verify the file exists:

1
ls /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

5️⃣ Reboot. The Windows entry should work again.


💡 Pro Tip:

This method is robust for most cases. But if you often get large Windows updates or upgrade to new major releases (like from Windows 11 23H2 to 24H2), remember to repeat the copy step.

If you plan to remove Windows completely later, this won’t matter because the copied bootloader will no longer be needed. 🎉

💖 Support me with crypto or PayPal! 💘

💵 USDT (TRC20):
TJCANuMYSdgLKRKnpCtscXrS5NgDbBAvF9

🟠 Bitcoin (BTC):
bc1qrc9vhrrhnc9v9s9q9rjn24aj608j44p5hzsxft

Or support me on Ko-fi:

Support me on Ko-fi

Any amount helps me continue creating content 💬💻

This post is licensed under CC BY 4.0 by the author.