SCSI Disk Controllers and Linux


SCSI Disk Controllers and Linux

SCSI (pronounced 'scuzzy') is an increasingly popular interface for connecting up to seven different devices on the SCSI bus. Each device, and the SCSI controller, has a unique SCSI identifier (ID) in the range 0 through 7. The controller usually is set to SCSI

ID 7; the other devices use numbers between 0 and 6 (that means you can connect up to seven devices to a SCSI controller). Typically, a SCSI hard disk is set to SCSI ID 0.

Table B-1 lists the SCSI controllers that the version of Linux kernel on the companion CD-ROMs supports. The table also shows the name of the driver module that supports each specific set of controllers. If necessary, you can manually load the driver for your SCSI controller with the command /sbin/modprobe modname, where modname refers to the name of the driver module.

Table B-1: Supported SCSI Controllers

SCSI Controller

Linux Driver Module

3ware Storage Controller

3w-xxx

ACARD ATP870U

atp870u

Adaptec AHA-1460 (AHA152X-compatible) PCMCIA SCSI card

aha152x_cs

Adaptec AHA-1510/152x (ISA)

aha152x

Adaptec AHA-154x (ISA) (all models)

aha1542

Adaptec AHA-174x (EISA) (in enhanced mode)

aha1740

Adaptec AHA-274x/274xT (EISA), AHA-284x (VLB), AHA-2910B (PCI), AHA-2920C (PCI), AHA-2930/U/U2/CU, AHA-2940/U/W/AU/UW/U2W (PCI), AHA-294160M, AHA-2944D/WD/UD/UWD (PCI), AHA-2950U2/U2W/U2B, AHA-39160M, AHA-3940/U/W/UW (PCI), AHA-3950U2D, AHA-3960D, AHA-398x/U/W/UW (PCI)

aic7xxx

Adaptec AHA-2920A (PCI) with Future Domain chipset

fdomain

Adaptec AVA-1502E (ISA/VLB), AVA-1505/1515 (ISA), AVA-282x-all are Adaptec AHA-152x compatible

aha152x

Adaptec I2O RAID

dpt_i2o

AdvanSys ABP510/5150 Bus-Master ISA, ABP5140 Bus-Master ISA PnP (Plug and Play), ABP5142 Bus-Master ISA PnP with floppy, ABP542 Bus-Master ISA with floppy (single channel), ABP742 Bus-Master EISA (single channel), ABP752 Dual Channel Bus-Master EISA (dual channel), ABP842 Bus-Master VL (single channel), ABP852 Dual Channel Bus-Master VL (dual channel), ABP920 Bus-Master PCI, ABP930/U Bus-Master PCI/Ultra, ABP940/U Bus-Master PCI/Ultra (single channel), ABP950 Dual Channel Bus-Master PCI (dual channel), ABP960/U Bus-Master PCI/ULTRA MAC/PC, ABP970/U Bus-Master PCI/Ultra MAC/PC (single channel)

advansys

AIC-777x, AIC-785x, AIC-786x, AIC-787x, AIC-788x, AIC-789x, and AIC-3860 chipsets

aic7xxx

Always IN2000 (ISA)

in2000

AMD AM53/79C974

AM53C974

AMI Fast Disk VLB/EISA (BusLogic-compatible), BusLogic FlashPoint LT/DL/LW/DW PCI

BusLogic

Compaq 64-bit/66Mhz PCI Fibre Channel HBA

cpqfc

Domex DMX3191D

dmx3191d

DPT SmartRAID V I2O

dpt_i2o

DPT PM2001, PM2012A (EATA-PIO)

eata_pio

DPT EATA-DMA controllers such as Smartcache/SmartRAID Plus, III,IV families (ISA/EISA/PCI)

eata_dma

Data Technology Corp DTC 3180/3280

dtc

DTC 329x (EISA) (Adaptec 154x-compatible)

aha1542

Future Domain TMC-1800, TMC-18C50, TMC-18C30, TMC-36C70, TMC-16x0, TMC-3260 (PCI)

fdomain

Future Domain TMC-8xx, TMC-950

seagate

Future Domain-compatible PCMCIA SCSI card

fdomain_cs

IBM ServeRAID controller

ips

ICP-Vortex GDT ISA and EISA SCSI Controllers, GDT PCI SCSI Disk array Controllers (many RAID levels supported)

gdth

IDE/ATAPI adapters (SCSI emulation for IDE devices, so SCSI driver can be used to access IDE devices such as CD-ROM drives)

ide-scsi

Initio INI-9X00U/UW SCSI host adapters

initio

Initio INI-A100U2W SCSI host adapters

a100u2w

Intraserver ITI-6200U2 Dual Channel Ultra2 SCSI Host Adapter (uses the NCR53C896 chipset)

ncr53c8xx

Iomega Match Maker parallel-port SCSI Host Bus Adapter embedded in ZIP Plus drive

imm

