Linux Rhel5.6:SCSI 协议版本--它在哪里定义?

Linux Rhel5.6:SCSI 协议版本--它在哪里定义?

在我们的环境中,我们有几个存储柜连接到 RH Linux 服务器。根据连接到主机的存储柜,可以看到一些 LUN 使用 SCSI 协议版本 2(版本=0x02 [SCSI-2]),而其他 LUN 使用协议版本 4。(版本=0x04 [SPC-2])。

此协议版本在哪里配置?是在操作系统端?还是在存储端?我们使用完全相同的方式安装了 RH 服务器。我们在 RHEL 和我们的存储供应商处开立了一个案例,当然 RHEL 说这是存储问题,存储供应商告诉我们这是操作系统问题。

这会对 LUN 发现产生影响(LUN ID 不按顺序排列 --> 您需要手动告诉 scsi-rescan 您想要扫描的 LUN ID 范围 --> 如果不进行手动干预,则无法在重新启动时查看所有 LUN)。

sg_inq我们不知道该去哪里找了,有人知道该去哪里找吗?下面是3 个不同服务器的输出。

[qualification:root@xxxxxxxx:/root]$ sg_inq /dev/sda
standard INQUIRY:
PQual=0 Device_type=0 RMB=0 version=0x02 **[SCSI-2]**
[AERC=0] [TrmTsk=0] NormACA=0 HiSUP=1 Resp_data_format=2
SCCS=0 ACC=0 TPGS=0 3PC=0 Protect=0 BQue=0
EncServ=0 MultiP=1 (VS=0) [MChngr=0] [ACKREQQ=0] Addr16=1
[RelAdr=0] WBus16=0 Sync=0 Linked=0 [TranDis=0] CmdQue=1
[SPI: Clocking=0x0 QAS=0 IUS=0]
length=184 (0xb8) Peripheral device type: disk
Vendor identification: HITACHI
Product identification: DF600F
Product revision level: 0000
Unit serial number: 850531780000


[root@ccccccccccc ~]# sg_inq /dev/sda
standard INQUIRY:
PQual=0 Device_type=0 RMB=0 version=0x04 **[SPC-2]**
[AERC=0] [TrmTsk=0] NormACA=0 HiSUP=1 Resp_data_format=2
SCCS=0 ACC=0 TPGS=0 3PC=0 Protect=0 BQue=0
EncServ=0 MultiP=1 (VS=0) [MChngr=0] [ACKREQQ=0] Addr16=1
[RelAdr=0] WBus16=0 Sync=0 Linked=0 [TranDis=0] CmdQue=1
[SPI: Clocking=0x0 QAS=0 IUS=0]
length=184 (0xb8) Peripheral device type: disk
Vendor identification: HITACHI
Product identification: DF600F
Product revision level: 0000
Unit serial number: 8505035001DA

[pre-prod:root@vvvvvvvvv:/home/a143524]$ sg_inq /dev/sda
standard INQUIRY:
PQual=0 Device_type=0 RMB=0 version=0x04 **[SPC-2]**
[AERC=0] [TrmTsk=0] NormACA=0 HiSUP=1 Resp_data_format=2
SCCS=0 ACC=0 TPGS=0 3PC=0 Protect=0 BQue=0
EncServ=0 MultiP=1 (VS=0) [MChngr=0] [ACKREQQ=0] Addr16=1
[RelAdr=0] WBus16=0 Sync=0 Linked=0 [TranDis=0] CmdQue=1
[SPI: Clocking=0x0 QAS=0 IUS=0]
length=184 (0xb8) Peripheral device type: disk
Vendor identification: HITACHI
Product identification: DF600F
Product revision level: 0000
Unit serial number: 850503500032

该驱动程序是 rhel 自带的默认 qla 模块,我们不更改很多参数:

选项 qla2xxx qlport_down_retry=1 ql2xplogiabsentdevice=1 ql2xmaxqdepth=16

结果是:

