Dualboot with Win8.1. Windows overwrites GRUB.

Ok, so I finally got the courage to attempt a dualboot with Win8 again. Installation was painless after cleaning up C: and then shrinking the volume to make room for the openSUSE partitions. Everything behaved normally (and exceptionally, bravo on 13.1) until I booted into Windows 8.1 again. Now GRUB is totally gone (as expected). I am using a Sony Vaio Fit 15 with Windows 8.1. I installed openSUSE 13.1 64 bit with UEFI and Secureboot enabled. I am also using btrfs as I intent to experiment with getting Bumblebee to work.

Ideally, I’d like to be able to chainload GRUB from the Windows bootloader so that I won’t run into this problem again. I have encountered this problem invariably with Windows 8 on several machines, and am thus unwilling to simply reinstall openSUSE or GRUB. The Vaio uses UEFI and GPT. In this regards EasyBCD does not work with Windows 8.x as it can’t handle GPT. Previous installations were rendered inoperative by EasyBCD.

This problem came as I was writing a tutorial on the topic.

I spent some time looking for ways to do that in a UEFI environment. As best I can tell, it cannot be done. The Windows boot manager does not appear to have suitable capabilities for booting non-Windows systems in a UEFI box.

On my UEFI box (using to post this message), I use the grub2-efi boot loader and have it load Windows when I want to boot that.

That is precisely the problem though. As soon as I booted into WIndows, then rebooted GRUB2-efi was gone.

Hi Shadowwolf7,

I haven’t installed windows 8.1 yet but windows 8. If the grub issue is same for both windows versions then the following steps can solve your issue.

  1. Download SuperGrub2 disc iso from here.
  2. Create a bootable USB drive for SuperGrub disc and boot through it (I boot my system using my rooted Android phone with DriveDroid app).
  3. Then choose “Detect any GRUB2 configuration file (grub.cfg)”
  4. Use the opensuse option in the given list if available, which will make opensuse to boot.
  5. open YaST2 -> Boot Loader and try to configure your bootloader by choosing either GRUB or GRUB2 (if using grub2 , make sure “Probe Foreign OS” selected)
  6. save and restart.

I have fixed my GRUB 2 bootloader using the above step but I don’t have UEFI on my system.
**Caution:**If the above doesn’t fix the issue, your windows may not boot either but that can be easily fixed using windows 8.1 installation media’s recovery option.

Hope this works.

Did it work before you booted into Windows?

UEFI is different.

The grub2-efi booting is probably still intact, but perhaps the NVRAM entry for it has been deleted. That happens on some computers. There’s a work-around for it. But I first need to find out if that is the problem for Shadowolf7

I became curious and looked at the files.

linux-o05u:~ # file /boot/efi/EFI/Microsoft/Boot/memtest.efi
/boot/efi/EFI/Microsoft/Boot/memtest.efi: PE32+ executable (Unknown subsystem 0x10) x86-64, for MS Windows
linux-o05u:~ # file /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi: PE32+ executable (DLL) (EFI application) x86-64, for MS Windows
linux-o05u:~ # file /boot/efi/EFI/opensuse/grubx64.efi
/boot/efi/EFI/opensuse/grubx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows

So files that Microsoft installs are not EFI executables at all (with single exception of bootmgfw.efi). Extension .efi is highly misleading here. They are more “plugins” into bootmgfw.efi, and cannot be executed without it.

I do not know if API is made available (anyone?) If yes, we could write own plugin that just launches normal EFI executable …

Yes, it was fine until I booted into Windows from GRUB. Then once I rebooted, GRUB was gone.

Hi. But I am just wondering that in addition to what Rescatux offers at the link. What I’ve always tried and found to be fairly successful is using the Ubuntu Remix from here:
https://wiki.ubuntu.com/UbuntuGNOME/ReleaseNotes/12.10

from the website:

