grub-devel
[Top][All Lists]
Advanced

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

Re: grub2 and hybrid MBR booting


From: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: grub2 and hybrid MBR booting
Date: Sat, 03 Jul 2010 21:22:10 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100515 Icedove/3.0.4

On 07/02/2010 02:13 AM, Elliott, Robert (Server Storage) wrote:
>>> In the UEFI Working Group (which defines GPT) and the T13 (ATA)
>>> standards bodies, we defined a slightly different method:  the GPT 
>>> partition record now includes a Legacy BIOS Bootable bit that can be 
>>> set for a partition like the BIOS boot partition,   The algorithm is 
>>> documented in T13 EDD-4 revision 2 and later (see
>>> http://t13.org/Documents/MinutesDefault.aspx?DocumentType=4&DocumentSta
>>> ge=1).
>>>
>>>
>>>       
>> At last. It's refreshing from the usual lie that you need EFI to boot
>> from GPT-partitioned disk.
>> But I don't see the need to standartise the interface between MBR code
>> and the rest. Standartisation is good only for interoperability between
>> different software. But in this case both parts are from the same
>> bootloader so it will only reduce flexibility.
>>     
> The "handoff" contents are defined to better support MBRs and VBRs that
> aren't tightly coupled.  
Why such schemes are of concern? Someone who wrote the whole bootloader
can write 440 bytes more and doesn't need another company for it. If
it's for loading one bootloader from another multiboot is much more
appropriate. GRUB tries to go away from chainloading as far as possible.
It's now still used only for windows but even this will change soon with
"ntldr" command which is able to load ntldr or bootmgr file.
> The VBR can ignore the data structure if it 
> doesn't need it. Syslinux felt it helpful to support legacy VBRs
> (particularly when they are located < 2.2 TB).
>
>   
Unless VBR itself is designed for this you can't load it this way.
>
>
>> When we added GPT support virtually unlimited embedding zone was the
>> great plus. Switching to msdos-like scheme would be a huge step
>> backwards (especially that you have no MBR gap). It's a repetion of old
>> mistakes under new sauce. MSDOS scheme already forced anti-patterns and
>> any new scheme must be based on saner pattern.
>>     
> What's an "anti-pattern"?
>
>   
A design decision to avoid.
> The change here would be that the grub MBR code would locate the
> grub VBR code (the BIOS Boot Partition) by looking for the Legacy BIOS 
> Bootable bit in the GPT partition record, rather than have hardcode
> the LBA at some offset in the MBR.
>
>   
This scheme already showed its flaws in the past. Multibooting by
changing this flag is impratical to say the least and over-reliance on
this flag to locate boot partition made it that bootloader must set this
flag before chainloading, so no bootloader other than microsoft one
implements msdos scheme. You would need a flag per bootloader. It boils
back to GUID.
Using GUID in GPT to locate the embedded zone would be good but it has
nothing to do with this standard. Robert made some work in this
direction but never finished (he wrote MBR but not some required changes
to diskboot.img) and nobody picked up his work.
> Although all legacy BIOS boots will fail if LBA 0 goes bad, this allows
> inclusion of more than one legacy bootable partition on the disk to 
> tolerate a failure in those LBAs.
Bad sectors are pretty rare and overwritten boot partition would need
manual clear of bootale flag which requires some environment which would
be able to just reinstall bootloader.
>   It would also tolerate failures of 
> the GPT region (since there's a backup GPT at the end of the disk
> that can be used).
>
>   
Whether or not use GPT to locate embed partition would be a separate
thread and as I said using GUID would be good but noone ever completed
it for GRUB.

-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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