低版本的驱动下,多路径组网环境时只能找到单倍的LUN

发布时间:  2013-04-01 浏览次数:  583 下载次数:  0
问题描述
主机和阵列通过交换机建立多路径组网,主机上安装Windows XP SP2版本的操作系统,主机上的HBA为Emulex  LPe111,HBA驱动版本为5.2.42.0,交换机为Brocade 200E。
本案例中的步骤描述如下:
步骤 1 在ThinPad工作站上安装Windwos XP的操作系统。
步骤 2 将主机系统和存储系统(OceanStor S5600T)按照主机多路径测试组网图连接起来。
步骤 3 在光纤交换机上,将主机的2个端口和阵列的1个端口划分到一个ZONE中。
步骤 4 映射LUN到主机,在主机端下执行磁盘刷新操作,只能发现单倍LUN。
步骤 5 重启主机后,同样只能发现单倍LUN。
----结束
告警信息
处理过程
从上面的分析可以发现问题的原因在于主机HBA端口只对A控下发了Report luns命令,而未对B控进行下发,因此,需要对主机HBA卡参数进行配置。
在主机系统中安装Emulex的管理工具,打开管理工具,打开使用的HBA卡端口,在可选参数项中发现参数“Allow Multiple Paths to SCSI Target”并未选中。如图3-1将参数“Allow Multiple Paths to SCSI Target”选中后,再次重启主机,就可以发现双倍的LUN。
图3-1 Emulex管理工具界面


当我们修改主机上HBA的配置后,再次重启主机时,再查看B控与主机的信息交互,如下所示:
[2013-02-25 15:08:56]---->PLOGI:0x226d0d00 0x006d0700 0x01290000 0x28000000 0x0014ffff 0x00000000 0x03000000 0x09080008 0x88000800 0x00ffffff 0x000007d0 0x10000000 0xc964fe1b 0x20000000 0xc964fe1b 0x00000000 0x00000000 0x00000000 0x00000000 0x80000000 0x00000800 0x00ff000c 0x00010000 0x80000000 0x00000800 0x00ff0000 0x00010000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000

[2013-02-25 15:08:56]<----LS_ACC(0x0):0x236d0700 0x006d0d00 0x01980000 0x00000000 0x001411b2 0x00000000 0x02000000

[2013-02-25 15:08:56]---->PRLI:0x226d0d00 0x006d0700 0x01290000 0x3c000000 0x001effff 0x00000000 0x20100014 0x08002000 0x00000000 0x00000000 0x000003a2

[2013-02-25 15:08:56]<----LS_ACC(0x0):0x236d0700 0x006d0d00 0x01980000 0x00000000 0x001e11b1 0x00000000 0x02100014

[2013-02-25 15:08:57]---->RSCN:0x226d0d00 0x00fffffd 0x01290000 0x6c000000 0x0f9fffff 0x00000000 0x61040008 0x006d0700 0x00000002

[2013-02-25 15:08:57]<----LS_ACC(0x0):0x23fffffd 0x006d0d00 0x01980000 0x00000000 0x0f9f11b0 0x00000000 0x02000000
[2013-02-25 15:08:57]<----GPN_ID(0x0):0x02fffffc 0x006d0d00 0x20290000 0x00000000 0x11afffff 0x00000000 0x01000000 0xfc020000 0x01120000 0x00000000 0x006d0700
[2013-02-25 15:08:57]---->CT_ACC:0x036d0d00 0x00fffffc 0x20980000 0x77000000 0x11af0fa0 0x00000000 0x01000000 0xfc020000 0x80020000 0x00000000

[2013-02-25 15:08:59]Hostlun 0,Devlun 13,State 1 CDB:Inquiry 12 00 00 00 44 00
[2013-02-25 15:08:59]The content of 0x12, devlun13 's DMA buffer Data is:
[2013-02-25 15:08:59] 00 00 04 32 3f 08 10 02 48 55 41 53 59 20 20 20 53 35 36 30 30 54 20 20 20 20 20 20 20 20 20 20 32 31 30 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 60 08 c0 00 3c 02 60 01 9c
[2013-02-25 15:08:59]Hostlun 0,Devlun 13,State 1 CDB:Report luns a0 00 00 00 00 00 00 00 80 08 00 00
[2013-02-25 15:08:59][3750632][15000000e0071][INFO][Find 2 LunMap, report 2 LUN to host 0x10000000c964fe1b][SCSI][SCSI_GoR.nsExec,223]
[2013-02-25 15:08:59]LunMap[hostlun,devlun]:
[2013-02-25 15:08:59]LunMap: [  0,  13]  [  1,  14]

