Re: SCSI disk devices

Eric Youngdale (
Thu, 1 May 1997 06:15:40 -0400

>> In message <m0wMcJ1-0008zEC@seneca>, Harald Milz writes:
>> >There is one more point to that. We are eventually going to have an SSA
>> >device driver, and SSA tends to be used in large server installs. Each
>> >disk is presented to the OS as a single SCSI disk ... so I think we need
>> >a major change in disk numbering, not just 16 more devices by one more.
>> >major number. 16 bit minors (and majors, for that matter) would be the
>> >cleanest solution IMHO. That's what commercial Unixes tend do offer.
>> If we do that, we _definately_ have to adopt something like the
>> Solaris /dev/dsk/c0t0d0s3 scheme. It gets really tiring trying to out-
>> guess what the kernel is going to name a new disk when it's put online.
>Eric Youngdale wrote a nice utility which does exactly this! Try scsidev.
>I couldn't live without it. Not sure why it never caught on with any of
>the distributions..

Umm, because it's a hack? Yes, it works around the problem of
device names changing as the bus configuration changes.

I am not 100% sure what the best long term solution is. Some
people have suggested that a /proc/scsi/dev/ tree be populated with
names and links that are somewhat representative of whatever the ID,
etc, are for the underlying device. I don't know what the performance
impact would be of doing something like this, but on the surface it
doesn't seem unreasonable. I guess my reaction is that I would prefer
the solution live outside of the kernel (and hence scsidev), as it is
more configurable and adaptable.

Even with scsidev, you are still limited to 16 disks. Yes,
you could hack sd.c so that you get a second major number, but that is
also a hack. The real solution is to get larger minor numbers. It
sounded like the latest ext2 supports the larger device numbers, and
it looks like GNU libc supports a dev_t that is 32 bits, so that the
larger device numbers should easily make it out to user programs. I
would need to test this, but in *theory* a mknod and ls built with GNU
libc will let you create the device nodes that you need.