New BSD Installer
Hiroki Sato
hrs at FreeBSD.org
Fri Feb 17 07:07:05 UTC 2012
Freddie Cash <fjwcash at gmail.com> wrote
in <CAOjFWZ5EhGFr_Vp0+TRfxvgm6KZxv9QO3UfVdKurA96z3axDMQ at mail.gmail.com>:
fj> On Thu, Feb 16, 2012 at 8:20 PM, Hiroki Sato <hrs at freebsd.org> wrote:
fj> > Jeremy Chadwick <freebsd at jdc.parodius.com> wrote
fj> > in <20120217030806.GA62601 at icarus.home.lan>:
fj> >
fj> > fr> On Thu, Feb 16, 2012 at 07:40:35PM -0700, Warren Block wrote:
fj> > fr> > Sorry, I may be misunderstanding your point. GEOM classes don't
fj> > fr> > lie, they accurately represent the space. The space provided by a
fj> > fr> > gmirror is one block less than the actual space occupied, to allow
fj> > fr> > for the metadata block at the end. The problem is that GPT puts
fj> > fr> > backup partition tables at the end of the physical (not logical)
fj> > fr> > device. Create a GEOM device on that drive, and the GEOM metadata
fj> > fr> > overwrites the backup GPT partition table. Well, the last block of
fj> > fr> > it, anyway.
fj> > fr> >
fj> > fr> > But create the GEOM device inside a GPT partition that spans the
fj> > fr> > drive, and things are fine. The GPT backup tables are safely
fj> > fr> > outside the GEOM metadata, which is safely outside of the data.
fj> > fr>
fj> > fr> I wasn't aware you could do that. I was only aware that it was the
fj> > fr> other way around. That (my) misconception seems to also be relayed
fj> > fr> by others such as Miroslav who said:
fj> > fr>
fj> > fr> >>GPT doesn't play nice with GEOM classes which store their metadata
fj> > fr> >>on last sector. For example, you can't use gmirror of a whole drives
fj> > fr> >>and use GPT on top of this mirror. (and gmirror is not the only one)
fj> > fr>
fj> > fr> So if I read this correctly, it means that the erroneous behaviour is
fj> > fr> the result of someone doing things "in the wrong order" (for lack of
fj> > fr> better terminology).
fj> >
fj> > Well, does GPT really depend on the absolute last block? The header
fj> > has fields for both the first and the last LBAs and they do not have
fj> > to be matched with the physical capacity. Creating a gmirror first,
fj> > and then creating a GPT on it does not work? I do not think it is
fj> > true, and I suspect a description on gmirror recommending
fj> > kern.geom.debugflags=17 in the handbook is the source of the problem.
fj>
fj> It's not the partitioning that's the issue. It's the order that GEOM
fj> providers and GPT partition tables are "tasted".
fj>
fj> You can gmirror two disks, then GPT partition the gm0 device without
fj> any issues. As you noted, the first/last sectors are 1 less than the
fj> physical disk (the size of the gmirror provider).
fj>
fj> When you boot, though, the gptboot loader only sees the GPT table, it
fj> doesn't know that it's part of a gmirror setup. Thus it loads the
fj> GPT, notices that the size of the GPT is 1 less sector than the size
fj> of the disk, can't find the secondary GPT table as the last sector of
fj> the disk is gmirror metadata, and complains about corrupted GPT.
fj>
fj> Then the kernel loads, gmirror "tastes" the disk, finds the gmirror
fj> metadata, configures the gmirror provider, and now all the GPT stuff
fj> matches again. And the system carries on correctly.
fj>
fj> The issue is that we don't have a GEOM-aware loader. Or, at least,
fj> that the gpt*boot loaders read the GPT table(s) before configuring the
fj> GEOM providers.
No, the issue is our gptloader assumes the backup header is always
located at the (physical) last sector while this is not mandatory in
the UEFI specification. GEOM-based logical volumes suffer from this
assumption at boot time. It is not practical (and not necessary) to
taste the volumes before loading a kernel.
If the primary header is valid, using a lookup order of the
hdr_lba_alt(AlternateLBA), the hdr_lba_end(LastUsableLBA), then
drvsize() - 1 looks reasonable to me. The current code uses
drvsize() - 1 first and then looks up the AlternateLBA only when
drvsize() failed.
-- Hiroki
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20120217/d627bc17/attachment.pgp
More information about the freebsd-stable
mailing list