LSI 芯片状态检测

目前主流的服务器的 HBA 用的基本都是 LSI 的芯片(OEM),要查看判断芯片的状态,使用其提供的 Megacli 这个工具就可以了,默认只提供 rpm 的包,在之前的博客中提到如何在 ubuntu 12.04 上安装 .deb 的包。  ubuntu 10.04 上的安装就相对简单多了,直接转换成 deb 包安装就可以,没有 3.0 kernel 那么多繁杂的转换。

对于 debian 的系统来说,还可以使用第三方的源进行安装。

为了方便,做个 alias:
alias MegaCli64='/opt/MegaRAID/MegaCli/MegaCli64'

下面纪录一些常见的,详细的参数请看最后的链接。

打印出所有 LSI 的信息:
# MegaCli64  -ShowSummary -aALL
# MegaCli64  -AdpAllInfo -aAll -NoLog

下面这个可以看到目前整个磁盘的状况:
# MegaCli64 -CfgDsply -aALL

确认整机的磁盘是否有问题:
# MegaCli64  -AdpAllInfo -aALL -NoLog|egrep '^  (Degraded|Failed)'
Degraded        : 0
Failed Disks    : 1

显示所有的 VD:
# MegaCli64 -LDInfo -Lall -Aall
# MegaCli64 -LDPDInfo -aall

显示所有的 PD:
# MegaCli64  -PDList  -aALL

要显示单个的 hhd 需要指明 Enclosure Device ID 和 Device Id:
# MegaCli64 -pdInfo -PhysDrv [32:5] aALL

上面的 Enclosure Device ID 可以通过下面的方式获取到:
# MegaCli64 -PDlist -a0 | grep "Enclosure Device"

需要注意的是,device id 跟 Slot Number 在大部分情况下是相同的,如果物理位置跟逻辑位置不对应则不同。

过滤一下,一般看到 firmware state 为 failed 就表示有问题了:
# MegaCli64  -PDList -aAll | egrep "Enclosure Device ID:|Slot Number:|Inquiry Data:|Error Count:|state"

可以通过 smartctl 进一步的获取信息:
# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sdc      8:32   0   1.8T  0 disk
└─sdc1   8:33   0   1.8T  0 part /data/data2
sde      8:64   0   1.8T  0 disk
└─sde1   8:65   0   1.8T  0 part /data/data4
sdb      8:16   0   1.8T  0 disk
└─sdb1   8:17   0   1.8T  0 part /data/data1

# MegaCli64 -PDList -a0| grep 'Device Id'
Device Id: 0
Device Id: 1
Device Id: 2
Device Id: 3
Device Id: 4
Device Id: 5
Device Id: 6
Device Id: 7

# smartctl -d megaraid,1 -a /dev/sdb
smartctl 5.39.1 2010-01-28 r3054 [x86_64-redhat-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

Device: SEAGATE  ST32000645SS     Version: RS12
Serial number: Z1K0G44K
Device type: disk
Transport protocol: SAS
Local Time is: Mon Jul 12 17:48:12 2013 CST
Device supports SMART and is Enabled
Temperature Warning Disabled or Not Supported
Log Sense failed, IE page [scsi response fails sanity test]

Current Drive Temperature:     48 C
Drive Trip Temperature:        68 C


LSI 的 BBU 有个 autoLearnMode 模式,在该模式下,系统会由 WB 变成 WT,很明显,这会造成性能的下降,该问题比较常见,在 db 上最好关闭。
查看当前 bbu 的状态
# MegaCli64 -AdpBbuCmd -GetBbuStatus -a0
# MegaCli64 -AdpBbuCmd -aAll -NoLog
 
关闭 autolearn:
# echo "autoLearnMode=1" > tmp.txt
# MegaCli64 -AdpBbuCmd -SetBbuProperties -f tmp.txt -a0
# MegaCli64  -AdpBbuCmd -aAll

Auto Learn Period: 90 Days
Next Learn time: None  Learn Delay Interval:0 Hours
Auto-Learn Mode: Disabled

强制执行:
# MegaCli64 -AdpBbuCmd -BbuLearn -a0


获取当前 rebuild 的状态:
# MegaCli64 -PDRbld -ShowProg -PhysDrv [32:6] -aALL

获取 Patrol 信息:
# MegaCli64 -AdpPR -Info -aALL -NoLog

让指定的磁盘指示灯闪烁:
# MegaCli64 -PdLocate -start -physdrv[$ENCLOSURE:$2] -a0 -NoLog
# MegaCli64 -PdLocate -stop -physdrv[$ENCLOSURE:$2] -a0 -NoLog

显示所有的 FW log 信息:
# MegaCli64  -FwTermLog -Dsply -aALL -NoLog

查看自开机以来的所有 event log,搜索一些常见的关键字也能发现一些问题:
# MegaCli64 -AdpEventLog -GetSinceReboot -f events.log -aALL

LSI 提供一个叫 MegaRAID Storage Manager (MSM) 的 GUI,没什么用。 还有个叫 megactl 的开源工具,我没试过。

通过 omconfig 这类工具(不过是进行了一层封装而已)也可以完成上面的任务,比如强制执行 learn cycle:
# omconfig storage battery action=startlearn controller=0 battery=0

上面说的都很泛泛,具体的可以看 LSI 的官方文档,尤其是 chapter 6。

ref:
http://wiki.hetzner.de/index.php/LSI_RAID_Controller/en
https://calomel.org/megacli_lsi_commands.html

  • base

    请教个问题,每执行一次查看的命令,other error count 数量就会增加,日志信息在附件的图片中,这是什么错误

    • http://jaseywang.me/ Jasey Wang
      • base

        Other error是由于硬件层面错误引起的错误,不好的线缆,坏的终结,信号丢失等。

        不执行命令,other error 错误不会增加,每执行一次就增加1,这样我可以忽略 other error信息吧。

        • http://jaseywang.me/ Jasey Wang

          这种错误直接找厂商报修就好了,涉及太硬件底层的我也不大清楚。

          • base

            感谢帮助!