Previous Next Contents

6. Disks

This section gives information that is specific to disk drives.

6.1 Supported and Unsupported Hardware

All direct access SCSI devices with a block size of 256, 512, or 1024 bytes should work. Other block sizes will not work (Note that this can often be fixed by changing the block and/or sector sizes using the MODE SELECT SCSI command)

Sector size refers to the number of data bytes allocated per sector on a device, ie CDROMs use a 2048 byte sector size.

Block size refers to the size of the logical blocks used to interface with the device. Although this is usually identical to sector size, some devices map multiple smaller physical sectors (ie, 256 bytes in the case of 55M Syquest drives) to larger logical blocks or vice versa (ie, 512 byte blocks on SUN compatible CDROM drives).

Removable media devices, including Bernoulis, flopticals, MO drives, and Syquests.

In theory, drives up to a terabyte in size should work. There is definitely no problem with tiny 9G drives.

6.2 Common Problems

Cylinder > 1024 message

When partitioning, you get a warning message about "cylinder > 1024" or you are unable to boot from a partition including a logical cylinder past logical cylinder 1024.

This is a BIOS limitation.

See Disk Geometry and Partitioning for an explanation.

You are unable to partition "/dev/hd*"

/dev/hd* aren't SCSI devices, /dev/sd* are.

See Device Files and Disk Geometry and Partitioning for the correct device names and partitioning procedure.

Unable to eject media from a removable media drive

Linux attempts to lock the drive door when a piece of media is mounted to prevent filesystem corruption due to an inadvertent media change.

Please unmount your disks before ejecting them.

Unable to boot using LILO from a SCSI disk

In some cases, the SCSI driver and BIOS will disagree over the correct BIOS mapping to use, and will result in LILO hanging after 'LI' at boot time and/or other problems.

To workaround this, you'll have to determine your BIOS geometry mapping used under DOS, and make an entry for your disk in /etc/lilo/disktab.

Alternatively, you may be able to use the "linear" configuration jfile option.

Fdisk responds with

You must set heads sectors and cylinders.
You can do this from the extra functions menu.

and disk geometry is not 'remembered' when fdisk is rerun.

See Partitioning

Only one drive is detected on a bridge board with multiple drives connected.

Linux won't search LUNs past zero on SCSI devices which predate ANSI SCSI revision 1. If you wish devices on alternate LUNs to be recognized, you will have to modify drivers/scsi/scsi.c:scan_scsis().

System hangs when swapping

We think this has been fixed, try upgrading to 1.1.38.

Connor CFP1060S disks get corrupted

This is due to a microcode bug in the read-ahead and caching code.

>From Soenke Behrens of Conner tech. support :

During the past few weeks, we got several calls from customers stating
that they had severe problems with Conner CFP1060x 1GB SCSI drives
using the Linux operating system. Symptoms were corrupt filesystems
(damaged inodes) reported by e2fsck on each system boot and similar
errors.

There is now a fix available for customers with a CFP1060x (microcode
revisions 9WA1.62/1.66/1.68) and Linux. To apply the upgrade, you
will need a DOS boot disk and ASPI drivers that can access the hard
drive. The upgrade downloads new queuing and lookahead code into the
non-volatile SCSI RAM of the drive.

If you are experiencing problems with a disk that has microcode
revision 9WA1.60, you will have to contact your nearest Conner service
centre to get the disk upgraded. The microcode revision can be found
on the label of the drive and on the underside of the drive on a label
on one of the ICs.

If you are confident that you can perform the upgrade yourself, please
contact Conner Technical Support and have your microcode revision
ready. Conner Technical Support Europe can be reached on +44-1294-315333,
Conner Technical Support in the USA can be reached on 1-800-4CONNER.

Regards
Soenke Behrens
European Technical Support

6.3 Device Files

SCSI disks use block device major 8, and there are no "raw" devices ala BSD.

16 minor numbers are allocated to each SCSI disk, with minor % 16 == 0 being the whole disk, minors 1 <= (minor % 16) <= 4 the four primary partitions, minors 5 <= (minor % 16) <= 15 any extended partitions.

Ie, a configuration may work out like this (with one host adapter)

Device                  Target, Lun     SCSI disk
84M Seagate             0       0       /dev/sda
SCSI->SMD bridge disk 0 3       0       /dev/sdb 
SCSI->SMD bridge disk 1 3       1       /dev/sdc
Wangtek tape            4       0       none
213M Maxtor             6       0       /dev/sdd

