Solaris上PowerPath服务powershift维护状态问题

在一台Solaris 10的机器上识别EMC Unity 300的存储LUN时,发现磁盘能正常在format中识别,但是使用powermt config命令始终无法合并路径。
Solaris上PowerPath服务powershift维护状态问题
于是使用reboot - - -rv重启系统,在系统启动过程中发现PowerPath服务报错:
Jun 12 14:58:41 svc.startd[11]: svc:/system/emcpower/powershift:default: Method “/lib/svc/method/powershift” failed with exit status 1.
Jun 12 14:58:42 svc.startd[11]: svc:/system/emcpower/powershift:default: Method “/lib/svc/method/powershift” failed with exit status 1.
Jun 12 14:58:43 svc.startd[11]: svc:/system/emcpower/powershift:default: Method “/lib/svc/method/powershift” failed with exit status 1.
Jun 12 14:58:43 svc.startd[11]: system/emcpower/powershift:default failed: transitioned to maintenance (see ‘svcs -xv’ for details)

使用svcs -xv查看故障服务,服务powershift处于维护状态:
svc:/system/emcpower/powershift:default (EMC PowerPath powershift initialization script)
State: maintenance since Fri Jun 12 14:58:43 2020
Reason: Start method failed repeatedly, last exited with status 1.
See: http://sun.com/msg/SMF-8000-KS
See: /var/svc/log/system-emcpower-powershift:default.log
Impact: 1 dependent service is not running:
svc:/system/emcpower/emcp_mond:default

查看服务的日志文件 /var/svc/log/system-emcpower-powershift:default.log,发现服务的启动方法出错:
Solaris上PowerPath服务powershift维护状态问题

手工执行启动脚本,还是报”test: argument expected“的错误:
Solaris上PowerPath服务powershift维护状态问题

powershift的脚本比较长,有670行,于是打开诊断模式和采取逐段注释的方法来排查问题,最后发现在370行的命令有bug,导致脚本执行报错。脚本使用了grep命令去查看/etc/emc/unmanaged_classes文件,但不知什么原因文件中包括了两行clarrion和两行vnx,导致输出有两个clarrion(或vnx),然后脚本使用if命令来判断真假时由于字符串中包含两个以空格分开的字符串clarrion,导致脚本无法执行下去,报”test: argument expected“的错误。

更改/etc/emc/unmanaged_classes文件,删除重复的行(由于不需要隔离PowerPath不管理的存储类型,最后将文件移除掉了),然后使用svcadm clear powershift清除服务的维护状态,Powerpath的相关服务恢复正常。