On Thu, Dec 23, 2021 at 12:08:49PM -0500, Rob Whitlock wrote:
> On Thu, Dec 23, 2021 at 1:15 AM Theo de Raadt <dera...@openbsd.org> wrote:
> >
> > Crystal Kolipe <kolip...@exoticsilicon.com> wrote:
> >
> > > On Tue, Dec 21, 2021 at 06:04:28PM -0500, Rob Whitlock wrote:
> > > > A problem seems to be that there is no disklabel entry for the ExFAT
> > > > partition.
> > >
> > > You probably wrote a BSD disklabel to the disk before creating the
> ExFAT partition.
> > >
> > > If there is no on-disk disklabel, the kernel will create one in memory
> based on information from other partitioning schemes, (MBR, GPT).  So in
> this case, as you change those MBR or GPT partitions, those changes will be
> reflected in the disklabel that the kernel sees.
> > >
> > > Once you actually write a disklabel to the disk, that on-disk disklabel
> is then used in place of calculating one each time the disk is attached,
> and the automatic parsing of MBR and GPT partition information stops.
> > >
> > > To solve your problem, you need to add the details of the ExFAT
> partition to the BSD disklabel.  You can either do that manually with the
> disklabel command, or since you do not have any OpenBSD partitions on the
> disk, you could overwrite the on-disk disklabel, allow the kernel to
> generate one automatically with the correct information, then optionally
> force it to be written to the disk by running disklabel and entering 'w' at
> the interactive prompt.
> >
> > This can be investigated with
> >
> >      disklabel -d
> >
> > (BTW, when the disklabel is constructed from other information on the
> disk,
> > we call it a "spoofed label")
> 
> I would like to avoid modifying the data on the disk. Is there a way to use
> disklabel to update the in-core copy of the disklabel with a spoofed label,
> without also writing it to disk? I see in the disklabel(5) manual page that
> the DIOCSDINFO ioctl updates the in-core copy, so it seems it should be
> technically possible, but I don't see how to do it with the disklabel(8)
> program. My understanding of disklabel -d is that it gives you a default
> disklabel to start with, but does not affect how or where the disklabel is
> written.

The output from 'disklabel -d' will simply show us the spoofed label
regardless of whether there is a real disklabel already written to the disk
or not, (which I now suspect that there is not, having noticed that your duid
is 0000000000000000).

If the spoofed label includes your non-OpenBSD partitions, then presumably
the disk already has a real label written to it which does not include them.

If the spoofed label does not include your non-OpenBSD partitions, then for
some reason the kernel is not parsing the data from the GPT, and we will
presumably need a hexdump of the GPT to see why.

Reply via email to