Ubuntu – Windows 8 removes Grub as default boot manager

dual-bootuefivaiowindows 8

I have a Sony VAIO S series with Windows 8 preinstalled, and I installed Ubuntu 12.10 on a new partition. When the PC boots Grub is display, and I can choose between Windows 8 (didn't worked at the beginning, had to change Grub settings) and Ubuntu 12.10. When I select Ubuntu 12.10 everything is OK, but when I use Windows 8, and I restart Grub isn't displayed anymore (Windows 8 boots immediately).

I booted a Ubuntu 12.10 LiveUSB, used efibootmgr, and found out that Windows 8 (each time it boots) changes EFI default bootloader from Grub to Windows Boot Manager.

How do I change this in Windows 8? I read something about bcdedit, but it does not work or I don't know how to use it…

Best Answer

I can make no promises, but try this from a Windows Command Prompt window launched with Administrator privileges:

bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

Note that {bootmgr} should be typed exactly; that's not a variable. If that doesn't work, you could try this in Linux:

  1. Back up the entire contents of /boot/efi (your EFI System Partition, or ESP).
  2. Type sudo mv /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi /boot/efi/EFI/Microsoft.
  3. Type cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi.
  4. Create a new /etc/grub.d/40_custom file entry that refers to EFI/Microsoft/bootmgfw.efi. Model it after the existing entry in /boot/grub/grub.cfg that refers to EFI/Microsoft/Boot/bootmgfw.efi; just remove Boot from the boot path and give the entry a new name.
  5. Type sudo update-grub to install the new GRUB entry.

When you reboot, GRUB should come up. The trouble is that if/when Windows decides to re-install its boot loader, the system will start booting straight to Windows again.

For step 4, you can:

  1. Copy the 40_custom entry beginning with menuentry 'Windows ...' situated between a set of ### BEGIN <path> ### and ### END <path> ### tags/comments. This is the entry having the path containing Boot.
  2. Create a new entry in file /etc/grub.d/40_custom by adding the copied menuentry.
  3. Change the name of the new entry (original should be Windows Boot Manager or something similar).
  4. Change the path from EFI/Microsoft/Boot/bootmgfw.efi to EFI/Microsoft/bootmgfw.efi.

EDIT:

Since writing this answer, I've become aware of a third-party Windows tool called EasyUEFI, which is an easier GUI tool than bcdedit for adjusting the EFI boot order from Windows. I don't know if EasyUEFI will stop Windows from making changes, though, if Windows has a habit of setting itself as the default on every boot. Thus, bcdedit may still be required, but EasyUEFI is definitely worth trying, too.