SCSI Addressing

· 1177 words · 3 minute read

HBTL 经常容易和 LaTeX 图片位置 htbp 记岔,好记性不如烂笔头。记录一下。内容主要翻译自RedHat文档。

HBTL 🔗

HBTL - Host:Bus:Target:LUN 也被称为 HCIL 寻址。1 SCSI 设备热插拔前后对应的块设备名可能会发生变化,比如 /dev/sda 变成 /dev/sdb,但是设备的 HBTL 地址不换槽位就不会变。2

名称 含义
H SCSI Host ID 是 SCSI Host Bus Adapter (HBA) 卡的 ID. 该 ID 是内核发现 HBA 卡后分配的。
B B 对应 HBA 卡内的 Bus(也叫 Channel) ID,也是内核分配的。大部分 SCSI 控制器只有一个 bus/channel,因此对应的 ID 大都为 0;
T Target 是 Bus 内的设备 ID,和 H 以及 B 一样也是内核分配的。
L Logical Unit Number (LUN) SCSI target 内的一块逻辑磁盘,一个磁带设备等等。和 H、B、T不一样,这个数字是存储设备自己分配的。

命令示例:

$ cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: SSDSC2KG019T8R   Rev: DL63
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST2000NM000A-2J2 Rev: TN01
  Type:   Direct-Access                    ANSI  SCSI revision: 05

$ lsscsi -N
[0:0:0:0]    disk    ATA      SSDSC2KG019T8R   DL63  /dev/sda
[1:0:0:0]    disk    ATA      ST2000NM000A-2J2 TN01  /dev/sdb