Iomega PPA3 parallel-port SCSI Host Bus Adapter embedded in ZIP drive

ppa

LSI Logic MegaRAID 418, 428, 438, 466, 762, 467, 471, 490, and 493

megaraid

Mylex (formerly BusLogic) A Series (ISA/EISA), C Series (ISA/EISA/VLB/PCI), S Series (ISA/EISA/VLB), W Series (PCI)

BusLogic

NCR 5380 and 53C400 generic cards

sim710

NCR 53C406a (Acculogic ISApport /Media Vision Premium 3D SCSI)

NCR53c406a

NCR53c710 (simple driver)

g_NCR5380

NCR 53c810, 53c810A, 53c815, 53c825, 53c825A, 53c860, 53c875, 53c876 53c895 53c400, NCR5380, 53c810, 53c810A, 53c815, 53c820, 53c825, 53c810, 53c820, 53c720, 53c700, 53c710 (PCI), 53c700-66

53c7,8xx

NCR 53C875 and 53C876 chipsets

ncr53c8xx

NinjaSCSI-32Bi CardBus, NinjaSCSI-32UDE PCI/CardBus SCSI controllers

nsp32

OnStream SCSI Tape

osst

Perceptive Solutions PCI-2000 IntelliCache

pci2220i

Perceptive Solutions PCI-2220I EIDE RAID

pci2000

Perceptive Solutions PSI-240I EIDE

psi240i

Pro Audio Spectrum/Studio 16 (ISA)

pas16

QLogic ISP1x80/1x160

qla1280

Qlogic /Control Concepts ISP2100 SCSI-FCP

qlogicfc

Qlogic Fast SCSI FASXXX family of chips (ISA/VLB/PCMCIA)

qlogicfas

QLogic ISP1020 Intelligent SCSI cards IQ-PCI, IQ-PCI-10, IQ-PCI-D (PCI)

qlogicisp

QLogic PCMCIA SCSI card

qlogic_cs

Quantum ISA-200S, ISA-250MG

fdomain

Seagate ST-01/ST-02 (ISA)

seagate

SoundBlaster 16 SCSI-2 (Adaptec 152x-compatible) (ISA)

aha152x

Symbios Logic SYM53C416 Chip

sym53c416

Symbios Logic SYM53C896 (also supports the 538XX controller family, except 53C815 and versions lower than 16 of the 53C810 and 53C825 controllers)

sym53c8xx

Tekram DC-390, DC-390W/U/F (AMD53C974 chipset)

tmscsim

Trantor T128/T128F/T228 (ISA)

t128

Trantor T130B (NCR 53C400 chipset)

g_NCR5380

UltraStor 14F (ISA), 24F (EISA), 34F (VLB)

u14-34f

Western Digital WD7000-FAST, WD7000-FASST2, WD7000-ASC, WD7000-AX/MX/EX

wd7000

Cable and Termination Problems

The SCSI bus needs terminators at both ends to work reliably. A terminator is a set of resistors that indicate the end of the SCSI bus. One end is the controller card itself, which typically has the terminator on it. Often, a SCSI device has two SCSI connectors, so that you can daisy-chain several external SCSI devices. You are supposed to place a terminator on the last connector on the chain.

Insider Insight 

Some SCSI controllers-such as Adaptec AHA 154xC, 154xCF, and 274x (x is any digit)-are sensitive to the type of cable and terminator you use. If the cables are not perfect or the terminator is not used properly, these SCSI cards may fail intermittently or may not work at all.

To avoid problems with overly sensitive SCSI cards, use cables that come from a reputable vendor, and use cables from the same vendor to connect all SCSI devices. The cables should be SCSI 2-compliant and should have an impedance of 132 ohms (a characteristic of the cable; all you have to do is make sure the specified value is 132 ohms).

Most SCSI problems are due to bad cables or improper termination. You should check the cables and the terminator before trying anything else.

SCSI Device at All SCSI IDs

If a SCSI device shows up at all possible SCSI IDs, you must have configured that device with the same SCSI ID as the SCSI controller (usually, 7). Change the ID of that device to another value. (Many devices have a simple switch for setting the SCSI ID; on others, you have to change a jumper.)

SCSI Device at All LUNs

If a SCSI device shows up at all possible SCSI logical unit numbers (LUNs), the device probably has errors in the firmware-the built-in code in the device's SCSI interface. To verify these errors, use the following command line during boot:

max_scsi_luns=1

If the device works with this option, you can add it to the list of blacklisted SCSI devices in the array of structures named device_list in the file /usr/src/linux-2.4/drivers/ scsi/scsi_scan.c. The definition of that structure and some parts of the array are as follows:

struct dev_info{
    const char * vendor;
    const char * model;
    const char * revision; /* Latest revision known to be bad. Not used yet */
    unsigned flags;
};
/*
 * This is what was previously known as the blacklist.  The concept
 * has been expanded so that we can specify other types of things we
 * need to be aware of.
 */
