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




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


Adaptec AHA-1510/152x (ISA)


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


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


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)


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


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


Adaptec I2O RAID


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)


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


Always IN2000 (ISA)


AMD AM53/79C974


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


Compaq 64-bit/66Mhz PCI Fibre Channel HBA


Domex DMX3191D




DPT PM2001, PM2012A (EATA-PIO)


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


Data Technology Corp DTC 3180/3280


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


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


Future Domain TMC-8xx, TMC-950


Future Domain-compatible PCMCIA SCSI card


IBM ServeRAID controller


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


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


Initio INI-9X00U/UW SCSI host adapters


Initio INI-A100U2W SCSI host adapters


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


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


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


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


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


NCR 5380 and 53C400 generic cards


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


NCR53c710 (simple driver)


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


NCR 53C875 and 53C876 chipsets


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


OnStream SCSI Tape


Perceptive Solutions PCI-2000 IntelliCache


Perceptive Solutions PCI-2220I EIDE RAID


Perceptive Solutions PSI-240I EIDE


Pro Audio Spectrum/Studio 16 (ISA)


QLogic ISP1x80/1x160


Qlogic /Control Concepts ISP2100 SCSI-FCP


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


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




Quantum ISA-200S, ISA-250MG


Seagate ST-01/ST-02 (ISA)


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


Symbios Logic SYM53C416 Chip


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


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


Trantor T128/T128F/T228 (ISA)


Trantor T130B (NCR 53C400 chipset)


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


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


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:


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...

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

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:


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: