最近看scsi相关处理的一些备忘,比较零碎,仅作参考。
先从最显而易见的打印入手:
[0:0:0:0] disk ATA INTEL SSDSC2BX20 0150 - [0:0:1:0] disk ATA INTEL SSDSC2BX20 0150 - [0:1:0:0] disk LSI Logical Volume 3000 /dev/sda [5:0:0:0] enclosu AIC 12G 4U60: Hub 0c29 - [5:0:1:0] disk SEAGATE ST4000NM0025 N003 /dev/sdb [5:0:2:0] disk SEAGATE ST4000NM0025 N004 /dev/sdc [5:0:3:0] disk SEAGATE ST4000NM0025 N003 /dev/sdd [5:0:4:0] disk SEAGATE ST4000NM0025 N003 /dev/sde [5:0:5:0] disk SEAGATE ST4000NM0025 N003 /dev/sdf [5:0:6:0] disk SEAGATE ST4000NM0025 N003 /dev/sdg [5:0:7:0] disk SEAGATE ST4000NM0025 N004 /dev/sdh [5:0:8:0] disk SEAGATE ST4000NM0025 N003 /dev/sdi [5:0:9:0] disk SEAGATE ST4000NM0025 N004 /dev/sdj [5:0:10:0] disk SEAGATE ST4000NM0025 N003 /dev/sdk [5:0:11:0] disk SEAGATE ST4000NM0025 N004 /dev/sdl [5:0:12:0] disk SEAGATE ST4000NM0025 N004 /dev/sdm [5:0:13:0] disk SEAGATE ST4000NM0025 N004 /dev/sdn [5:0:14:0] disk SEAGATE ST4000NM0025 N004 /dev/sdo [5:0:15:0] disk SEAGATE ST4000NM0025 N003 /dev/sdp [5:0:16:0] disk SEAGATE ST4000NM0025 N003 /dev/sdq [5:0:17:0] disk SEAGATE ST4000NM0025 N003 /dev/sdr [5:0:18:0] disk SEAGATE ST4000NM0025 N004 /dev/sds [5:0:19:0] disk SEAGATE ST4000NM0025 N003 /dev/sdt [5:0:20:0] disk SEAGATE ST4000NM0025 N003 /dev/sdu [5:0:21:0] enclosu AIC 12G 4U60: Edge-C 0c2a - [5:0:22:0] disk SEAGATE ST4000NM0025 N003 /dev/sdv [5:0:23:0] disk SEAGATE ST4000NM0025 N003 /dev/sdw [5:0:24:0] disk SEAGATE ST4000NM0025 N004 /dev/sdx [5:0:25:0] disk SEAGATE ST4000NM0025 N003 /dev/sdy [5:0:26:0] disk SEAGATE ST4000NM0025 N003 /dev/sdz [5:0:27:0] disk SEAGATE ST4000NM0025 N003 /dev/sdaa [5:0:28:0] disk SEAGATE ST4000NM0025 N003 /dev/sdab [5:0:29:0] disk SEAGATE ST4000NM0025 N004 /dev/sdac [5:0:30:0] disk SEAGATE ST4000NM0025 N004 /dev/sdad [5:0:31:0] disk SEAGATE ST4000NM0025 N003 /dev/sdae [5:0:32:0] disk SEAGATE ST4000NM0025 N004 /dev/sdaf [5:0:33:0] disk SEAGATE ST4000NM0025 N003 /dev/sdag [5:0:34:0] disk SEAGATE ST4000NM0025 N003 /dev/sdah [5:0:35:0] disk SEAGATE ST4000NM0025 N003 /dev/sdai [5:0:36:0] disk SEAGATE ST4000NM0025 N003 /dev/sdaj [5:0:37:0] disk SEAGATE ST4000NM0025 N004 /dev/sdak [5:0:38:0] disk SEAGATE ST4000NM0025 N003 /dev/sdal [5:0:39:0] disk SEAGATE ST4000NM0025 N003 /dev/sdam [5:0:40:0] disk SEAGATE ST4000NM0025 N003 /dev/sdan [5:0:41:0] disk SEAGATE ST4000NM0025 N004 /dev/sdao [5:0:42:0] enclosu AIC 12G 4U60: Edge-R 0c2a - [5:0:43:0] disk SEAGATE ST4000NM0025 N003 /dev/sdap [5:0:44:0] disk SEAGATE ST4000NM0025 N003 /dev/sdaq [5:0:45:0] disk SEAGATE ST4000NM0025 N003 /dev/sdar [5:0:46:0] disk SEAGATE ST4000NM0025 N003 /dev/sdas [5:0:47:0] disk SEAGATE ST4000NM0025 N003 /dev/sdat [5:0:48:0] disk SEAGATE ST4000NM0025 N004 /dev/sdau [5:0:49:0] disk SEAGATE ST4000NM0025 N004 /dev/sdav [5:0:50:0] disk SEAGATE ST4000NM0025 N004 /dev/sdaw [5:0:51:0] disk SEAGATE ST4000NM0025 N003 /dev/sdax [5:0:52:0] disk SEAGATE ST4000NM0025 N004 /dev/sday [5:0:53:0] disk SEAGATE ST4000NM0025 N003 /dev/sdaz [5:0:54:0] disk SEAGATE ST4000NM0025 N003 /dev/sdba [5:0:55:0] disk SEAGATE ST4000NM0025 N003 /dev/sdbb [5:0:56:0] disk SEAGATE ST4000NM0025 N003 /dev/sdbc [5:0:57:0] disk SEAGATE ST4000NM0025 N003 /dev/sdbd [5:0:58:0] disk SEAGATE ST4000NM0025 N003 /dev/sdbe [5:0:59:0] disk SEAGATE ST4000NM0025 N003 /dev/sdbf [5:0:60:0] disk SEAGATE ST4000NM0025 N003 /dev/sdbg [5:0:61:0] disk SEAGATE ST4000NM0025 N003 /dev/sdbh [5:0:62:0] disk SEAGATE ST4000NM0025 N003 /dev/sdbi [5:0:63:0] enclosu AIC 12G 4U60: Edge-L 0c2a - [6:0:0:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbj [6:0:1:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbk [6:0:2:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbl [6:0:3:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbm [6:0:4:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbn [6:0:5:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbo [6:0:6:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbp [6:0:7:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbq [7:0:0:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbr [7:0:1:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbs [7:0:2:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbt [7:0:3:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbu [7:0:4:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbv [7:0:5:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbw [7:0:6:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdbx [7:0:7:0] disk HGST SDLL1DLR960GCAA1 W150 /dev/sdby
前面第一列数字是什么?各个数字之间的关系是什么?内核中对scsi层的抽象是怎么做的?scsi命令的抽象是什么?
scsi命令下发后遇到错误怎么办,返回超时怎么办?正常返回的流程是什么样的?下面就带着这些疑问来看代码。
前面第一列数字是什么?
lsscsi显示的第一列是scsi设备在内核中展示的各级编号,根据编号可以唯一确定一个设备,
如果使用 cat /proc/scsi/scsi 来查看会显得好理解一些:
cat /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 01 Id: 00 Lun: 00 Vendor: LSI Model: Logical Volume Rev: 3000 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: ATA Model: INTEL SSDSC2BX20 Rev: 0150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi0 Channel: 00 Id: 01 Lun: 00 Vendor: ATA Model: INTEL SSDSC2BX20 Rev: 0150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 00 Lun: 00 Vendor: AIC 12G Model: 4U60: Hub Rev: 0c29 Type: Enclosure ANSI SCSI revision: 05 Host: scsi5 Channel: 00 Id: 01 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 02 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 03 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 04 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 05 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 06 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 07 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 08 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 09 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 10 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 11 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 12 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 13 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 14 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 15 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 16 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 17 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 18 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 19 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 20 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 21 Lun: 00 Vendor: AIC 12G Model: 4U60: Edge-C Rev: 0c2a Type: Enclosure ANSI SCSI revision: 05 Host: scsi5 Channel: 00 Id: 22 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 23 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 24 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 25 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 26 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 27 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 28 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 29 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 30 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 31 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 32 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 33 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 34 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 35 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 36 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 37 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 38 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 39 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 40 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 41 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 42 Lun: 00 Vendor: AIC 12G Model: 4U60: Edge-R Rev: 0c2a Type: Enclosure ANSI SCSI revision: 05 Host: scsi5 Channel: 00 Id: 43 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 44 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 45 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 46 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 47 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 48 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 49 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 50 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 51 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 52 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N004 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 53 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 54 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 55 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 56 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 57 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 58 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 59 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 60 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 61 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 62 Lun: 00 Vendor: SEAGATE Model: ST4000NM0025 Rev: N003 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi5 Channel: 00 Id: 63 Lun: 00 Vendor: AIC 12G Model: 4U60: Edge-L Rev: 0c2a Type: Enclosure ANSI SCSI revision: 05 Host: scsi6 Channel: 00 Id: 00 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi6 Channel: 00 Id: 01 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi6 Channel: 00 Id: 02 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi6 Channel: 00 Id: 03 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi6 Channel: 00 Id: 04 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi6 Channel: 00 Id: 05 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi6 Channel: 00 Id: 06 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi6 Channel: 00 Id: 07 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi7 Channel: 00 Id: 00 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi7 Channel: 00 Id: 01 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi7 Channel: 00 Id: 02 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi7 Channel: 00 Id: 03 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi7 Channel: 00 Id: 04 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi7 Channel: 00 Id: 05 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi7 Channel: 00 Id: 06 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06 Host: scsi7 Channel: 00 Id: 07 Lun: 00 Vendor: HGST Model: SDLL1DLR960GCAA1 Rev: W150 Type: Direct-Access ANSI SCSI revision: 06
从编号可以看出,第一级是host,第二级是channel,第三级是target编号,第四级是LUN号
h == hostadapter id (first one being 0) c == SCSI channel on hostadapter (first one being 0) t == ID l == LUN (first one being 0)
各个数字之间的关系是什么?
一个主板可能接多个host,比如上面的服务器,在有多个sas芯片的情况下,肯定就有多个host。一个sas芯片又可以分割为多个通道,也就是channel,也叫bus。一个通道下多个target,一个target下多个lun。
如果一个硬盘支持双通道,那么在scsi层,就是展示为两个scsi标号。
内核中对scsi层的抽象是怎么做的?
对于device,有个scsi_device的抽象,host成员指向它归属的scsi_host,siblings成员嵌入到host的__device成员中。同时,它的 sdev_gendev 成员的parent指向 对应的scsi_target的dev地址,
这个只要熟悉linux的驱动模型就能理解了。
下面看一下scsi_device的实际例子:
crash> scsi_device ffff881fcee44800 struct scsi_device { host = 0xffff883fd0e38000,-----------------指向scsi_host,这个会在后面描述 request_queue = 0xffff883fc1e28828,--------这个大家应该清楚,就是之前申请存放下发io的request_queue,要注意区分单队列和多队列 siblings = {-------------------------------当前host下的所有scsi_device通过这个串起来,他们是兄弟关系,所以成员名就叫siblings next = 0xffff881fcece9810, prev = 0xffff881fcee44010 }, same_target_siblings = {------------------这个是同一个target下的scsi_device的串接,这里有个问题是,串接这个也需要获取host的锁,其实可以优化。 next = 0xffff883fc1e21c18, prev = 0xffff883fc1e21c18 }, { device_busy = { counter = 6 }, __UNIQUE_ID_rh_kabi_hide20 = { device_busy = 6 }, {<No data fields>} }, list_lock = { { rlock = { raw_lock = { { head_tail = 1215842424, tickets = { head = 18552, tail = 18552 } } } } } }, cmd_list = { next = 0xffff881f49a2d508, prev = 0xffff883eeccee308 }, starved_entry = { next = 0xffff881fcee44848, prev = 0xffff881fcee44848 }, current_cmnd = 0x0, queue_depth = 254, max_queue_depth = 254, last_queue_full_depth = 0, last_queue_full_count = 0, last_queue_full_time = 0, queue_ramp_up_period = 120000, last_queue_ramp_up = 0, id = 4,--------------------------------这个一般赋值为target的id lun = 0,-------------------------------就是大家看到的四级编号的最后一级,lun channel = 0,---------------------------通道号 manufacturer = 0, sector_size = 512, hostdata = 0xffff883fca92ed20, type = 0 '