tech-kern archive

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

Re: GPT attributes in dkwedge [PATCH]



September 15, 2023 at 10:15 AM, "Martin Husemann" <martin%duskware.de@localhost> wrote:


> 
> On Fri, Sep 15, 2023 at 04:01:15PM +0000, Emmanuel Dreyfus wrote:
> 
> > 
> > A multiboot bootloader cannot, because all the information that is passed
> >  is about partition numbers. There is no way of specifying a LBA offset, 
> >  hence the setup where you have a GPT inside raidframe seems impossible
> >  to support.
> > 
> 
> Can you describe your setup and the boot order in more details?
> I guess there is some fundamental misunderstanding somewhere.

Since I was the one who mentioned the issue to Emmanuel allow me to chime in here.... 
 
> Where does your kernel live and how is it loaded? What partition(s)
> have the bootme flag? I would never expect it to make any sense in the
> inner GPT of a raid set, but only the (outer) GPTs of the components
> (so firmware finds the bootloader).

This came from attempting to install NetBSD-10_BETA on some new hardware, 
using sysinst, and following my nose as though I were a beginner (full 
disclosure: sysinst was modified to automatically add 'absent' for a 
missing component for a RAID 1 set so I would only need to have a single 
component available.  But otherwise a vanilla 10-beta install).

I took wd0 (or equivalent) and asked it to put a RAID partition on it.  
It happily made a new GPT for me, with one partition for RAID.  (i.e. 
no EFI partition, which bit me after).  I then put that new RAID partition 
into 1/2 of a RAID 1 set, and  old it to configure and install to raid0. 

I told it 'use default partitions'.  The resulting partitions were similar to:

chicken# gpt show -a raid0
     start      size  index  contents
         0         1         PMBR
         1         1         Pri GPT header
         2        32         Pri GPT table
        34        30         Unused
        64    262144      1  GPT part - EFI System
                                 Type: efi
                                 TypeID: c12a7328-f81f-11d2-ba4b-00a0c93ec93b
                                 GUID: 00c87892-e798-48dd-b0c7-abf421d25302
                                 Size: 128 M
                                 Label: 
                                 Attributes: None
    262208  14823680      2  GPT part - NetBSD FFSv1/FFSv2
                                 Type: ffs
                                 TypeID: 49f48d5a-b10e-11dc-b99b-0019d1879648
                                 GUID: ca6ef7c6-551b-475b-9211-fa08d0402165
                                 Size: 7238 M
                                 Label: 
                                 Attributes: biosboot
  15085888   4184064      3  GPT part - NetBSD swap
                                 Type: swap
                                 TypeID: 49f48d32-b10e-11dc-b99b-0019d1879648
                                 GUID: 78bbf8c1-d5ac-43ad-8f06-d545206c2fb8
                                 Size: 2043 M
                                 Label: 
                                 Attributes: None
  19269952        31         Unused
  19269983        32         Sec GPT table
  19270015         1         Sec GPT header
chicken# 

(the above is from a test VM.  The original machine that I had this issue on
 is now in production with custom GPT setup.  But it is trivial to replicate
 the setup).  That is, it automatically created the EFI partition as the 
*first* partition in the RAID set. I later learned that if I made a EFI 
partition (with the right /usr/mdec/*.efi bits) on wd0 I would get a lot 
further.  I would get even further still if I didn't just 'use default partitioning' 
in sysinst, and have my "/" GPT partition as the partition at index 1 in the 
RAID.  Without Emmanuel's changes "/" needs to be at GPT partition index 1, 
otherwise rf_buildroothack() won't work. 

To answer your last questions: The kernel lives on raid0 in GPT partition 2. 
By default, it isn't loaded, as UEFI can't find it, as there is no EFI partition
by default on wd0.  If I add an EFI partition with /usr/mdec/*.efi in efi/boot, 
then the kernel is correctly loaded from raid0 in GPT partition 2.  The 'bootme' flag
is added to GPT partition 2, but that doesn't help with rf_buildroothack() if '/'
isn't actually at GPT partition 1.  And I agree that I wouldn't expect it to find
the EFI bits in the RAID set, but that's where sysinst put things by default.

So no, Emmanuel's changes arn't needed if you really know what you're doing
on an install with sysinst, but a novice just following the default is 
currently going to really be a long way from a bootable system. (I'm not 
even touching the need to set 'bootme' or to populate the out-of-RAID EFI 
partition or to mark the RAID set as '-A soft' in order to get to something
 working.... and I also see addressing these as something that can happen after 
netbsd-10 is shipped, as I think this will require some involved changes to sysinst)

I hope this helps clarify things.  
(Yes, I'd be happy if rf_buildroothack() could Go Away, or at least be reduced in 
complexity..)

Thanks.

Later...

Greg Oster


Home | Main Index | Thread Index | Old Index