Please verify the name of the GRUB packages you currently have installed. If they include something like grub2-i386-pc
(or directory /boot/grub2/i386-pc
exists), you've accidentally booted the SuSE installer in legacy BIOS mode, and so it has installed a legacy BIOS version of GRUB bootloader, which naturally cannot boot any operating system that uses the newer UEFI boot scheme.
To fix this:
First, find out how to boot your system to Linux in UEFI mode and gain access to your OpenSUSE installation. A openSUSE installation media in Rescue System mode, or a LiveCD/USB could be suitable from this. Here's a link to the relevant instructions from openSUSE documentation
Verify that you're in fact in UEFI mode by running efibootmgr -v
. If it responds with EFI variables are not supported on this system
you are not managed to boot in UEFI mode, but in legacy BIOS mode. (Booting in legacy BIOS mode disables the UEFI runtime services, which is the mechanism used to access the EFI NVRAM variables.)
You may need to change your UEFI BIOS settings to prefer UEFI boot over legacy BIOS, or to outright disable the legacy compatibility (often known as CSM = Compatibility Support Module). The actual procedure at this point is specific to your hardware and UEFI BIOS. Consult your hardware documentation.
Once you've managed to boot the system in UEFI mode and are accessing your openSUSE installation, remove any current GRUB bootloader packages. Then mount your EFI system partition as /boot/efi
and fully reinstall GRUB2. If the package management requires you to pick the actual version of GRUB2 hardware-dependent package, pick grub2-x86_64-efi
instead of grub2-i386-pc
.
Usually, the full reinstallation of GRUB includes a script that will automatically update the EFI NVRAM variables using the efibootmgr
tool. With efibootmgr -v
, you should see a list of boot options, similar to what is available in UEFI BIOS settings. After the (re)installation of an UEFI version of GRUB, the list should include a new entry for OpenSUSE, specifying the location of the grubx64.efi
bootloader file within the EFI system partition. If that does not happen for some reason, you can use a command like the following to create it manually:
efibootmgr -c -d /dev/sda -L "openSUSE" -l '\EFI\opensuse\grubx64.efi'
Note that the efibootmgr -d
option specifies the whole-disk device that contains the EFI system partition, not the partition itself.
The EFI system partition is not exclusive to Windows: in UEFI systems, all the installed operating systems are supposed to put their primary bootloaders in there. There is even a standardized directory schema for avoiding conflicts between bootloaders: each vendor is supposed to put their bootloader in \EFI\<vendor name>\
directory, and both openSUSE and Microsoft comply with this.