来深圳出差是解决openpower710+redflag连接EMC CX300存储的故障问题,而这个连接方案我已经在北京作的测试,也有对应的测试报告,但是同样的环境,在深圳却找不到存储设备,很是怪异。而最后的解决办法更是让我搞不明白,因此标题冠以“灵异”二字,而具体的情况估计也说不太清楚,就贴上我的当时的一些记录吧,这是最后
在CX300上删除两台Linux系统的注册信息,重新注册和设置权限,再调试multipath,仍然不能做到路径“愈合”。 重新编译multipath,还是有这个错误。
再调试各种multipath配置,到网上查找资源。现在的能看到的错误是三个:
multipath -ll出现的[faulty]- multipathd 服务启动时给出的
Failing path multipath -v3给出的path not correctly configured for failover
理清的思路是3)导致了2)的出现,1)是2)的具体表现。因此需要重点考虑3)的报错信息。 无数电话和研发沟通,研发建议我从multipath源代码中看这个信息是从哪里报出来的,有没有办法屏蔽或者从报错的源代码中找到一些线索。
multipath的源代码中有两个c程序包含了该错误信息,一个是path_priority/pp_emc/pp_emc.c
代码片段如下:
if ( /* Effective initiator type */
sense_buffer[27] != 0x03
/* Failover mode should be set to 1 */
|| (sense_buffer[28] & 0x07) != 0x04
/* Arraycommpath should be set to 1 */
|| (sense_buffer[30] & 0x04) != 0x04) {
fprintf(stderr, "Path not correctly configured for failover");
}
分别屏蔽三个条件来测试。发现第二个条件和第三个条件全部屏蔽后multipath
-v3不会再报 3)的错误,但是multipathd服务还是会给出2)的错误。
另外一个包含3)错误的源代码是libcheckers/emc_clariion.c,代码片段
if ( /* Effective initiator type */
sense_buffer[27] != 0x03
/* Failover mode should be set to 1 */
|| (sense_buffer[28] & 0x07) != 0x04
/* Arraycommpath should be set to 1 */
|| (sense_buffer[30] & 0x04) != 0x04) {
MSG("emc_clariion_checker: Path not correctly configured for
failover");
ret = PATH_DOWN;
goto out;
}
从这段得知,如果有这个报错,会将程序返回值设置为PATH_DOWN,查看multipath的说明文件,当设置为这个返回值时,multipathd 服务会认为路径会处于faulty状态,这就是我们能看到的1)错误信息。于是屏蔽上述代码中的后两个条件测试信息。
重新编译,安装,测试。1),2),3)错误信息完全消失,路径也能“愈合”。看上去似乎很已经彻底解决这次的故障。
打电话给研发,告知修改方法,研发不能保证该方式能否做到trespass功能,因为发生trespass的触发条件已经屏蔽。他建议我如果有时间的话,按照源代码中指示的参数设置值,修改一下CX300的配置,再做测试。
于是根据源代码中的信息,将CX300中ArrayCommPath,failover两个参数改回原来的enable和1。 重启系统,重新安装multipath包,再测试一切正常,按照在北京的测试文档,测试均通过,包括控制器的trespass. 升级系统到sp1,再测试,一切正常。
从这点看来,事情又回到了起点,我来深圳的时候看到的配置和今天我看到的配置完全相同,当时之所以要修改默认的ArrayCommPath和 failover参数,是因为系统无法正确的识别到四个设备。其中两个设备识别出来的vendor是DGC,大小正常。 另外两个的vendor是LUNZ,大小是1G。而从前天发给大家的pdf文档中恰好提到了LUNZ的问题,出错的信息和我们现场一样,pdf文档建议修改为disable和2。而修改后确实能认到正确的设备,于是就认为这个参数修改无疑是正确的。剩下的任务应该是来修改multipath来消除上面给出的错误信息,这就导致我们离正确的解决办法越走越远,导致用了2天的时间来修改multipath配置,连研发都认为可能是我们的系统问题,后者是系统不够稳定,或者是multipath不稳定。
仔细回想这几天的操作,我觉得当时之所以不能正确识别设备的原因可能是CX300上修改的配置并没有生效。所以我给出下面的建议:
划分LUN并配置完成后,最好重启存储设备,如果确实不能重启的(比如这次,就不允许重启)。
可以考虑对控制器做两次切换来确保配置生效。
而multipath无须做任何修改,DC5.0 SP1上的版本可以直接使用。