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

Warner Losh imp at bsdimp.com
Mon Jan 26 07:22:58 UTC 2015


> 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



More information about the freebsd-current mailing list