You are not logged in.

#1 2007-08-20 13:51:31

mac57
Member
From: St. Somewhere
Registered: 2006-01-06
Posts: 302
Website

SOLVED: Mounting IDE ZIP Drives, "Special Device hdb4 Does Not Exist"

I thought I would post a follow-up, since I have finally resolved this long standing issue, which has plagued me since my first days with Linux many years ago.

As outlined in my original post below, every time I would attempt to access a Zip disk for the first time since boot, Linux (pretty much all distros I have ever tried, with the exception of SuSE 9.3) would fail to mount the disk and report back that "Special device hdb4 does not exist". Of course the "hdb4" part varies from distro to distro and machine to machine, depending on how your Zip disk is connected and how the distro names its disks, but the basic error has been constant. I have always worked around it by redoing the mount command specifying just the device, not the partition, and while that would always fail, it would force the creation of the device /dev/hdb4, and I could carry on. Annoying but effective.

FINALLY, a long term answer. I got my inspiration from a really snarky post I read in another online forum where someone had posted this very same question (this is a very common problem with no common answer it seems!). The respondant, who completely failed to provide a helpful answer, basically said "listen, the OS is telling you what is wrong - the device hdb4 doesn't exist - so fix it, and all will be just fine". Of course, the respondant didn't even bother to offer a suggestion about HOW to fix it.

However, therein lies the inspiration for the solution. Indeed they are right, /dev/hdb4 *doesn't* exist, so how to fix that? They had a point. I started researching the mysteries of mknod, a program that can create /dev files, and the even deeper mysteries of Linux device numbers, both major and minor.

In the end, I found a wonderfully informative document that described the current standard for the device numbering scheme used by mknod, and Linux in general. The key things of interest are this:

1/ The major number for IDE based drives is 3.
2/ IDE allows for 64 partitions per device, so the minor numbers are 0-63 for device "a", 64-127 for device "b" and so on. You derive the minor number of interest for your particular device by taking the starting value of the minor number range of interest for your device and adding the partition number to it. So, for example, hdb4 would have a minor number of 64 (the start of the minor number range for device "b") plus 4 (the partition number in "hdb4"), yielding a result of 68.

3/ The major number for SCSI based drives, or those that your OS treats as SCSI, is 8.
4/ SCSI allows for 16 partitions per device, so the minor numbers are 0-15 for device "a", 16-31 for device "b" and so on. You derive the minor number of interest for your particular device by taking the starting value of the minor number range of interest for your device and adding the partition number to it. So, for example, sdb4 would have a minor number of 16 (the start of the minor number range for device "b") plus 4 (the partition number in "hdb4"), yielding a result of 20.

In my case, Arch seems to be treating all of my disk based devices as SCSI, perhaps because I do have a real SCSI interfaced Jaz drive in my machine. So, the Zip disk of interest in my machine is sdc4 (my real SCSI jaz is sda, my Arch root is sdb, and the IDE Zip is sdc). Applying the above, for /dev/sdc4:

- The major number is 8.
- The minor number is 32 (start of range for device "c") plus 4 (the partition number) = 36.

Armed with this knowledge, I su'd to root and entered:

# mknod /dev/sdc4 b 8 36

and like magic, there is was, /dev/sdc4. I popped a disk into the drive and my first attempt to access it was greeted with success, not the usual "device does not exist" error! By the way, the "b" in the above command is just part of the mknod syntax, and indicates that I am creating a block device (vs. a character device, or some other type of device - disk drives all seem to be "block" devices for apparent reasons).

SO, determine your major number by device type (it will usually be 3 or 8), compute your minor number by device letter and partition number, and add a mknod command to your system startup (so you don't have to do it manually every time) and you are done! No more annoying "device does not exist" errors.

Now for the kicker. It turns out that this information has been available under my nose all along. I just didn't recognize the code. If you do the following:

# ls -ald /dev/sd*

Linux obligingly provides you with the major number and the start of the minor number range for your device. Since Linux has always detected the Zip *device* (just not the partition) this is really all you need to know. When I issue the above command, I get an output like:

brw-rw----  1  root  disk  8,   32   date   time   /dev/sdc

Guess what, there they are! "8" is the major number of interest, "32" is the start of the minor number range of interest. If I had just recognized that, and known that all I had to do was add the partition number to the minor number to get the magic number to feed into mknod, things would have been easier.

Sorry for the long post, but like so many things in Linux, the OS doesn't make this easy on the uninitiated. I sincerely hope that this post may help lots of other people to resolve this vexing and longstanding problem.


Cast off the Microsoft shackles Jan 2005

Offline

Board footer

Powered by FluxBB