[qualification:root@xxxxxxxx]$ for i in  /sys/module/qla2xxx/parameters/*;
do
echo $i;cat $i;
done

/sys/module/qla2xxx/parameters/ql2xallocfwdump
1

/sys/module/qla2xxx/parameters/ql2xdbwr
1

/sys/module/qla2xxx/parameters/ql2xdevdiscgoldfw
0

/sys/module/qla2xxx/parameters/ql2xdontresethba
0

/sys/module/qla2xxx/parameters/ql2xenablemsix
1

/sys/module/qla2xxx/parameters/ql2xetsenable
0

/sys/module/qla2xxx/parameters/ql2xextended_error_logging
1

/sys/module/qla2xxx/parameters/ql2xfdmienable
0

/sys/module/qla2xxx/parameters/ql2xfwloadbin
0

/sys/module/qla2xxx/parameters/ql2xloginretrycount
30

/sys/module/qla2xxx/parameters/ql2xlogintimeout
20

/sys/module/qla2xxx/parameters/ql2xmaxqdepth
16

/sys/module/qla2xxx/parameters/ql2xplogiabsentdevice
1

/sys/module/qla2xxx/parameters/ql2xqfullrampup
120

/sys/module/qla2xxx/parameters/ql2xqfulltracking
1

/sys/module/qla2xxx/parameters/ql2xshiftctondsd
6

/sys/module/qla2xxx/parameters/ql2xtargetreset
1

/sys/module/qla2xxx/parameters/qlport_down_retry
1

另一件让我想到 Linux 问题的事情是:以下输出在每个主机上都不同:SCSI 修订版给出不同的结果

cat /proc/scsi/scsi:
...

Host: scsi1 Channel: 00 Id: 04 Lun: 99
  Vendor: HITACHI  Model: DF600F           Rev: 0000
  Type:   Direct-Access                    ANSI SCSI revision: 02

但使用 SCLI 时我发现 SBC-2 的输出始终相同:

LUN 99
---------------------------------------
Product Vendor                 : HITACHI 
Product ID                     : DF600F          
Product Revision               : 0000
LUN                            : 99
Size                           : 100.00 GB
Type                           : SBC-2 Direct access block device
                       (e.g., magnetic disk)
WWULN                          : 48-49-54-41-43-48-49-20-38-35-30-35-32-38-39-30
                       30-30-39-39
OS LUN Name                    : /dev/sdiz;/dev/sg259;

这能给任何人一些启发吗?问候 Mike

2011/10/27更新:

嗨,我们最近做了两个有趣的测试:

  • 将同一存储中的 Lun 呈现给另一台主机(这个测试很明显,因为我们在 RAC 集群的 3 个成员上遇到了同样的问题)

--> SCSI 修订版没问题

  • 将另一个存储中的 Lun 呈现给有问题的主机

--> 此主机上的 scsi 修订版正常

我们注意到这 3 个 RAC 节点在不同的存储上有很多磁盘...由于一个存储必须退役,我们将首先清理它,然后再进行进一步的操作...

我们还决定在启动顺序中实现 scsi-rescan,以便能够无问题地重新启动机器(我讨厌这种解决方法)

我会保留您的其他建议以备将来使用;)

我会及时通知你。

答案1

协议版本是驱动器的属性,或位于驱动器和主机之间的模拟层。如果您有一个执行 RAID 功能的机柜,并且提供代表多个设备的单个 LUN,或一些可配置的切片,那么 RAID 层将定义它使用的 SCSI 协议版本。

答案2

嗯,我发现 sg_inq 在调用时不带参数,不会列出完整的版本信息。如果您需要列出设备声称符合的所有标准,您应该使用sg_inq -d /dev/sda- 很有可能您会在所有主机上获得相同的输出。

另一方面,无论设备声明什么,它都不一定是您正在使用的 - 协商的协议属性可能会有所不同。

由于您的 LUN 被发现无序,您可以尝试仔细查看 Fast!Util 配置选项,以了解您的配置之间可能存在的差异。此外,向 QLogic(或您的硬件制造商,如果您有 OEMed HBA)支持人员咨询问题的可能原因也是值得的。

编辑: 您的问题看起来很棘手——一些盲目的尝试可能会毫无理由地有所帮助,或者推动您朝着解决问题迈出几步。

  • 尝试不同的驱动程序 - 您可能正在使用 QLA 23xx/24xx FC HBA,但使用较旧的 qla2xxx 驱动程序 - 尝试用 qla2300/qla2400 特定模块替换它们,看看是否会产生任何差异
  • 尝试将 HBA 配置恢复出厂设置在有问题的机器和运行良好的机器上,看看是否有任何区别
  • 如果有此选项,请使用另一个 FC HBA(也许只需在 eBay 上花 50 美元购买一个较旧的 Emulex 适配器)进行测试,看看是否会改变任何事情
  • 使用不同的操作系统版本启动系统 - 例如 live系统救援版本,看看问题是否可以通过不同的内核/模块版本重现

相关内容