1.磁盘查看

首先获取scsi设备的信息。

[root@server2 ~]# lsscsi
[2:0:0:0]    disk    VMware,  VMware Virtual S 1.0   /dev/sda
[4:0:0:0]    cd/dvd  NECVMWar VMware SATA CD01 1.00  /dev/sr0
​
[root@node01 ~]# lsscsi
[10:0:0:0]   disk    ATA      INTEL SSDSC2BB12 0150  /dev/sda 
[10:0:1:0]   disk    ATA      XA240LE10003     147L  -       
[10:0:2:0]   disk    ATA      XA240LE10003     147L  -       
[10:0:3:0]   disk    ATA      INTEL SSDSC2BB15 0101  /dev/sdc 
[10:0:4:0]   disk    ATA      ST8000NM000A-2KE SN03  /dev/sdd 
[10:0:5:0]   disk    ATA      ST8000NM000A-2KE SN03  /dev/sde 
[10:0:6:0]   disk    ATA      ST8000NM000A-2KE SN03  /dev/sdf 
[10:0:7:0]   disk    ATA      ST8000NM000A-2KE SN02  /dev/sdg 
[10:0:8:0]   disk    ATA      ST8000NM000A-2KE SN02  /dev/sdh 
[10:0:9:0]   disk    ATA      ST8000NM000A-2KE SN02  /dev/sdi 
[10:0:10:0]  enclosu LSI      SAS3x36          0601  -       
[10:1:0:0]   disk    LSI      Logical Volume   3000  /dev/sdb 
​

有些操作系统没有lsscsi命令,则可以使用下面的方法获取scsi设备信息。

[root@server2 ~]# ll /sys/bus/scsi/drivers/sd/
​
total 0
lrwxrwxrwx 1 root root    0 Jun 22 17:29 2:0:0:0 -> ../../../../devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0
--w------- 1 root root 4096 Jun 22 17:29 bind
--w------- 1 root root 4096 Jun 22  2017 uevent
--w------- 1 root root 4096 Jun 22 17:29 unbind
[root@server2 ~]# ll /sys/bus/scsi/drivers/sd/2\:0\:0\:0/block/
​
total 0
drwxr-xr-x 10 root root 0 Jun 22  2017 sda
​
​
[root@node01 ~]# ll /sys/bus/scsi/drivers/sd/
total 0
lrwxrwxrwx 1 root root    0 Dec  7 16:11 10:0:0:0 -> ../../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/host10/port-10:0/expander-10:0/port-10:0:0/end_device-10:0:0/target10:0:0/10:0:0:0
lrwxrwxrwx 1 root root    0 Dec  7 16:11 10:0:3:0 -> ../../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/host10/port-10:0/expander-10:0/port-10:0:3/end_device-10:0:3/target10:0:3/10:0:3:0
lrwxrwxrwx 1 root root    0 Dec  7 16:11 10:0:4:0 -> ../../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/host10/port-10:0/expander-10:0/port-10:0:4/end_device-10:0:4/target10:0:4/10:0:4:0
lrwxrwxrwx 1 root root    0 Dec  7 16:11 10:0:5:0 -> ../../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/host10/port-10:0/expander-10:0/port-10:0:5/end_device-10:0:5/target10:0:5/10:0:5:0
lrwxrwxrwx 1 root root    0 Dec  7 16:11 10:0:6:0 -> ../../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/host10/port-10:0/expander-10:0/port-10:0:6/end_device-10:0:6/target10:0:6/10:0:6:0
lrwxrwxrwx 1 root root    0 Dec  7 16:11 10:0:7:0 -> ../../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/host10/port-10:0/expander-10:0/port-10:0:7/end_device-10:0:7/target10:0:7/10:0:7:0
lrwxrwxrwx 1 root root    0 Dec  7 16:11 10:0:8:0 -> ../../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/host10/port-10:0/expander-10:0/port-10:0:8/end_device-10:0:8/target10:0:8/10:0:8:0
lrwxrwxrwx 1 root root    0 Dec  7 16:11 10:0:9:0 -> ../../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/host10/port-10:0/expander-10:0/port-10:0:9/end_device-10:0:9/target10:0:9/10:0:9:0
lrwxrwxrwx 1 root root    0 Dec  7 16:11 10:1:0:0 -> ../../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/host10/target10:1:0/10:1:0:0
--w------- 1 root root 4096 Dec  7 16:11 bind
lrwxrwxrwx 1 root root    0 Dec  7 16:11 module -> ../../../../module/sd_mod
--w------- 1 root root 4096 Dec  7 16:11 uevent
--w------- 1 root root 4096 Dec  7 16:11 unbind
​
[root@node01 ~]# ll /sys/bus/scsi/drivers/sd/10\:0\:0\:0/block/
total 0
drwxr-xr-x 8 root root 0 Dec  7 17:06 sda
​

然后查看/proc/scsi/scsi文件,获取对应scsi设备的详细信息。

[root@server2 ~]# cat /proc/scsi/scsi
​
Attached devices:
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: VMware,  Model: VMware Virtual S Rev: 1.0
  Type:   Direct-Access                    ANSI  SCSI revision: 02
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: NECVMWar Model: VMware SATA CD01 Rev: 1.00
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi2 Channel: 00 Id: 01 Lun: 00
  Vendor: VMware,  Model: VMware Virtual S Rev: 1.0
  Type:   Direct-Access                    ANSI  SCSI revision: 02
  
  
