grub-devel
[Top][All Lists]
Advanced

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

[grub-setup] New procedure to choose the embedding area


From: Grégoire Sutre
Subject: [grub-setup] New procedure to choose the embedding area
Date: Fri, 11 Jun 2010 00:25:09 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100515 Icedove/3.0.4

Hi,

[ This is an extended summary of discussions that took place on irc. ]

The current version of grub-setup requires an msdos or gpt partitioning
scheme, and is not compatible with hybrid partitioning schemes (i.e. two
top-level disklabels).

Some disklabels have a specific partition type for bootstrap code, e.g.
gpt and bsd.  Apple partitions have a type that is actually a string (32
chars), so we could use a specific type for grub bootstrap code (e.g.
`Grub_Bootstrap' or simply `Grub').  Maybe there are other disklabels
(among those supported by GRUB) with a specific partition type for boot
partitions.

As you know, there isn't a specific partition type for bootstrap code in
msdos disklabels.  The current implementation of grub-setup embeds after
the MBR when the detected disklabel is msdos.  But this is fragile:
many tools do not hesitate to write in this area regardless of what is
there.

Ideally, grub-setup should use a dedicated boot partition if it finds
one, and embed after the MBR only as a last resort.  Still, we must be
careful with dedicated boot partitions when there are several top-level
disklabels: the disklabel containing the dedicated boot partition could
be obsolete (e.g. a leftover from some prior installation).  In that
case, we may overwrite user data when embedding in the boot partition.
So we should check that the boot partition does not overlap another
partition.

To sum up, the new procedure to select the embedding area would be:

 1. FOREACH top-level partition p    /* i.e. p->parent == NULL */
 2.    IF p is a dedicated (gpt|bsd|apple|...) boot partition AND
          p does not overlap with another top-level partition
 3.    THEN
 4.       return p
    /* No appropriate top-level dedicated boot partition. */
    /* Handle the standard msdos case as an exception. */
 5. IF the disk contains a single top-level disklabel, and this
       disklabel is an msdos one
 6. THEN
 7.    return [1, n-1] where n is the minimal start sector of the
                       top-level partitions
    /* Do not try to be too smart...  Abort! :-) */
 8. explain to the user why no embedding area could be found
 9. return NULL

The first FOREACH loop discards nested partitions, so it would miss for
instance a dedicated boot partition (hd0,msdos2,bsd7).  It would
instead try to embed in the post-MBR gap, which may fail or be more
risky than in the nested dedicated boot partition.

What do you think regarding this issue?  Should we accept any dedicated
boot partition, even if it is nested?

This message is only a proposition, and I look forward to your comments
and suggestions.

Grégoire




reply via email to

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