1

It's the first time that I install Linux (Debian testing) on a computer with UEFI and not BIOS. I've installed Windows first and then Debian (like I always did), but system keeps booting straight into Windows 10 no matter what.

I've tried many solutions: disabled secure-boot, tried multiple bios settings (CSM support enabled-disabled, UEFI boot only, UEFI and Legacy, etc), disabled Windows fastboot, tried installing rEFInd, tried with bcdedit from Windows shell, tried completely reinstalling the system..

The only way to boot into GRUB (which is installed and perfectly working) is to use a rEFInd USB. In this way I managed to add GRUB to EFI (which was missing) with efibootmgr EFI/debian/grubx64.efi command, but it's still not working.

My computer is a Thinkpad T470.

1
  • 1
    Why am I getting downvoted?
    – Chavo
    Mar 1, 2018 at 18:19

2 Answers 2

2

Besides what you've already mentioned trying, there are two possibilities that come to mind, both involving the system firmware:

  1. The firmware doesn't actually implement UEFI properly, ignoring the various UEFI boot variables and just unconditionally loading \EFI\Microsoft\Boot\bootmgfw.efi if it exists. If this is the case, there's literally nothing you can do to properly dual-boot anything on the system other than Windows. A lot of older Gigabyte motherboards are notorious for this, but I don't think Lenovo's ever done this with any Thinkpads.
  2. The UEFI boot loader variables are read-only, but implemented in a way that doesn't match the UEFI specification. I know at least some THinkpads (the L540 I used to have for example) had firmware that allowed the user to 'lock' these variables so that they couldn't be changed, supposedly to protect the system from boot-time malware (and I used it to prevent Windows from rewriting the boot order for quite a while until I learned about the bcdedit trick).

Distinguishing between the two cases is actually not too hard. To check if the second case is what's going on:

  1. Boot into Linux.
  2. Use the efibootmgr command to add a dummy boot entry or change the boot order.
  3. Shut the system all the way down (don't reboot, literally shut the system down).
  4. Boot into Linux again.

If the change you made in step 2 is still there, then the first case is probably your issue, and you likely can't change anything to make this system dual-boot Windows and Linux. Otherwise, the second case is what's up, and you can probably find an option in the firmware setup to disable this behavior (I don't remember what the option on my L540 was, but it should be in either the Boot or Security tabs).

1
  • 2
    Thank you for the answer but I just found the solution: Boot order lock in BIOS settings. Just didn't see this option, and it was overwriting boot order with the default one.
    – Chavo
    Mar 2, 2018 at 0:57
2

I've got the same problem on ideapad 330 (Arch linux). The simplest and working way to make my system dual bootable was to change the path to windows efi file. After restoring grub simply rename "Microsoft" directory, and make the same change in /boot/grub/grub.cfg file. Now the firmware will be unable to find windows and should start grub. The only issue is when you want to upgrade kernel. Because grub is reconfigured automatically you have to change back the original directory name before upgrade. In other case os-prober will be unable to find windows.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .