Why is 'disklabel'ng a new drive so difficult?

Antony Mawer fbsd-questions at mawer.org
Thu Mar 29 22:07:22 UTC 2007


On 29/03/2007 6:41 AM, Kris Kennaway wrote:
> On Wed, Mar 28, 2007 at 05:26:49PM -0300, Marc G. Fournier wrote:
>> Just bought a new WD SATA drive: WDC WD5000YS-01MPB1 09.02E09
>>
>> Tried to disklabel it, and it gives me all kinds of warnings when I look at it 
>> after running the disklabel:
>>
>>
>> ganymede# bsdlabel -w ad4s1 auto
>> ganymede# bsdlabel ad4s1c
>> # /dev/ad4s1c:
>> 8 partitions:
>> #        size   offset    fstype   [fsize bsize bps/cpg]
>>   a: 976767986       79    unused        0     0
>>   c: 976768002       63    unused        0     0         # "raw" part, don't 
>> edit
>> partition a: partition extends past end of unit
>> partition c: partition extends past end of unit
>> bsdlabel: partition c doesn't start at 0!
>> bsdlabel: An incorrect partition c may cause problems for standard system 
>> utilities
>>
>> Even if I try to use /stand/sysinstall to do the fdisk, the end result has 
>> 'issues' ...
>>
>> So, what is the generally accepted method of label'ng a new drive? :(
> 
> I learned a useful trick the other day: you can use abbreviations like
> "1g", also '*' to mean "automatically calculate".  See the manpage.

This timely thread came as I was experimenting with disklabel, and I 
noticed in the man page it says this:

>     offset  The offset of the start of the partition from the beginning of
>             the drive in sectors, or * to have bsdlabel calculate the correct
>             offset to use (the end of the previous partition plus one, ignor-
>             ing partition `c'.  For partition `c', * will be interpreted as
>             an offset of 0.  The first partition should start at offset 16,
>             because the first 16 sectors are reserved for metadata.

When I tried using "16" as the offset for my 'a' partition, I could no 
longer user "*" on my last partition to make it auto-size... disklabel 
then sized the partition so it went past the end of the disk. Presumably 
it's not taking into account the starting offset when it does this (gm0 
is a 3gb gmirror device, with a single slice created on it using fdisk):

     $ bsdlabel -R /dev/mirror/gm0s1 /dev/stdin
     8 partitions:
       a:  2097152       16    4.2BSD
       b:   102400        *      swap
       c:        *        0    unused
       d:   102400        *    4.2BSD
       e:        *        *    4.2BSD
     partition e: partition extends past end of unit

However if I change the 'a' partition offset to 'e', it works:

     $ bsdlabel -R /dev/mirror/gm0s1 /dev/stdin
     8 partitions:
       a:  2097152        0    4.2BSD
       b:   102400        *      swap
       c:        *        0    unused
       d:   102400        *    4.2BSD
       e:        *        *    4.2BSD
     $ disklabel /dev/mirror/gm0s1
     # /dev/mirror/gm0s1:
     8 partitions:
     #        size   offset    fstype   [fsize bsize bps/cpg]
       a:  2097152        0    4.2BSD        0     0     0
       b:   102400  2097152      swap
       c:  6281352        0    unused        0     0         # "raw"
       d:   102400  2199552    4.2BSD        0     0     0
       e:  3979400  2301952    4.2BSD        0     0     0

Is it important to use 16 as the offset still, or is this a historical 
piece of information that is no longer relevant? Or is this is a bug in 
disklabel that should be fixed?

--Antony


More information about the freebsd-questions mailing list