Linux下实现SCSI硬盘热插拔及在线识别

今天需要向一台服务器添加一块硬盘(SCSI),但是服务器又不能停机,于是想到了热插拔,可以在不停机的情况下,让系统识别出新插入的硬盘,具体步骤如下:

第一步:将新硬盘插到机器上;

第二步:以root用户运行命令:

echo "scsi add-single-device x y z u" > /proc/scsi/scsi

其中:
x是硬盘所在SCSI控制器号(一般机器就一个SCSI控制器,所以就是0);
y是硬盘所在SCSI通道的编号(一般单通道的就是0,多通道的要看是哪个通道了);
z是硬盘的SCSI ID号(可以通过具体插入的硬盘插槽来判断);
u是硬盘的lun号(默认情况都是0)

由于我是插入第三块硬盘,所以我运行的命令是:

echo "scsi add-single-device 0 0 2 0" > /proc/scsi/scsi

如果x y z参数不正确,系统是不能识别添加的硬盘的,可以通过查看/proc/scsi/scsi文件的内容来判断是否添加成功。添加好之后,这个文件中会多出一个设备。这个文件中包含系统识别到的所有SCSI设备的详细信息,包括厂商、型号、介质访问类型等。

我在运行上面的命令后查看文件/proc/scsi/scsi,发现多了一个设备(最后一个):

Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: MAXTOR   Model: ATLASU320_18_SCA Rev: B120
  Type:   Direct-Access                    ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
  Vendor: IBM      Model: IC35L036UCDY10-0 Rev: S28F
  Type:   Direct-Access                    ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
  Vendor: ESG-SHV  Model: SCA HSBP M17     Rev: 1.15
  Type:   Processor                        ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 02 Lun: 00
  Vendor: IBM      Model: IC35L146UCDY10-0 Rev: S26B
  Type:   Direct-Access                    ANSI SCSI revision: 03

然后再看/proc/partition文件,发现已经识别出硬盘了!接下来就可以分区、格式化、使用了,由于使用parted分区工具不需要重新引导系统,所以整个添加硬盘的过程是不需要重启系统的。

如果要移除硬盘,那么可以这样操作:

第一步:以root用户运行命令:

echo "scsi remove-single-device x y z u" > /proc/scsi/scsi

x y z u的定义同上

第二步:物理上断开硬盘的连接。