$ sg_map -x
/dev/sg0  0 0 0 0  0  /dev/sda
/dev/sg1  1 0 0 0  0  /dev/sdb
      ^   H:B:T:L  ^        ^
	  |            |        |
	  |            |        `---- SCSI upper layer device
	  |            `-- type
	  |
	  `-- SCSI generic device

其中,SCSI device type 在头文件中定义如下:

/* file: /usr/include/scsi/scsi.h */
#define TYPE_DISK           0x00
#define TYPE_TAPE           0x01
#define TYPE_PROCESSOR      0x03    /* HP scanners use this */
#define TYPE_WORM           0x04    /* Treated as ROM by our system */
#define TYPE_ROM            0x05
#define TYPE_SCANNER        0x06
#define TYPE_MOD            0x07    /* Magneto-optical disk -
                                     * - treated as TYPE_DISK */
#define TYPE_MEDIUM_CHANGER 0x08
#define TYPE_ENCLOSURE      0x0d    /* Enclosure Services Device */
#define TYPE_NO_LUN         0x7f

常见的 SCSI upper layer 设备类型、设备名以及内核模块对应关系:

类型 设备名 内核模块
disk /dev/sda sd_mod.ko
cd/dvd /dev/sr0 sr_mod.ko
tape /dev/st0 st_mod.ko

SCSI 地址图例 🔗

HBTL 寻址其实是一种 routing 方法。

   HBA (Host Bus Adapter)                                                     SCSI
 e.g. PCI storage controller                                                  address
+---------------------------+              +----------------------------+     h:b:t:l
| SCSI      | Bus/Channel(0)+------------->+ SCSI Target (0) |  LUN 0   |  << 0:0:0:0
| Host (0)  +---------------+              |                 +----------+
|           | Bus/Channel(1)+------+       |                 |  LUN 1   |  << 0:0:0:1
+---------------------------+      |       |                 +----------+
                                   |       |                 :          |
                                   |       |                 +----------+
                                   |       |                 |  LUN n   |  << 0:0:0:n
                                   |       +----------------------------+
                                   |
                                   |
                                   |       +----------------------------+
                                   +------>+ SCSI Target (0) |  LUN 0   |  << 0:1:0:0
                                           |                 +----------+
                                           |                 |  LUN 1   |  << 0:1:0:1
                                           |                 +----------+
                                           |                 |  LUN 2   |  << 0:1:0:2
                                           |                 +----------+
                                           |                 :          |
                                           |                 +----------+
                                           |                 |  LUN n   |  << 0:1:0:n
                                           +----------------------------+

多路径 🔗

一个 LUN 可以有多个寻址方式。比如,下面是 FC 的例子:

   HBA (Host Bus Adapter)
 e.g. PCI storage controller                                                SCSI
+--------------------------+   +-----+   +-------------------------+      Addresses
| SCSI     | Bus/Channel(0)+-->+  F  +-->+ SCSI Target (n) | LUN 0 | << 0:0:0:0 AND 1:0:2:0
| Host (0) |               |   |  C  |   |                 +-------+
|          |               |   |     |   |                 | LUN 1 | << 0:0:0:1 AND 1:0:2:1
+--------------------------+   |  S  |   |                 +-------+
                               |  w  |   |                 :       |
+--------------------------+   |  i  |   |                 +-------+
| SCSI     | Bus/Channel(0)+-->+  t  |   |                 | LUN n | << 0:0:0:n AND 1:0:2:n
| Host (1) |               |   |  c  |   +-------------------------+
|          |               |   |  h  |
+--------------------------+   +-----+

怎么知道上面的 0:0:0:0 和 1:0:2:0 最终寻址到同一个 LUN 呢?查 WWN 或者 SCSI ID. 3

$ lsscsi -i | grep sda
[0:0:0:0]    disk    ATA    SSDSC2KG019T8R   DL63  /dev/sda   355cd2e41507fe2a0

$ lsscsi -w | grep sda
[0:0:0:0]    disk    ATA    SSDSC2KG019T8R   DL63  0x55cd2e41507fe2a0              /dev/sda

$ /lib/udev/scsi_id -g -u /dev/sda
355cd2e41507fe2a0

$ sg_inq -p 0x83 /dev/sda
VPD INQUIRY: Device Identification page
  Designation descriptor number 1, descriptor length: 24
    designator_type: vendor specific [0x0],  code_set: ASCII
    associated with the Addressed logical unit
      vendor specific:   PHYG908301LF1P9DGN
  Designation descriptor number 2, descriptor length: 72
    designator_type: T10 vendor identification,  code_set: ASCII
    associated with the Addressed logical unit
      vendor id: ATA
      vendor specific: SSDSC2KG019T8R                            PHYG908301LF1P9DGN
  Designation descriptor number 3, descriptor length: 12
    designator_type: NAA,  code_set: Binary
    associated with the Addressed logical unit
      NAA 5, IEEE Company_id: 0x5cd2e4
      Vendor Specific Identifier: 0x1507fe2a0
      [0x55cd2e41507fe2a0]

如果配置了多路径,也可以 multipath -l /dev/mappe/mpathX 查询。

WWN & NAA 🔗

对比上面的命令输出,可以看到 WWN4 相比 SCSI ID 少了一个最前面的 ‘3’. 这个前缀 ‘3’ 表示后面跟着的 ID 来自设备的 VPD page 0x83,符合 NAA 规范。

其中,‘55cd2e41507fe2a0’ 是个八字节的 ID,第一个 ‘5’ 表示 NAA type 5 格式。如果第一个字符是 ‘6’,则代表 NAA type 6 格式,占用 16 字节。

55cd2e41507fe2a0
               Vendor
NAA  OUI       Specific
  5  5c-d2-e4  1507fe2a0
  
6000097123456789abcdeffedcba9876
               Vendor    Vendor
NAA  OUI       Specific  Specific Ext.
  6  00-00-97  123456789 abcdeffedcba9876

OUI - Organizationally Unique Identifier.5

  • 5c:d2:e4 - Intel Corporate
  • 00:00:97 - DeLL EMC.

  1. Host, Channel, Id, Lun. ↩︎

  2. 但是一个 SCSI 设备可能有多个路径。 ↩︎

  3. How to find the WWID of storage disk ↩︎

  4. World Wide Name ↩︎

  5. OUI lookup tool ↩︎

comments powered by Disqus