DEV Community


Posted on

Fix GNU/Linux boot loader FROM Windows 10

So you have a dual boot? Let's say you need that Win10 running close by because of the work (although MS Office apps get slower by the minute). Then you also have Manjaro, Ubuntu or something like that because WSL doesn't do the trick. And of course you need to update your Win10. What a great idea.

Removing your GRUB or others from UEFI loader list

Aside from people reporting day by day more and more bugs with new updated/upgrades gotten through Update manager it comes with one more surprise: IT ALWAYS! ALWAYS! REMOVES YOUR BOOTLOADER and sets it's own as default one. So no now you can't boot to GNU/Linux. Aside from seriously thinking about going against all my principles(cheapness) and asking employer for a MacBook Pro and even buying two (for my UX/designer wife and myself), I really hate MS so much these days that I will probably at some point buy PS for games and use GNU/Linux exclusively + host everything either on DigitalOcean, AWS, GCP or anything other than Azure. Have you noticed maybe: they really p***ed me off with Azure bugs, slowness and it's support + now this! Ugh!

But let's try to fix some things

CMD not PowerShell

Why? Well because MS doesn't care so if you run Powershell in Admin mode you might as well remember to type in cmd first, as PowerShell won't work with BCD for some reason (some PCs I think, not all of them, but please do inform me why is this if you know). If you get this

The set command specified is not valid.
Run "bcdedit /?" for command line assistance.
The parameter is incorrect
Enter fullscreen mode Exit fullscreen mode

then you know you have this issue with CMD over PS so you need either, as previously stated, type in cmd in powershell to switch or just rum CMD as admin in the first place

BCD commands

Thanks to this post there's a bunch of nice commands like

bcdedit /enum firmware
Enter fullscreen mode Exit fullscreen mode

that I learned and this one is to check where is your GRUB efi
Alt Text

You can check list of loaders with bcdedit and it should look something like this
Alt Text

Goal is to replace that manager so first copy the record

bcdedit /set {bootmgr} path \EFI\Manjaro\grubx64.efi
Enter fullscreen mode Exit fullscreen mode

Set it as first boot

bcdedit /set {fwbootmgr} displayorder {223530be-53f4-11e9-a11b-b6bc71c9efcb} /addfirst
Enter fullscreen mode Exit fullscreen mode

where {223530be-53f4-11e9-a11b-b6bc71c9efcb} should be the link to your linux firmware entry from the /enum frimware list

Watch out that partition for {bootmgr} should be something like partition=\Device\HarddiskVolume1 and not the C: drive

Check again with

bcdedit /enum firmware
Enter fullscreen mode Exit fullscreen mode

If the first entry in list is Windows boot loader pointing to actual Windows remove it with

bcdedit /delete {id}
Enter fullscreen mode Exit fullscreen mode

bcdedit should now return something like thisAlt Text

You can see that I don't bother changing name but the frimware needs to list something like this

Alt Text

where {bc076f50-4923-11ea-b280-806e6f6e6963} is my Frimware application for Manjaro and {bootmgr} is edited to point to Manjaro instead of Windows.

Now I'm not sure can you make this work without removing Windows one in firmware listings but my PC took listing Firmware app + changing bootmgr to Manjaro + removing Windows extra one at the top when using
bcdedit /enum firmware
to fix it

That's it and good luck!

Top comments (0)