可以发现此时主机上是下发了Report luns命令的,阵列也正常上报了映射的LUN。这样主机就能发现映射的LUN了。
 
根因
步骤 1 环境排查。
在阵列ISM界面里,发现启动器(本组网中只有一个启动器)为正常连接状态,在主机的路径信息里可以发现两条路径正常,故排除物理连接问题。
在ISM界面和阵列日志中没有发现错误和警告信息。
步骤 2 交互日志分析。
主机通过发送Reprot LUN查询阵列映射给了主机的LUN。由于该案例中只能发现单倍LUN,所以首先需要查看交互日志,看主机是否对两条路径都下发了Reprot LUN,如果下发了,则需要查看阵列是否正确回复。
A控日志如下:
[2013-02-25 14:41:13]Hostlun 0,Devlun 13,State 1 CDB:Inquiry 12 00 00 00 44 00
[2013-02-25 14:41:13]The content of 0x12, devlun13 's DMA buffer Data is:
[2013-02-25 14:41:13] 00 00 04 32 3f 08 10 02 48 55 41 53 59 20 20 20 53 35 36 30 30 54 20 20 20 20 20 20 20 20 20 20 32 31 30 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 60 08 c0 00 3c 02 60 01 9c
[2013-02-25 14:41:13]Hostlun 0,Devlun 13,State 1 CDB:Report luns a0 00 00 00 00 00 00 00 80 08 00 00
[2013-02-25 14:41:13][3333930][15000000e0071][INFO][Find 2 LunMap, report 2 LUN to host 0x10000000c964fe1b][SCSI][SCSI_GoR.nsExec,223]
[2013-02-25 14:41:13]LunMap[hostlun,devlun]:
[2013-02-25 14:41:13]LunMap: [  0,  13]  [  1,  14]

B控日志如下:
[2013-02-25 14:41:11]---->PRLI:0x226d0d00 0x006d0700 0x01290000 0x3a000000 0x001dffff 0x00000000 0x20100014 0x08002000 0x00000000 0x00000000 0x000003a2

[2013-02-25 14:41:11]<----LS_ACC(0x0):0x236d0700 0x006d0d00 0x01980000 0x00000000 0x001d11c0 0x00000000 0x02100014

[2013-02-25 14:41:11]---->RSCN:0x226d0d00 0x00fffffd 0x01290000 0x00000000 0x0d39ffff 0x00000000 0x61040008 0x006d0700 0x00000002
[2013-02-25 14:41:11]<----LS_ACC(0x0):0x23fffffd 0x006d0d00 0x01980000 0x00000000 0x0d3911bf 0x00000000 0x02000000
[2013-02-25 14:41:11]<----GPN_ID(0x0):0x02fffffc 0x006d0d00 0x20290000 0x00000000 0x11beffff 0x00000000 0x01000000 0xfc020000 0x01120000 0x00000000 0x006d0700
[2013-02-25 14:41:11]---->CT_ACC:0x036d0d00 0x00fffffc 0x20980000 0x0b000000 0x11be0d45 0x00000000 0x01000000 0xfc020000 0x80020000 0x00000000

从上面的信息中,可以看到主机与A控建立连接的时候,主机下发了Report luns命令来查询映射的LUN,而在与B控建立连接的时候,却没有下发这个命令。
步骤 3 原因定位。
通过步骤二可知,由于主机并未对B控下发Report luns命令,从而导致主机只能看到单倍LUN。SCSI协议模型如图2-1所示。
图2-1 SCSI协议模型


从上图可以发现,SCSI协议是一个CS模型,在这种情况下,作为目标器的阵列只能响应主机发送的命令,而无法主动发送命令给主机。当主机不下发Report luns命令来查询的时候,主机将无法获取到映射的LUN的信息。
通过上述分析,不难发现,这个问题归属为主机HBA问题,与阵列侧无关。
建议与总结
Emulex的一些老的驱动中,如果是多路径组网,则需要关注其参数:“Allow Multiple Paths to SCSI Target”。
该参数如果没有选中的话,则只有第一条建立连接的链路会上报LUN,其余的链路都不会上报LUN,这样就无法实现多路径功能。
在新的驱动中,该参数已经被Emulex去除,新驱动会在每一条链路上都下发ReportLUN命令来查询LUN信息。

END