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

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

这个协议版本在哪里configuration? 这是在操作系统方面? 或者在存储方面? 我们使用完全相同的方式安装RH服务器。 我们在RHEL和我们的存储供应商开了一个案例,当然RHEL说这是存储,存储供应商告诉我们这是操作系统。

这对LUN发现有影响(LUN ID不按顺序 – >您需要手动指示scsi重新扫描要扫描的LUN ID的范围 – >无法在没有手动干预的情况下在重新启动时查看所有LUN) 。

我们不知道在哪里看,有人有一个身份证去哪里看? Bellow是3个不同服务器上sg_inq的输出。

 [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的问题是:在evry主机上的以下输出是不同的: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 (eg, 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; 

这是否给任何人一些想法? 问候迈克

27/10/2011更新:

你好我们最近做了两个有趣的testing:

  • 将Lun从同一个存储中提交给另一个主机(由于我们在RAC集群的3个成员上有同样的问题,所以这个testing很明显)

– > SCSI的修订版确定

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

– >该主机上的scsi修订版是OK的

我们已经注意到,这3个RAC节点在不同的存储上有很多磁盘…因为一个存储必须被分解,所以在进一步之前,我们将先清理这个…

我们还决定在启动顺序中执行scsi-rescan以便能够重启机器而不会出现问题(我讨厌这种工作)

我会保留你的另一个build议为未来;)

我会保持你张贴在这个问候

协议版本是驱动器的属性,或者位于驱动器和主机之间的仿真层。 如果您有一个执行RAIDfunction的机柜,并提供一个表示多个设备的单个LUN或一些可configuration的分区,那么它是定义了它所说的SCSI协议版本的RAID层。

嗯,我已经看到,sg_inq没有列出整个版本信息调用没有参数。 如果您需要设备声明遵守的所有标准的列表,则应使用sg_inq -d /dev/sda – 可能会在所有主机上获得相同的输出。

另一方面,无论设备声称,它不一定是你正在使用的协商协议属性可能会有所不同。

由于您的LUN是无序发现的,因此可以尝试在Fast!Utilconfiguration选项中查找可能的configuration差异。 向QLogic(或者您的硬件制造商,如果您有OEMA HBA)询问可能的问题原因,可能也值得。

编辑:你的问题似乎很棘手 – 在黑暗中的一些镜头可能会帮助没有明显的原因,或推动你几步解决。

  • 尝试不同的驱动程序 – 您可能使用QLA 23xx / 24xx FC HBA,但使用较早的qla2xxx驱动程序 – 尝试用qla2300 / qla2400特定模块replace它们,看看这是否有任何区别
  • 尝试在有问题的机器和机器上工厂重置您的HBAconfiguration ,看看它是否有任何区别
  • 如果你有这个select,可以使用另一个FC HBA(也许只需在eBay上以$ 50购买一个旧式的Emulex适配器)进行testing,看看它是否会改变任何东西
  • 使用不同的操作系统版本启动系统 – 例如实时的sysrescuecd版本,以查看问题是否可以在不同的内核/模块版本中重现