grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

hybrid DOS/GPT and BIOS Boot Partition


From: Robert Millan
Subject: hybrid DOS/GPT and BIOS Boot Partition
Date: Fri, 2 Jul 2010 14:39:19 +0200

Hi,

Sorry for breaking the thread, but I just stepped in because I
participated in the standarisation of the BIOS Boot Partition
mechanism, and in early discussions about this hybrid DOS/GPT protocol
which led to the standard being discussed, and I want to clarify
something.

GRUB implements the BIOS Boot Partition, and SYSLINUX implements the
hybrid DOS/GPT protocol [1].  It is too easy to get the impression
that both protocols are somehow overlapping, or that they are
different ways to solve the same problem. This is NOT TRUE.  They're
actually two solutions for two very different problems.

The first problem is, if we have more than one OS, how do we select
which one to boot?

GRUB implements the obvious solution (ask the user!).  But in the old
days, MSDOS implemented an awkward scheme [2], designed with
proprietary boot protocols in mind: multiple bootloaders can be
installed; each bootloader can "chainload" another bootloader, so that
even if the boot protocols are secret, it is possible to install more
than one OS in the same PC.  I believe current MBR used with SYSLINUX
goes a step further and allows user to select an entry, but still with
the constraints of 440 bytes, the user interface becomes very
unfriendly and limited.

Note that GRUB implements part of this "chainload" mechanism as well,
for the sake of compatibility with Microsoft Windows.  It ignores the
"bootable flag", and allows user to chainload to a partition using
this protocol, on request.  With GPT, there's currently no point in
implementing it, since Windows doesn't (yet?) follow this scheme [3].

The second problem is, 440 bytes is such a small space, can we do
everything we want with it?  Or can we have a bigger MBR?  Can we
increase the amount of unmanaged code?

With MSDOS labels, GRUB solved this by using the post-MBR gap as an
extension of the MBR. The idea is that this area is unmanaged, as in,
whoever owns the MBR also takes ownership of those sectors, and
there's no mechanism to have more than one such area (nor any need for
such mechanism).  SYSLINUX solved this by relying on poor, limited MBR
as described earlier.

When it comes to GPT, GRUB solved this by using a new instance of the
same unmanaged extension of the MBR: the BIOS Boot Partition.  It's
effectively the same thing, except that with it being a partition,
people tend to think it somehow plays a role in the MSDOS partition
handover protocol, and mix things up.

As described earlier in this list, SYSLINUX "solved" this problem by
implementing a poor, limited MBR which skips parts of the GPT spec
(CRC verification IIRC) in order to squeeze their code in 440 bytes.
There's NO NEED to restrict for this kind of constraint.  I would
advice SYSLINUX developers to take advantage of the BIOS Boot
Partition in order to fit whole GPT parser.

I think this makes clear that both protocols aren't exclusive to each
other, it just happens that they solve different problems, with GRUB
and SYSLINUX only interested in one of each, and already having a
solution (or simply not caring) about the other.

[1] I refer to it in generic terms, because the implementation in
SYSLINUX pre-dates the standard; based on my previous discussion with
HPA, I believe he's been involved in the development of this standard,
and the result is modeled after his implementation.

[2] Partitions have a so-called "bootable flag". MBR probes for
bootable flags and automatically selects a partition based on them.

[3] Apparently, Microsoft drank the EFI kool-aid and still hasn't
figured out that one can actually boot from a GPT label on a PC/BIOS
system.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]