Windows on a hybrid MBR/GPT

gpthybrid-mbrpartitioningwindowswindows 7

I thought I'd finally relegated Windows to life inside a virtual machine, but alas, I came across some games I'd like to play that just won't do in that setup. In the days since Windows last occupied its own specified chunk of my disk I've done a lot of flipping around with different OSes and Linux distributions, and it turned out that while I had free space, I was at the maximum number of partitions supported by MBR partition tables. So, believing that it should Just Work® here in the 21st century and having performed a cursory examination of Google that indicated it should work, I converted over to a GUID partition table (GPT) and attempted to install Windows 7. Lo and behold, Windows 7 only works with GPTs on EFI systems, and mine uses BIOS. I should have noticed this in my earlier research, but that would have just been too easy.

So, I'm left with the choice of converting back to MBR and trying to jigger my partition layout around such that I can make one for Windows, or going with a hybrid MBR. The latter sounds more appealing. Unfortunately, there are lots of scary warnings about hybrid MBRs on the Internet, so I have a few questions.

Will Windows do something ugly to my bootloader since it's really on GPT but it will see MBR? Will that require more repair than booting from a LiveCD and running grub-install? Is there anything I need to avoid other than making sure I never touch partitioning tools on Windows? Will my computer explode? Would lots of headaches be saved if I just switched back to MBR? (I understand that Macs use hybrid MBRs with Boot Camp, so hopefully this won't be as difficult as I'm making it out to be.)

Best Answer

There's no need to regress to the MBR partitioning scheme, nor even any need for a "hybrid MBR" partitioning scheme. (I have such on one of my machines, and attest that they are not for the fainthearted.)

Windows 7 can use EFI-partitioned discs just fine. It just cannot be bootstrapped from them on non-EFI machines, and (to protect you from yourself, in Microsoft fashion) refuses to install on them in the first place. In your case, your problem is a fundamental deficiency of your firmware, and isn't really a Windows issue at all. Your firmware doesn't understand the EFI partition table.

Such understanding is necessary if one wants to convert one's operating system bootstrap to be on EFI partitioned discs. One's firmware needs to know to put up the EFI Boot Manager menu, and then load the selected operating system loader program from the EFI System Partition. Your firmware isn't very smart, though, and doesn't know how to do much more than load the "master boot record" and run its bootstrap code. On an EFI partitioned disc there's no code in the "master boot record" to crank through the rest of the EFI boot process.

At best, right now, you have MBR bootstrap code that is equally as ignorant of the EFI partition table scheme as your firmware, and that's expecting to find and process an MBR partition table. What you need is two things:

  • to have MBR bootstrap code that knows how to read the EFI partition table, and find a second-stage bootstrap loader that is also EFI-partition-table-capable and which will enable you to in turn load and run operating system boot loaders
  • some way of persuading Windows 7 to install on an EFI partitioned disc

The first is not impossible. There are two sources of such EFI-partitioning-aware MBR bootstraps:

  • I've written and published one (after this answer was first written, in fact).
  • The so-called "GPT" MBR boostrap in SYSLINUX, written by H. Peter Anvin, is another.

Both will look for the "active" partition, and load and run its VBR, effectively bootstrapping in the old PC/AT and PC98 way but with an EFI partition table. Failing those two, the best alternatives that you'll get right now are:

  • GRUB 2: Unfortunately this still relies upon poking hardwired numbers into its MBR bootstrap code to tell it where to find the next part of its loader. But that second stage, once loaded and run, is fully capable of understanding the EFI partition table and bootstrapping operating system boot loaders from within partitions. It doesn't know how to run EFI operating system boot loaders, though, it only knowing how to cope with either VBRs or Linux and the BSDs.
  • UEFI DUET: (Rod Smith discusses this in detail.) Again unfortunately, although this installs in a volume and brings up a fully capable EFI Boot Manager and EFI Shell, it still needs something else to load and run its VBR in the first place. And right now that something else has to be something like GRUB2, which itself rely upon hardwired sector numbers in the MBR code, or SYSLINUX, or indeed my EFI-partitioning-aware MBR bootstrap. But you will be able to run proper EFI operating system bootstrap loaders.

The second (persuading Windows 7 to install on an EFI partitioned disc) is achievable, with the x86-64 flavour of Windows 7 at least. It's complex, not officially supported by Microsoft, and requires making what is effectively your own Windows installation disc with the EFI version of Microsoft's Boot Manager on it, and running that from within an EFI boot environment somehow. (If you have UEFI DUET installed, this is fairly easy, of course.) But it convinces Windows 7 that it its installer was bootstrapped on an EFI system, which criterion the installer uses to determine whether it will allow Windows to be installed on an EFI partitioned hard disc.

Of course, there's the additional, final, complexity of, once installed, bootstrapping Windows 7 from day to day; because the installer, knowing that you have EFI firmware, will have installed the EFI version of Microsoft's Boot Manager. You'll thus need either:

  • to install the PC/AT version of Microsoft Boot Manager, and arrange for GRUB2 to know where it is, if you are using GRUB2; or
  • to always boot UEFI DUET and run the EFI version of Microsoft Boot Manager from there.

Pretty much all of this nonsense just goes away if one has EFI firmware in the first place. Windows 7 (x86-64) will install happily, and an EFI Boot Manager that understands the EFI partition table and that will load and run Microsoft's Boot Manager (as well as any other EFI-bootable operating system) directly from its ordinary program image file in the EFI System Partition, comes with the firmware.

Related Question