Etc.

The standard naming convention is

/dev/sd{letter} for the entire disk device ((minor % 16) == 0) /dev/sd{letter}{partition} for the partitions on that device (1 <= (minor % 16) <= 15)

Ie

/dev/sda        block device major 8 minor 0
/dev/sda1       block device major 8 minor 1
/dev/sda2       block device major 8 minor 2
/dev/sdb        block device major 8 minor 16

etc.

6.4 Partitioning

You can partition your SCSI disks using the partitioning program of your choice, under DOS, OS/2, Linux or any other operating system supporting the standard partitioning scheme.

The correct way to run the Linux fdisk program is by specifying the device on the command line. Ie, to partition the first SCSI disk,

fdisk /dev/sda

If you don't explicitly specify the device, the partitioning program may default to /dev/hda, which isn't a SCSI disk.

In some cases, fdisk will respond with

You must set heads sectors and cylinders.
You can do this from the extra functions menu.

Command (m for help): 

and/or give a message to the effect that the HDIO_REQ or HDIO_GETGEO ioctl failed. In these cases, you must manually specify the disk geometry as outlined in Disk Geometry when running fdisk, and also in /etc/disktab if you wish to boot kernels off that disk with LILO.

If you have manually specified the disk geometry, subsequent attempts to run fdisk will give the same error message. This is normal, since PCs don't store the disk geometry information in the partition table. In and of itself, will cause _NO PROBLEMS_, and you will have no problems accessing partitions you created on the drive with Linux. Some vendors' poor installation code will choke on this, in which case you should contact your vendor and insist that they fix the code.

In some cases, you will get a warning message about a partition ending past cylinder 1024. If you create one of these partitions, you will be unable to boot Linux kernels off of that partition using LILO. Note, however, that this restriction does not preclude the creation of a root partition partially or entirely above the 1024 cylinder mark, since it is possible to create a small /boot partition below the 1024 cylinder mark or to boot kernels off existing partitions.

6.5 Disk Geometry

Under Linux, each disk is viewed as the SCSI host adapter sees it : N blocks, numbered from 0 to N-1, all error free, where as DOS/BIOS predate intelligent disks and apply an arbitrary head / cylinder / sector mapping to this linear addressing.

This can pose a problem when you partition the drives under Linux, since there is no portable way to get DOS/BIOS's idea of the mapped geometry. In most cases, a HDIO_GETGEO ioctl() can be implemented to return this mapping. Unfortunately, when the vendor (ie Seagate) has chosen a perverse, non-standard, and undocumented mapping, this is not possible and geometry must be manually specified

If manual specification of the is required, you have one of several options :

  1. If you don't care about using DOS, or booting kernels from the drive with LILO, create a translation such that heads * cylinders * sectors * 512 < size of your drive in bytes (a megabyte is defined as 2^20 bytes).
    1 <= heads <= 256
    1 <= cylinders <= 1024 
    1 <= sectors <= 63
    
  2. Use the BIOS mapping. In some cases, this will mean reconfiguring the disk so that it is at SCSI ID 0, and disabling the second IDE drive (if you have one).

You can either use a program like NU, or you can use the following program :

begin 664 dparam.com
MBAZ``##_B+^!`+N!`(H'0SP@=/D\,'5:@#]X=`6`/UAU4(!_`3AU2H!_`P!U
M1(I7`H#J,(#Z`7<Y@,*`M`C-$PCD=3-14HC()#\PY.@R`.@J`%J(\/[`,.3H
M)0#H'0!8AL2Q!M+L0.@7`+K"`;0)S2'#NIP!ZR"ZQ0'K&[K5`>L6N]T!,=*Y
M"@#W\8#",$N(%PG`=>^)VK0)S2'#=7-A9V4Z(&1P87)A;2`P>#@P#0H@("!O
L<B`@9'!A<F%M(#!X.#$-"B1);G9A;&ED(&1R:79E#0HD("`D```````D``!O
`
end

When run it prints the sectors, heads, and cylinders of the drive whose BIOS address was specified on the command line (0x80 is the first disk, 0x81 the second).

Ie, dparam 0x80

60      17      1007

Would mean that C: had 60 sectors, 17 heads, and 1007 cylinders.


Previous Next Contents