[root@node01 ~]# cat /proc/scsi/scsi 
Attached devices:
Host: scsi10 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: INTEL SSDSC2BB12 Rev: 0150
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 01 Id: 00 Lun: 00
  Vendor: LSI      Model: Logical Volume   Rev: 3000
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 01 Lun: 00
  Vendor: ATA      Model: XA240LE10003     Rev: 147L
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 02 Lun: 00
  Vendor: ATA      Model: XA240LE10003     Rev: 147L
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 03 Lun: 00
  Vendor: ATA      Model: INTEL SSDSC2BB15 Rev: 0101
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 04 Lun: 00
  Vendor: ATA      Model: ST8000NM000A-2KE Rev: SN03
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 05 Lun: 00
  Vendor: ATA      Model: ST8000NM000A-2KE Rev: SN03
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 06 Lun: 00
  Vendor: ATA      Model: ST8000NM000A-2KE Rev: SN03
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 07 Lun: 00
  Vendor: ATA      Model: ST8000NM000A-2KE Rev: SN02
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 08 Lun: 00
  Vendor: ATA      Model: ST8000NM000A-2KE Rev: SN02
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 09 Lun: 00
  Vendor: ATA      Model: ST8000NM000A-2KE Rev: SN02
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi10 Channel: 00 Id: 10 Lun: 00
  Vendor: LSI      Model: SAS3x36          Rev: 0601
  Type:   Enclosure                        ANSI  SCSI revision: 05

在此处,有两块直连(Direct-Access)的scsi磁盘,一块通过光驱cd-rom连接的光盘。我们只考虑scsi磁盘,所以这两块磁盘在scsi中的定位符为2:0:0:0和2:0:1:0。如果继续插入一块盘,那么新盘在scsi中的定位符为2:0:2:0,这个数值串非常重要。

2. 热插

在向计算机中插入一块磁盘后,内核因为识别不了它所以不会产生任何事件通知,因此在/sys目录中不会产生任何文件,任何工具也就读取不了它。重启系统肯定是可以解决的,但是Linux支持热插。

热插新盘的方式是向/proc/scsi/scsi中写入新scsi设备的信息。方式如下:

echo "scsi add-single-device a b c d" >/proc/scsi/scsi

其中:

a == hostadapter id (first one being 0)
b == SCSI channel on hostadapter (first one being 0)
c == ID
d == LUN (first one being 0)

例如上面的例子,应该添加如下信息:

[root@server2 ~]# echo "scsi add-single-device 2:0:2:0" >/proc/scsi/scsi

当然,重新扫描scsi总线也可以实现热插的功能。因为上面的例子中,scsi host id为2(即host2),所以扫描的是host2,这样host2这个scsi上的所有设备都会被重新扫描。

[root@server2 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan

如果不知道要扫描哪个host,直接使用循环全部扫描。

[root@xuexi ~]# for i in /sys/class/scsi_host/host*/scan;do echo "- - -" >$i;done

热插之后,fdisk -l等命令就可以识别到该磁盘了。

3. 热拔

热拔磁盘的方式是在/proc/scsi/scsi中移除对应scsi设备的信息。方式如下:

echo "scsi remove-single-device a b c d" >/proc/scsi/scsi

例如删除2:0:2:0这块磁盘。

[root@server2 ~]# echo "scsi remove-single-device 2 0 2 0" >/proc/scsi/scsi

因为要删除的设备已经存在,/sys中已经有它完整的信息,所以也从其自身设备上进行删除。

首先查看scsi设备信息。

[root@server2 ~]# lsscsi
[2:0:0:0]    disk    VMware,  VMware Virtual S 1.0   /dev/sda
[2:0:1:0]    disk    VMware,  VMware Virtual S 1.0   /dev/sdb
[4:0:0:0]    cd/dvd  NECVMWar VMware SATA CD01 1.00  /dev/sr0

例如要删除/dev/sdb,即2:0:1:0。先看看它的文件信息。

[root@server2 ~]# ls /sys/bus/scsi/drivers/sd/2\:0\:1\:0/
​
queue_ramp_up_period          evt_lun_change_reported
evt_soft_threshold_reached    evt_inquiry_change_reported
evt_capacity_change_reported  evt_mode_parameter_change_reported
block/         model          scsi_level      bsg/
power/         state          delete          vpd_pg83
queue_depth    subsystem/     device_blocked  timeout
device_busy    generic/       queue_type      type
dh_state       iocounterbits  rescan          uevent
driver/        iodone_cnt     rev             unpriv_sgio
eh_timeout     ioerr_cnt      scsi_device/    vendor
iorequest_cnt  scsi_disk/     vpd_pg80        modalias
scsi_generic/  evt_media_change

在其中有3个文件:delete、rescan和state。其中state记录了该设备是否正在运行中。而delete和rescan文件则用于删除和重新扫描该设备。

例如,删除该设备,即热拔。

[root@server2 ~]# echo 1 > /sys/bus/scsi/drivers/sd/2\:0\:1\:0/delete


转载链接

Linux上磁盘热插拔 | 骏马金龙 (junmajinlong.com)


熊熊