disklabel in raw and kernel mode disagree

Matthew Dillon dillon at apollo.backplane.com
Thu May 31 10:59:26 PDT 2007

:on a usb stick:
:disklabel -r -e yields one c: partition starting at offset 63.  using thi=
:s disklabel unmodified produces complaints from disklabel itself:
:partition c: partition extends past end of unit
:Warning, partition c doesn't start at 0!
:doing the same without -r produces the right offset (0).
:  simon

    On what device?  If you do it on the raw device (e.g. /dev/da0) there
    won't be any label snooping.  Labels only get snooped on slice devices,
    which is why we really only support labeling slice devices.  You might
    be able to get away with specifying e.g. /dev/da0s0 though.

    The on-disk version of the disklabel is different from the in-memory
    version.  This is historical, inherited from FreeBSD (and even before
    that I think)... and I wish now that I had removed it years ago but
    too late now...  all the offsets in the on-disk label are absolute,
    i.e. adjusted to add in the slice offset.

    When the kernel read-snoops the on-disk label it adjusts the offsets
    back to 0.  When the kernel write-snoops it adjusts the offsets back
    to absolute.

    What I would like to do is just read and write the label straight,
    without snoop-adjusting it.  The kernel NEVER uses the absolute offsets,
    it always uses the slice-relative offsets (i.e. starting at 0).


More information about the Bugs mailing list