Decision time.... should NATA become the default for this release?

Matthew Dillon dillon at apollo.backplane.com
Sun Jun 3 13:38:46 PDT 2007


:Actually, I wonder why we determine the functionality by the minor and no=
:t by the device.  Meaning:  No CD will *ever* have partitions or MBR, rig=
:ht?  But that's a property of the disk device.  Why do we reflect this pr=
:operty in the minor number?  Just to make it easier to follow from userla=
:nd?
:
:cheers
:  simon

    It has to do with how the disk management layer interprets the access to
    the device.  I want to have one common disk management layer for all
    storage devices.  The minor numbers tell the management layer whether
    it needs to interpret MBR and/or disklabel information or not.  It's
    a chicken-and-egg issue... sometimes we want the management layer to
    do an I/O to check for an MBR and/or disklabel, and sometimes we don't
    want the management layer to do anything at all because a read I/O might
    fail (e.g. when using burncd).  Even on disks which have MBRs and
    labels, sometimes we want to interpret them (when mounting something),
    sometimes we don't (when wiping or reinstalling the MBR/disklabel).

    This is how the minor number breaks down:

    * Partition number (a-j, etc)

	The partition number used to be only a few bits.  Now it is 8 bits.
	This gives us normal partition numbers 0-127 (e.g. once we support
	GPT it will come in handy).  parition #0 is 'a', #1 is 'b', etc.

	The 'whole slice' partition uses partition number 255.  This tells
	the disk layer to not try to interpret the disklabel at all but
	to give you raw access to the contents of a slice.

	Whole-disk slices (see below) use partition numbers 128-254 as
	special disk management layer bypasses.  For example, ACD uses 128
	as a raw CD bypass, and uses 129+ for direct audio track access.

    * Slice number (s0, whole-disk, s1, s2, s3, s4, etc).  There can be up
      to 128 slices.

	Slice #0 is the compatibility slice (s0).  This is a specially
	managed slice which is aliased to the first BSD slice found in
	the MBR.  On media which has no MBR or disklabel, the disk
	management layer manages the 'fake' disklabel using the compatibility
	slice number.

	Slice #1 is the whole-disk slice.  Accessing a device via this slice
	using the 'whole-slice' partition number (255) gives you access
	to the raw disk through the disk management layer (meaning that
	the media size is enforced for reads and writes).  Accessing a
	device using special partition numbers (128-254) bypass the 
	disk management layer entirely.

	Slice #2 is MBR slice 1 (s1)
	Slice #3 is MBR slice 2 (s2)
	Slice #4 is MBR slice 3 (s3)

	The slice numbering is historical.  That's why it looks so messy.

    * unit (cd0, cd1, cd2, etc)



    It used to be that the 'whole slice' partition was #2 (c).  That is,
    if you look on a 1.8 box you will notice that ad0s1c uses the same
    minor number as ad0s1, meaning the kernel can't tell the difference
    and will try to access the disklabel whether you want it to or not.

    Under 1.9 the 'whole slice' partition != partition c in the disklabel.
    The kernel can tell the difference and will not try to interpret the
    disklabel when you are accessing via a whole slice (e.g. like 'ad0s1').

    I'm sure there are still a few issues here and there but the jist of
    these changes is that we have a lot more partition numbers and slice
    numbers available AND the disk management layer is well enough abstracted
    that I can implement support for things like GPT.

						-Matt





More information about the Kernel mailing list