OK Full Solution - or how I got Dual boot working with Silverblue 32 on a GPT/EFI system with Windows 10
There is an issue with the installer in at least Fedora 31 and 32 where if you are installing to a dual boot configuration with a pre-existing GPT/UEFI system where the /boot/efi folder contains some content the installer will place the required files in the wrong directory: Fix EFI bootloader install (#1575957) by bam80 · Pull Request #2329 · rhinstaller/anaconda · GitHub
To get around this I formatted the /boot/efi partition during install. Silverblue now worked, but the Windows Boot loader entry was removed.
Requirements:
- USB with Silverblue version 32
- USB with Windows 10 Installer. Download the media creation tool from Microsoft Website. It probably needs to be done on Windows for the USB version, though ISO version can probably be done on linux and burnt to CD/DVD.
- EFI based live USB (you need access to efibootmgr on the command line)
Install Silverblue
When installing silverblue, choose custom partitioning, and from there click to automatically create partitions.
From existing Partitions select /boot/efi. On the right hand side click the tick box that says format partition.
Install Silverblue as normal with above change. There will be other guides out there of how to partition or create space for silverblue before installing etc.
After install, you will be able to boot into Silverblue only.
Reboot into Windows Installer
After you have installed Silverblue, reboot into the Windows installer.
To fix the Windows boot loader from a Windows USB installer I ran the following:
SHIFT + F10 to open a terminal
diskpart
list disk (will return with a numbered list of disks)
select disk N (number from step 3)
list volume (will give drive letters for partitions - lets say X for windows partition)
exit
bcdboot X:\windows
Once done, restart. You will boot into Windows only and not get a grub prompt.
Reboot into Linux Live Distro
I booted into Fedora 32 workstation. Any live distro will work as long as it is booted in UEFI mode and has efibootmgr installed (or installable).
-
From Command line:
sudo efibootmgr
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0000,0001…
Boot0000* Windows Boot Manager
Boot0001* Fedora
Boot0002…
-
from the output make sure both fedora and Windows Boot Manager are listed. Note the last digit of each (or if other entries are similar, the full 4 digit sequence). You need to set the correct sequence. Here Fedora is 1 and Windows is 0:
sudo efibootmgr -o 1,0
-
Unhide the Grub Menu to allow easier selection of boot entry
sudo grub2-editenv - set menu_auto_hide=0
-
Recreate the Grub boot list - this should now detect Windows and add it to the boot loader:
sudo grub2-mkconfig -o /boot/efi/EFI/Fedora/grub.cfg
-
Check the current entries in Grub config:
sudo grep -P "submenu|^menuentry" /boot/efi/EFI/fedora/grub.cfg | cut -d "'" -f2
-
Copy the entry for the Windows Boot loader and to set it as the default entry:
sudo grub2-set-default "Windows Boot Manager (on /dev/sda2)"
-
Check if Windows has been set as default boot option. Either by restarting or running:
sudo grub2-editenv - list
-
I cannot remember having to run this again, but it might help fix any problems:
sudo grub2-mkconfig -o /boot/efi/EFI/Fedora/grub.cfg