Re: [CFC/CFT] large changes in the loader(8) code

From: John Baldwin <jhb_at_freebsd.org>
Date: Wed, 27 Jun 2012 10:28:54 -0400
On Wednesday, June 27, 2012 8:45:45 am Andrey V. Elsukov wrote:
> On 27.06.2012 16:07, John Baldwin wrote:
> >> • Check the Signature
> >> • Check the Header CRC
> >> • Check that the MyLBA entry points to the LBA that contains the GUID Partition Table
> >> • Check the CRC of the GUID Partition Entry Array
> >> If the GPT is the primary table, stored at LBA 1:
> >> • Check the AlternateLBA to see if it is a valid GPT
> >> If the primary GPT is corrupt, software must check the last LBA of the device to see if it has a
> >> valid GPT Header and point to a valid GPT Partition Entry Array."
> > 
> > Right, we break the last rule.  If you want to use a partition editor
> > that doesn't grok gmirror (because you are using another OS's editor),
> > to repair a GPT, it will do the wrong thing.
> 
> When we are in the FreeBSD, our loader can detect that device size
> is lower than it see and it will work. When primary header is OK, then
> other OSes should work with this GPT. When it isn't OK, you just can't
> load other OS :)

Ah, yes.  The solution to violating standards is to make sure you never
use standards-compliant software.  That's a great argument. :)

(Although not entirely uncommon.  Standards aren't always perfect, but if
we had a way to not gratuitously violate them it would be nice to avoid
doing so.)

> > We can't write bootcode with gpart?  What do you think the 'bootcode' command
> > does?
> 
> `gpart bootcode -b` reads file, creates ioctl request and sends this data to
> the GEOM_PART class. GEOM_PART receives the control request, checks the data
> and writes it to the provider.
> `gpart bootcode -p` works like dd(1) and writes bootcode to the given partition.
> gpart(8) haven't any knowledge about specific partitioning scheme.

Correct, but in both cases it writes "bootcode".

> > Also, there is no reason we can't have a 'recover' command that attempts to
> > recover a corrupted table including repairing the PMBR.  gpart(8) already
> > generates a full PMBR when you use 'gpart create' to create a GPT even though
> > there isn't a GPT object yet.
> 
> `gpart create` creates only ioctl control request to the GEOM_PART class.
> GEOM_PART class creates new GPT geom object and this objects writes PMBR and its
> metadata to the provider.

You can't add a new ioctl?

-- 
John Baldwin
Received on Wed Jun 27 2012 - 15:30:56 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:28 UTC