You are not logged in.
Pages: 1
Greetings all,
I've been dealing with this for a few weeks and I can't seem to get GRUB to chain-load my Windows install. I'm able to boot from the Windows drive itself, but not if I chain-load from GRUB.
Here is my lsblk -f
user:~$ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1 ext4 1.0 b37991d8-cfe8-4f6b-b5f5-0cab0379e742 739.3M 17% /boot
├─sda2 vfat FAT32 4CE6-20FB 1021.8M 0% /boot/efi
└─sda3 btrfs 41e5700c-8559-4fe0-ac8e-e6eeec8fafa3 428.1G 4% /home
/
nvme1n1
├─nvme1n1p1 vfat FAT32 C091-9545
├─nvme1n1p2
├─nvme1n1p3 ntfs 0E84CD5C84CD4745 506.6G 47% /mnt/other
└─nvme1n1p4 ntfs C67AED5A7AED482F
user:~$Windows is on the nvme1n1 drive.
I keep getting this error when I select my windows from the GRUB menu:
error: commands/search.c:grub_search_fs_uuid:371:no such device: C091-9545.
error: fs/fshelp.c:find_file:260:file '/efi/Microsoft/Boot/bootmgfw.efi' not found.The odd part is, if I reinstall GRUB, then it works. Though if I try to boot into windows again it doesn't work. So only the first time does it properly chain-load into Windows.
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUBI've disabled fast startup, made sure there are no dirty bits on any drives and ran chkdsk in windows. No matter what I do I can't get it to properly chainload it. If I cd into the directory where it says it can't find bootmgfw.efi, it is actually there, which I find odd.
I've searched inside "/boot/grub/grub.cfg" for the windows entry and this is what I found:
if [ "$grub_platform" = "efi" ]; then
menuentry 'Windows Boot Manager (on /dev/nvme1n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-C091-9545' {
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root C091-9545
chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
fiWhich seems to be normal. So I am quite stumped as to why this won't boot.
/EFI/Microsoft/Boot/bootmgfw.efiI've since tried a custom menuentry, by putting it in "/etc/grub.d/50_custom":
#!/bin/sh
exec tail -n +3 $0
menuentry "Windows Custom Entry" --hotkey=w {
search --fs-uuid --set=root C091-9545
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}This also did not work and gave the same errors. Any help or advice is greatly appreciated.
Thank you in advance.
Last edited by Vastoren (Today 16:20:55)
Offline
Mainboard: GIGABYTE B550 AORUS ELITE V2 | CPU: Ryzen 7 5800X | RAM: 32 GB
GPU: GeForce RTX 4060 8 GB (580.119.02 proprietary) | Display: BenQ BL2405 1920x1080
Kernel: 6.18.8 stable | Boot Manager: GRUB2 | DE: KDE Plasma | Login Manager: SDDM | Compositor: KWin
Offline
several points:
- /boot/efi - this should be avoided in your case because /boot is also its own partition
today it should either be /efi or /esp - or /boot - but not nested /boot/efi
- your /boot/efi says 0% FSUSE - given grub is about 35mb it should show as at least 1% - confirm that grub really is installed where you think it should
- /etc/grub/grub.cfg? i hope this is a typo as grub.cfg is supposed to be in /boot/grub/grub.cfg - or where you define --boot-directory= to at grub-install (which defaults to /boot when not given)
- booting across devices: your efi loads grub from sda - but you try to access nvme1 - you try to cross device boundaries - this was and still is always a problem as it requires grub to see other drives - check your bios for stuff like AHCI / AMD-RAID/ Intel-RST - it's likely grub misses a driver required to even find the nvme
- given nvme1 there's also a nvme0 - what's on it?
- multiple ESP - the uefi spec doesn't specify how to handle multiple ESP - could be your bios gets confused - try ONE esp and put all boot loaders and kernels+initrd on it so you have one central partition - should be preferable on the windows drive
Offline
- /boot/efi - this should be avoided in your case because /boot is also its own partition today it should either be /efi or /esp - or /boot - but not nested /boot/efi
I will reinstall Arch and make sure to have it as one partition in /boot.
- your /boot/efi says 0% FSUSE - given grub is about 35mb it should show as at least 1% - confirm that grub really is installed where you think it should
It's there, when I cd into /boot/efi I see "EFI" and "'System Volume Information'", the latter of which is empty. EFI has "Arch" which includes "grubx64.efi".
- /etc/grub/grub.cfg? i hope this is a typo as grub.cfg is supposed to be in /boot/grub/grub.cfg - or where you define --boot-directory= to at grub-install (which defaults to /boot when not given)
Apologies that was a typo, it is "/boot/grub/grub.cfg"
- booting across devices: your efi loads grub from sda - but you try to access nvme1 - you try to cross device boundaries - this was and still is always a problem as it requires grub to see other drives - check your bios for stuff like AHCI / AMD-RAID/ Intel-RST - it's likely grub misses a driver required to even find the nvme
Hm I don't recall it being some BIOS setting as I've tried multiple profiles. I will give it another look.
- given nvme1 there's also a nvme0 - what's on it?
That is my shared NTFS drive that I use between operating systems, I didn't include it because I didn't think it was pertinent.
- multiple ESP - the uefi spec doesn't specify how to handle multiple ESP - could be your bios gets confused - try ONE esp and put all boot loaders and kernels+initrd on it so you have one central partition - should be preferable on the windows drive
Are you suggesting to have GRUB installed on the Windows ESP? Why is that preferred? I was hoping I could have a sort of modular setup where I could remove a drive and still boot into either OS, is this not possible?
Offline
One ESP per drive should be fine, but drive detection caveats depending on what your UEFI will expose during early boot can be quite prevalent which is somewhat likely to be your current issue , if you actually want that kind of modularity then most UEFI implementations are going to break when you swap devices unless you populate the UEFI fallback path, which you can do if you install GRUB with the "--removable" flag.
You mentioned you can cd to the windows drive, can you cd there from the GRUB shell or is this after a successful boot?
Generally speaking the problem with UEFI issues is that you're very much at the mercy of whatever your vendor is doing, and since their modus operandi is to do the minimal work to ensure windows boots, it's somewhat likely that they only expose the drive the ESP was used from initially.
Last edited by V1del (Today 16:29:51)
Offline
One ESP per drive should be fine, but drive detection caveats depending on what your UEFI will expose during early boot can be quite prevalent which is somewhat likely to be your current issue , if you actually want that kind of modularity then most UEFI implementations are going to break when you swap devices unless you populate the UEFI fallback path, which you can do if you install GRUB with the "--removable" flag.
You mentioned you can cd to the windows drive, can you cd there from the GRUB shell or is this after a successful boot?
Generally speaking the problem with UEFI issues is that you're very much at the mercy of whatever your vendor is doing, and since their modus operandi is to do the minimal work to ensure windows boots, it's somewhat likely that they only expose the drive the ESP was used from initially.
grub> ls
(proc) (hd0) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)
grub> ls (hd0,gpt1)
Partition hd0,gpt1: Filesystem type ext* - Last modification time 2026-06-01 16:29:45 Monday, UUID b37991d8-cfe8-4f6-b5f5-0cab0379e742 - Partition start at 1024KiB - Total size 1048576KiB
grub> ls (hd0,gpt2)
Partition hd0,gpt2: Filesystem type fat, UUID 4CE6-20FB - Partition start at 1049600KiB - Total size 1048576KiB
grub> ls (hd0,gpt3)
Partition hd0,gpt3: Filesystem type btrfs, UUID 41e5700c-8559-4fe0-ac8e-e6eeec8fafa3 - Partition start at 2098176KiB - Total size 467852288KiBSo when I said I could cd to the Windows EFI directory, that was only after successfully booting into Arch not from the GRUB shell itself. Given this, it seems like the issue is what you described: GRUB only sees the Arch drive during early boot and cannot see the Windows NVMe/ESP.
Offline
well - going "one ESP per drive" is what uefi is designed for: uefi scans the drives during POST and determines which it can read and load bootable code from
but the uefi spec doesn'T specify if or how the firmware will give along all drives to the loaded bootloader - or if and how an uefi complaint bootloader interacts with other drives within the same system
the most basic idea would be for a bootloader to load (or include) additional drivers to access other drives than the one it was loaded from - but i don't know if or how grub can do this
that's where my "one esp for the entire system - including kernels and initrd" comes from: i don't know exactly how windows boot works - but from what i understand and have read across multiple forums: windows uefi bootloader seems to be able to boot across multiple drives (there're several topics about "dual-boot windows install overwrote my linux bootloader on another driver" - this is where the general advice comes from: "when install windows disconnect all other drives" - to avoid exactly that) - but I'm not sure if or how this is limited to stuff like AHCI, NVMe, amd-fakeraid/intel-rst or even add-in cards with or even without OpRoms
point is: at your very setup grub seem to not be able to see the nvme where windows lives - for whatever reason - BUT: pushing grub + kernel + initrd all together on the same esp as windows gives you this: grub can load both linux and chain windows - and linux should be able in initrd phase to discover its own drive, mount it and switch_root to boot linux
as you seem to have 2x 500gb drives and use another drive as shared anyway: how about install both os on the same drive (no matter if the sata ssd or the nvme) but use the other drive as for /home or an exfat shared space
here's my setup:
one about 500gb-ish nvme (fdisk lists 465gib) with 32gb swap, 100gb arch, 250gb /home (actually stupidly big - could reduce to 100gb, too), 80gb for windows
8 3tb drives in a 24tb zfs pool (only for linux as windows zfs implementation isn't ready yet
i only use about 30gb of my /home (currently plus another 30gb for a zfs test suite) - so giving windows about 100gb more could be beneficial for one large game
anyway - back to topic
point is: your issue is: grub can't see the other drive - for whatever reason
possible idea: install grub in the same esp as the windows loader along the kernel and initrd (otherwise you will end up in the problem in reverse: grub can see windows but not /boot on the other drive holding the kernel and initrd)
OR
don't chain windows from grub but use uefi how it's intented: use the uefi os selector
Offline
Pages: 1