Since the original Ubuntu GNOME Remix 12.10 release didn’t boot on EFI computers, we released a new image (12.10.1) on Tuesday, October 23 to fix this problem.

I do believe it comes with Boot repair. If it does not, and I’ll be surprised that it won’t as I usually find it there when I find occasion to use it, open Ubuntu’s Terminal

sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
sudo apt-get install -y boot-repair && (boot-repair &)

More info here and I hope it helps you as well:

https://help.ubuntu.com/community/Boot-Repair

Here’s what you can try. Open an Administrator command prompt in Windows 8. From that command prompt, run:


bcdedit /set {bootmgr} path \EFI\opensuse\shim.efi

This assumes that you configured opensuse for secure-boot. Otherwise, change that “shim.efi” to “grubx64.efi”.

That tells Windows to use grub as its boot manager. You then use the grub menu to get to Windows.

To undo that change, you can use


bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi

which restores the previous value.

For safety, you might want to first boot linux from a CD or USB, mount the EFI partition, then make sure that “/EFI/opensuse/shim.efi” exists relative to the mount point.

What I described is working fine for me. Whenever Windows takes over booting, it boots into the grub menu.

In those lines, do I simply copy paste? Or are there variables that I need to adjust?

On Mon 06 Jan 2014 10:46:01 PM CST, nrickert wrote:

Shadowolf7;2614271 Wrote:
> Yes, it was fine until I booted into Windows from GRUB. Then once I
> rebooted, GRUB was gone.

Here’s what you can try. Open an Administrator command prompt in
Windows 8. From that command prompt, run:

Code:

bcdedit /set {bootmgr} path \EFI\opensuse\shim.efi


This assumes that you configured opensuse for secure-boot. Otherwise,
change that “shim.efi” to “grubx64.efi”.

That tells Windows to use grub as its boot manager. You then use the
grub menu to get to Windows.

To undo that change, you can use

Code:

bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi


which restores the previous value.

For safety, you might want to first boot linux from a CD or USB, mount
the EFI partition, then make sure that “/EFI/opensuse/shim.efi” exists
relative to the mount point.

What I described is working fine for me. Whenever Windows takes over
booting, it boots into the grub menu.

Hi
Wouldn’t you also need to ensure the system (Windows) does a full
shutdown, not a hybrid one…

For example;
http://www.howtohaven.com/system/how-to-shutdown-windows-8.shtml


Cheers Malcolm °¿° SUSE Knowledge Partner (Linux Counter #276890)
openSUSE 13.1 (Bottle) (x86_64) GNOME 3.10.2 Kernel 3.11.6-4-desktop
If you find this post helpful and are logged into the web interface,
please show your appreciation and click on the star below… Thanks!

Copy/paste should be fine. But I still recommend that you make sure the referenced file exists in the efi partition. Check from a booted linux USB or CD or DVD. Use something like:


# mount /dev/sda1 /mnt
# ls -l /mnt/EFI/opensuse

The “/dev/sda1” might be wrong. It might be “/dev/sda2”, or it might be “/dev/sdb1” if a USB boot makes “sda” the name of the USB device.

You are looking for a file named “shim.efi”. Running “parted -l” might tell you which partition is the EFI partition.

That’s certainly excellent advice, though not strictly related to the current problem.

OK, some weirdness. I haven’t applied the suggested fix yet. However, when I went to boot my ccomputer, it presented me with a touch-friendly boot selection screen. However when I selected openSUSE it coughed up some errors. Also now when I shut down, it gives me the text only boot selection when I turn the computer on again. I would include pictures, but susepaste won’t allow me to upload them, and Google won’t let me link them.

So the first is the usual boot selection screen, nothing unusual except it is using the text only mode. Secondly it coughs up the error “Windows failed to start. A recent hardware or software change might be the cause.” I can however boot into Windows. I’m wondering if it is due to secure boot, or the Windows bootamajig thinking openSUSE is some version of WIndows.