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)