static struct dev_info device_list[] =
{
/* The following devices are known not to tolerate a lun != 0 scan for
 * one reason or another.  Some will respond to all luns, others will
 * lock up.
 */
{"Aashima","IMAGERY 2400SP","1.03",BLIST_NOLUN},/* Locks up if polled for lun !=  0 */
{"CHINON","CD-ROM CDS-431","H42", BLIST_NOLUN}, /* Locks up if polled for lun !=
 0 */
{"CHINON","CD-ROM CDS-535","Q14", BLIST_NOLUN}, /* Locks up if polled for lun !=
 0 */
{"DENON","DRD-25X","V", BLIST_NOLUN},      /* Locks up if probed for lun != 0 */
{"HITACHI","DK312C","CM81", BLIST_NOLUN},  /* Responds to all lun - dtg */
{"HITACHI","DK314C","CR21" , BLIST_NOLUN}, /* responds to all lun */
{"IMS", "CDD521/10","2.06", BLIST_NOLUN},  /* Locks-up when LUN>0 polled. */
{"MAXTOR","XT-3280","PR02", BLIST_NOLUN},  /* Locks-up when LUN>0 polled. */
... lines deleted ...
        {"HITACHI", "DF600", "*", BLIST_SPARSELUN},
        {"IBM", "ProFibre 4000R", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
/*
 * Must be at end of list...
 */
{NULL, NULL, NULL}
};

From this list, you can get an idea of the types of SCSI devices that have the problem of showing up at all LUNs. If you have the same problem with a SCSI device, you can add that device's name to this list before the last line before rebuilding the kernel. You may not want to do this, however, if you are not familiar with the C programming language.

Sense Errors on an Error-Free SCSI Device

The cause of this problem usually is bad cables or improper termination. Check all cables, and make sure the SCSI bus is terminated at both ends.

Networking Kernel Problems with a SCSI Device

If a Linux kernel with networking support does not work with SCSI devices, the problem may be the autoprobe function of the networking drivers. The autoprobe capability is meant to detect the type of networking hardware automatically; the network drivers read from and write to specific I/O addresses during autoprobing. If an I/O address happens to be the same as that a SCSI device uses, the system may have a problem. In this case, you have to check the I/O address, IRQ, and DMA values of the network cards and of the SCSI controller and make sure no conflicts exist. Most SCSI controllers (and even network adapters) allow you to configure these parameters (I/O address, IRQ, and DMA) through setup software that comes with the adapter.

Device Is Detected but Not Accessible

If the kernel detects a SCSI device (as reported in the boot messages, which you can see by typing the command dmesg | more) but you cannot access the device, the device file may be missing from the /dev directory.

Insider Insight 

To add the device file, log in as root, change the directory to /dev, and use the MAKEDEV script to create the device file. To add a device for a SCSI tape drive, for example, use the following command:

cd /dev
./MAKEDEV st0

When you log in as root, the current directory is typically not in the PATH environment variable. That's why you need to add the ./ prefix when executing the MAKEDEV script. You can find more information about the MAKEDEV script with the following command:

man MAKEDEV

SCSI Lockup

If the SCSI system locks up, check the SCSI controller card, using any diagnostic software that came with the card (usually, the diagnostic software runs under DOS). Look for conflicts in I/O address, IRQ, or DMA with other cards. Some sound cards, for example, use a 16-bit DMA channel in addition to an 8-bit DMA; make sure you have not inadvertently used the same 16-bit DMA for the SCSI card.

The Linux SCSI driver for some SCSI cards supports only one outstanding SCSI command at a time. With such a SCSI card, if a device such as a tape drive is busy rewinding, the system may not be able to access other SCSI devices (such as a hard disk or a CD-ROM drive) that are daisy-chained with that tape drive. A solution to this problem is to add a second SCSI controller to take care of the tape drives.

SCSI Devices Not Found

If the Linux kernel does not detect your SCSI devices at startup, you get the following message when Linux boots:

scsi : 0 hosts
scsi : detected total

If you see this message, but you know that the SCSI devices are there (and that they work under DOS), the problem may be the lack of a BIOS on the SCSI controller; the autoprobe routines that detect SCSI devices rely on the BIOS.

This problem occurs for the following SCSI cards:

  • Adaptec 152x, 151x, AIC-6260, and AIC-6360

  • Future Domain 1680, TMC-950, and TMC-8xx

  • Trantor T128, T128F, and T228F

  • Seagate ST01 and ST02

  • Western Digital 7000

    Insider Insight 

    Even if a SCSI controller has a BIOS, jumpers often are available for disabling the BIOS. If you have disabled the BIOS for some reason, you may want to reenable it (read the documentation of your SCSI controller for directions) so that Linux can detect the SCSI devices automatically.

For a SCSI card, such as the Adaptec 151x, that does not have any BIOS, use the following command line during boot to force detection of the card:

aha152x=0x340,11,7,1