Table of Contents

Intro

I found some valuable Linux specific hotswap stuff today for working with hot-swappable SCSI disks. This should be pretty distro agnostic as well. I've been using FreeBSD, where you use camcontrol/atacontrol, for so long now that I had kind of forgotten how to do this stuff in Linux. Now it's time to make a record.

Checking What is Currently in the System

Good ol' linux and it's proc pseudo-filesystem. Essentially, all we are doing is checking a file and echoing commands into the same file for all our operations. The magic file here is /proc/scsi/scsi.

First let's see what's in our file. You should see something like the following, but obviously it will differ depending on hardware.

# cat /proc/scsi/scsi
vnb1:~ # cat /proc/scsi/scsi                            
Attached devices:                                       
Host: scsi0 Channel: 00 Id: 00 Lun: 00                  
  Vendor: FUJITSU  Model: MAT3073NC        Rev: 0104    
  Type:   Direct-Access                    ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00                           
  Vendor: SEAGATE  Model: ST373207LC       Rev: 0002             
  Type:   Direct-Access                    ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00                           
  Vendor: SDR      Model: GEM318P          Rev: 1                
  Type:   Processor                        ANSI SCSI revision: 02
Host: scsi1 Channel: 00 Id: 02 Lun: 00                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 5252             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi2 Channel: 00 Id: 00 Lun: 00                           
  Vendor: ATL      Model: M2500            Rev: 12.0             
  Type:   Medium Changer                   ANSI SCSI revision: 02
Host: scsi2 Channel: 00 Id: 01 Lun: 00                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 5252             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 00                           
  Vendor: NETAPP   Model: VTL              Rev: 0001             
  Type:   Medium Changer                   ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 01                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 02                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 03                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 04                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C             
  Type:   Sequential-Access                ANSI SCSI revision: 02

Removing a Device

Now, first I want to remove the first device since it failed. Then we will see that it no longer shows up.

# echo 'scsi remove-single-device 0 0 0 0' > /proc/scsi/scsi
# cat /proc/scsi/scsi
Attached devices:            
Host: scsi0 Channel: 00 Id: 01 Lun: 00
  Vendor: SEAGATE  Model: ST373207LC       Rev: 0002
  Type:   Direct-Access                    ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00                           
  Vendor: SDR      Model: GEM318P          Rev: 1                
  Type:   Processor                        ANSI SCSI revision: 02
Host: scsi1 Channel: 00 Id: 02 Lun: 00                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 5252             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi2 Channel: 00 Id: 00 Lun: 00                           
  Vendor: ATL      Model: M2500            Rev: 12.0             
  Type:   Medium Changer                   ANSI SCSI revision: 02
Host: scsi2 Channel: 00 Id: 01 Lun: 00                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 5252             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 00                           
  Vendor: NETAPP   Model: VTL              Rev: 0001             
  Type:   Medium Changer                   ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 01                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 02                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 03                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C             
  Type:   Sequential-Access                ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 04                           
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C             
  Type:   Sequential-Access                ANSI SCSI revision: 02

Now, a quick explanation of the device address. The “0 0 0 0” used in the remove-single-device command above is the SCSI address of the first drive. The address translates as follows:

First zero Host: scsi0
Second zero Channel: 00
Third zero Id: 00
Fourth zero Lun: 00

So, if we wanted to remove the second drive instead of the first (the Seagate), the address would be “0 0 1 0”.

Add the New Device

NOTE: The following process can be used to just simply add a disk to the system.

Now we can add the new drive that we swapped in. We use the same addressing scheme as above. After the add, we should see it in the /proc/scsi/scsi file again.

# echo 'scsi add-single-device 0 0 0 0' > /proc/scsi/scsi
# cat /proc/scsi/scsi
Attached devices:                                                            
Host: scsi0 Channel: 00 Id: 01 Lun: 00                                       
  Vendor: SEAGATE  Model: ST373207LC       Rev: 0002                         
  Type:   Direct-Access                    ANSI SCSI revision: 03            
Host: scsi0 Channel: 00 Id: 06 Lun: 00                                       
  Vendor: SDR      Model: GEM318P          Rev: 1                            
  Type:   Processor                        ANSI SCSI revision: 02            
Host: scsi1 Channel: 00 Id: 02 Lun: 00                                       
  Vendor: QUANTUM  Model: SDLT320          Rev: 5252                         
  Type:   Sequential-Access                ANSI SCSI revision: 02            
Host: scsi2 Channel: 00 Id: 00 Lun: 00                                       
  Vendor: ATL      Model: M2500            Rev: 12.0                         
  Type:   Medium Changer                   ANSI SCSI revision: 02            
Host: scsi2 Channel: 00 Id: 01 Lun: 00                                       
  Vendor: QUANTUM  Model: SDLT320          Rev: 5252                         
  Type:   Sequential-Access                ANSI SCSI revision: 02            
Host: scsi3 Channel: 00 Id: 00 Lun: 00                                       
  Vendor: NETAPP   Model: VTL              Rev: 0001                         
  Type:   Medium Changer                   ANSI SCSI revision: 02            
Host: scsi3 Channel: 00 Id: 00 Lun: 01                                       
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C                         
  Type:   Sequential-Access                ANSI SCSI revision: 02            
Host: scsi3 Channel: 00 Id: 00 Lun: 02                                       
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C                         
  Type:   Sequential-Access                ANSI SCSI revision: 02            
Host: scsi3 Channel: 00 Id: 00 Lun: 03                                       
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C                         
  Type:   Sequential-Access                ANSI SCSI revision: 02            
Host: scsi3 Channel: 00 Id: 00 Lun: 04                                       
  Vendor: QUANTUM  Model: SDLT320          Rev: 022C                         
  Type:   Sequential-Access                ANSI SCSI revision: 02            
Host: scsi0 Channel: 00 Id: 00 Lun: 00                                       
  Vendor: FUJITSU  Model: MAT3073NC        Rev: 0104                         
  Type:   Direct-Access                    ANSI SCSI revision: 03

Now, checking dmesg, we should see what device the new drive was assigned to:

# dmesg | tail
sdc: Spinning up disk..........ready
SCSI device sdc: 143638992 512-byte hdwr sectors (73543 MB)
SCSI device sdc: drive cache: write back
SCSI device sdc: 143638992 512-byte hdwr sectors (73543 MB)
SCSI device sdc: drive cache: write back
 sdc: sdc1 sdc2

Now you can use your disk: /dev/sdc.

Scan for New Devices

You can also use the following to scan the SCSI bus for new devices:

# echo 'scsi scan-new-devices' > /proc/scsi/scsi