Re: How to read a disklabel (Re: What replaces DIOCGDINFO?)

From: Warner Losh <imp_at_bsdimp.com>
Date: Mon, 26 Jan 2015 00:22:55 -0700
> On Jan 25, 2015, at 10:57 PM, Perry Hutchison <perryh_at_pluto.rain.com> wrote:
> 
> Andreas Nilsson <andrnils_at_gmail.com> wrote:
>> On Sun, Jan 25, 2015 at 9:31 AM, Perry Hutchison <perryh_at_pluto.rain.com>
>> wrote:
>>> -r276737 removed 4 ioctls, including DIOCGDINFO, from <sys/disklabel.h>.
>>> The commit log entry says only "Remove old ioctl use and support, once
>>> and for all."
>>> 
>>> What are users of that mechanism supposed to use instead?
>> 
>> http://lists.freebsd.org/pipermail/freebsd-current/2015-January/053960.html
>> might have the answer for you.
> 
> Same symptom, but DIOCGMEDIASIZE is not the solution in this case
> because the port reads the disklabel to identify the partition that
> contains a particular sector of the device.  To do that, AFAIK it
> needs to actually retrieve and examine the label.  The other ioctls
> in <sys/disk.h> don't look all that promising, either.

Most modern disks don’t even have BSD disk labels. They just have GPT
partitions. So the DIOCGDINFO failed to work an interesting amount of
the time. There’s no easy way to fix that, since the disk label sizes aren’t big
enough to return GPT data.

gpart list contains the information needed. You can find the source in
/usr/src/sbin/geom/class/part/geom_part.c libgeom(3) has some of the
info you’ll need as well. However, it is likely easier to pull it out of either
the XML version of the config sysctl (kern.geom.confxml) or the simple
text version (kern.geom.conftxt). I imagine the latter is likely best for
finding which partition an absolute sector belongs to.

Warner
Received on Mon Jan 26 2015 - 06:22:58 UTC

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