SES2
LED控制
1、磁盘LED控制的背景及需求
磁盘阵列中每个磁盘都对应多个LED灯,常用来指示磁盘的状态和行为。
比如当磁盘出现故障需要定位、磁盘缺失、正常在线或者正在读写等情况下,可以通过SAS
Enclosre Service来控制enclosure上每个drive对应的LED灯
。初次接触SES2的同学可能觉得它比较抽象,可以把它和BMC类比,整个enclosure也是由嵌入式CPU(比如ARM)及外围电路组成的一个独立系统,可以完成对每个drive
LED、内部风扇、电源的设置、温度的监测等功能。
2、磁盘LED控制的原理和过程
为了统一SAS
expander和enclosure的设计,业内提出了统一的控制接口标准,包括GPIO和I2C两种。当主机需要读取或者控制enclosure内部器件的状态时,host
CPU把命令发送到作为initiator的SAS
expander,然后SAS
expander通过统一的接口规范向作为target的enclosure内部的控制器传送控制命令,enclosure执行最终的硬件操作。
上面是从数据链路层看到的数据流,对上层的应用层而言,其下所有的协议和约定都是透明的,用户只需要了解具体SAS
expander支持的LED类型和数量、硬件实现的LED用途和数量,在linux系统下就可以直接调用sg_ses命令即可。
下面以我最近做的针对某款服务器上drive
bay上的LED控制的需求进行举例说明。实际工作中我需要控制任意drive的绿灯,
这里涉及到磁盘定位和 LED控制两个问题:
(1)如何实现磁盘定位
在
类似ipmitool的sg_ses命令中加—index参数,可以指定控制某个特定的盘。比如—index=2,就是控制从
编号为 0开始的 index=2的盘,客户自己可以通过上面的选项对应点亮的drive的位置来确定index和磁盘槽位的对应关系,进而实现磁盘定位。
(2)如何实现控制 LED正确报警
根据 笔者使用的LSI
SASxx40 系列 expander手册、SFF-8485等规范以及硬件手册,可以看到实际使用的drive
bay上有两个LED,红色的一个是用作状态(status)的,绿色的一个是用来指示活动(activity)。其中activity
LED默认的工作模式是只要在线就是绿色常亮,只要有读写就是绿色闪烁。我们可以遵循当前对activity
LED的控制,只控制status
LED。通过sg_ses命令帮助文档可以看到,它支持ident、locate、fault、devoff、insert、remove等操作。需要注意的是上面不同的操作可能共享相同的对LED的控制方式,比如在笔者的这款机器上,ident/locate都会让红色的status
LED闪烁,而falt/missing参数只会让等点红。为此,用户可能需要逐一尝试所有的操作,归纳总结出所有可能的status
LED状态,然后结合上层业务需要选用合适的控制方式。比如笔者的这套系统,就可按如下方案
使用 Drive
bays 上的 LED灯:
LED Type |
Status – meanning Pairs |
Need to be controlled ? |
Green LED (Activity LED) |
Blink - read/write ongoing No |
No |
Red LED (Status LED) |
Blink – locate/ident Red Red Blink |
Yes |
下面是相关的参考命令:
lsscsi
-g #确定哪个sg是expander
sg_ses
-ee
sg_ses
--index=2 --set=ident /dev/sg17
sg_ses
--index=2 --clear=active /dev/sg17
sg_ses
--index=2 --set=2:1 /dev/sg17
sg_ses
--index=2 --clear=2:1 /dev/sg17
sg_ses
--index=0 --clear=2:1 /dev/sg17
sg_ses
--index=9 --clear=active /dev/sg17
sg_ses
--index=9 --set=fault /dev/sg17
sg_ses
--index=8 --set=locate /dev/sg17
sg_ses
--index=9 --set=missing /dev/sg17
sg_ses
--index=7 --set=fault /dev/sg17
sg_ses
--index=7 --set=active /dev/sg17
sg_ses
--index=6 --set=devoff /dev/sg17
sg_ses
--index=9 --set=insert /dev/sg17
sg_ses
--index=9 --set=insert /dev/sg17
sg_ses
--index=5 --set=remove /dev/sg17
sg_ses
--index=4 --set=dnr /dev/sg17
sg_ses
--index=3 --set=ident /dev/sg17
总而言之,对SES2的调用,需要结合具体sas
expander的规格、板卡硬件设计、SFF-8485等规范和业务所有可能的user
case,利用现有的sg_ses/lsscsi等工具,进行系统全面的考量和设计,才能简单有效地满足客户和业务需求。
3、参考文档和链接
https://en.wikipedia.org/wiki/SES-2_Enclosure_Management
https://en.wikipedia.org/wiki/SGPIO
http://www.docin.com/p-81485148.html
http://sg.danny.cz/sg/sg_ses.html
http://www.alldatasheet.com/datasheet-pdf/pdf/303320/DDK/SAS-RA29-S1AA-FG.html