磁盘阵列卡检测与监控硬盘健康状况
常用软件
- MegeRAID
- Hard Disk Sentinel
一般地,支持RAID 5的卡,我们称其为阵列卡,都可以使用LSI官方提供的MegaCli工具来管理,而不支持RAID 5的卡,我们称其为SAS卡,使用lsiutil工具来管理。HP的服务器使用其特有的hpacucli工具来管理。
MegaCli工具
常用查询
命令 | 对应含义 |
---|---|
MegaCli -LDInfo -Lall -aALL | 查看raid级别 |
MegaCli -AdpAllInfo -aALL | 查看raid卡信息 |
MegaCli -PDList -aALL | 查看硬盘信息 |
MegaCli -AdpBbuCmd -aAll | 查看电池信息 |
MegaCli -FwTermLog -Dsply -aALL | 查看raid卡日志 |
MegaCli -adpCount | 显示适配器个数 |
MegaCli -AdpGetTime –aALL | 显示适配器时间 |
MegaCli -AdpAllInfo -aAll | 显示所有适配器信息 |
MegaCli -LDInfo -LALL -aAll | 显示所有逻辑磁盘组信息 |
MegaCli -PDList -aAll | 显示所有的物理信息 |
MegaCli -AdpBbuCmd -GetBbuStatus -aALL |grep ‘Charger Status’ | 查看充电状态 |
MegaCli -AdpBbuCmd -GetBbuStatus -aALL | 显示BBU状态信息 |
MegaCli -AdpBbuCmd -GetBbuCapacityInfo -aALL | 显示BBU容量信息 |
MegaCli -AdpBbuCmd -GetBbuDesignInfo -aALL | 显示BBU设计参数 |
MegaCli -AdpBbuCmd -GetBbuProperties -aALL | 显示当前BBU属性 |
MegaCli -cfgdsply -aALL | 显示Raid卡型号,Raid设置,Disk相关信息 |
查看阵列卡信息
MegaCli -adpallinfo -aall
-a
参数指定阵列卡的编号,一般服务器上只会配一个阵列卡,因此我们通常指定为 -a0(阵列卡适配器编号,从0开始),主要关注下面几个信息:
状态值 | 对应含义 |
---|---|
Product Name | PERC H730 Mini |
FW Package Build: 25.5.0.0018 | 阵列卡firmware版本号,版本如果太低,建议升级以提高稳定性及性能 |
BBU : Present | 是否有配BBU电池 |
查看阵列配置
MegaCli -cfgdsply -aall
状态值 | 对应含义 |
---|---|
Memory: 1024MB | 阵列卡cache大小,2的N次方,如果不是,说明阵列卡有异常 |
Number of dedicated Hotspares: 0 | 阵列是否有专用/独享热备盘(如果有多个逻辑磁盘组/disk group,则可以指定一个硬盘用于全局热备,那么该disk group上的专用热备盘数量为0也不用担心),除了RAID 1/RAID 10 一般不指定热备盘以外,其他几个阵列级别建议都要指定热备盘 |
State : Optimal | 阵列状态,如果不是 Optimal 就要关注了 |
Current Cache Policy: WriteBack, ReadAheadNone, Direct, Write Cache OK if Bad BBU | 阵列读写cache策略,建议写策略设置为FORCE WB,最起码是WB,预读策略可以关掉,意义不大,几乎没影响 |
Disk Cache Policy : Disabled | 硬盘cache策略,建议关闭,防止意外时数据丢失 |
Current Power Savings Policy: None | 节电策略,建议关闭 |
Media Error Count: 0 | 三个错误计数器,任何一个值大于100就要立刻引起关注,尤其要关注起增长速度。1T以上SATA盘,计数值不够精确,可能所有盘上该值都会大于0,一般重启就会重新清0,如果重启后还是大于0的话,赶紧报修吧。SAS盘的计数值则比较准确。 |
Other Error Count: 0 | |
Predictive Failure Count: 0 | |
Firmware state: Online, Spun Up | 查看硬盘状态,如果是unconfigured表示该硬盘未分配加入到阵列中;如果是 unconfigured(bad)表示该盘不但是未分配,而且还坏了,正是“出师未捷身先死”;如果是failed,表示该盘故障无法识别;如果是rebuilding,表示该盘正在重建数据 |
查看阵列卡电池信息
MegaCli -adpbbucmd -aall
状态值 | 对应含义 |
---|---|
Temperature: 39 C | 查看电池温度,如果相比上一次查看高出不少,就需要关注了,或者可以根据经验设置一个基线值 |
Battery State: Optimal | 电池状态,如果不是为Optimal,就需要关注了 |
Charger Status: Complete | 电池充放电状态 |
isSOHGood: Yes | 电池状态,如果不是为Yes,需要关注 |
Relative State of Charge: 96% | 当前电量,当电量低于15%,或者电池坏掉时,默认都会将写策略从WB改成WT,除非设定为FORCE WB策略 |
Max Error = 0 % | 电池是否有错误信息 |
Next Learn time: Sun Oct 15 14:39:29 2023 | 电池充放电时间,注意这是美国时间。另外,新的阵列卡电池很多改成电容式的了,也就不需要重复充放电了 |
查看阵列卡日志
MegaCli -fwtermlog -dsply -aALL
关注里面的error/fail/warn等多个关键字**
lsiutil工具
查看硬盘计数器
lsiutil -p 1 -a 20,12,0,0
Invalid DWord Count 2,563 # 任何一个值大于0,都需要引起关注
Running Disparity Error Count 2,366
Loss of DWord Synch Count 0
Phy Reset Problem Count 0
查看逻辑卷状态
lsiutil -p 1 -a 21,1,0,0,0
状态值 | 对应含义 |
---|---|
Volume State: optimal, enabled | 逻辑卷健康状况 |
Volume draws from Hot Spare Pools: 0 | 是否有热备 |
Volume Size 139392 MB, 2 Members | 由几块硬盘组成 |
Primary is PhysDisk 1 (Bus 0 Target 9) | 物理硬盘1 |
Secondary is PhysDisk 0 (Bus 0 Target 3) | 物理硬盘0 |
查看物理硬盘状态
lsiutil -p 1 -a 21,2,0,0,0
状态值 | 对应含义 |
---|---|
PhysDisk 0 is Bus 0 Target 3 | 编号 |
PhysDisk State: online | 状态 |
Error Count 13, Last Error: Command = 28h, Key = 3, ASC/ASCQ = 11h/00h | 错误计数 |
hpacucli工具
hpacucli工具查看阵列、硬盘、电池信息,其实就只要一条指令 查看阵列详细信息、配置
hpacucli ctrl all show config detail
状态值 | 对应含义 |
---|---|
Controller Status: OK 阵列卡状态 | |
Firmware Version: 1.18 | firmware版本,太低了建议升级,以提高稳定性及性能 |
Cache Board Present: True | 是否配备了cache模块 |
Cache Status: OK | cache模块状态 |
Cache Ratio: 100% Read / 0% Write | cache策略,此处只有读cache,不用于写cache,因为没有bbu电池,见下方结果 |
Drive Write Cache: Disabled | 关闭磁盘cache |
Total Cache Size: 256 MB | cache大小 |
Total Cache Memory Available: 208 MB | 实际可用cache大小,和理论cache大小不一样,说明cache模块可能有问题 |
No-Battery Write Cache: Disabled | 关闭FORCEWB策略 |
Battery/Capacitor Count: 0 | 阵列卡BBU电池数量为0,也就是没有BBU模块 |
Battery/Capacitor Status: Failed (Replace Batteries) | 阵列卡BBU电池状态,这里显示是错误状态,需要及时更换 |
Array: A | 第一个乌列阵列,编号从A开始,依次是A、B、C |
Status: OK | 物理阵列状态 |
Logical Drive: 1 | 第一个逻辑卷,编号从1开始 |
Fault Toleran | ce: RAID 5 第一个逻辑卷的阵列级别 |
Status: OK | 第一个逻辑卷状态 |
Caching: Enabled | 第一个逻辑卷是否启用了cache策略 |
physicaldrive 1I:1:1 | 第一块物理硬盘,编号从1开始 |
Status: OK | 第一块物理硬盘状态 |
Firmware Revision: HPDA | 第一块物理硬盘firmware,如果太低,也需要及时升级,HP的硬盘每个批次都有不同的firmware |
监控脚本
#!/bin/bash
# 监控阵列卡硬盘是否有坏道异常
failed_disks=$(MegaCli -AdpAllInfo -a0 | grep "Failed Disks" | awk '{print $NF}')
degraded_disks=$(MegaCli -AdpAllInfo -a0 | grep "Degraded" | awk '{print $NF}')
[[ $failed_disks != 0 ]] && echo "failed_disks: $failed_disks"
[[ $degraded_disks != 0 ]] && echo "degraded_disks: $degraded_disks"
disk_info=$(MegaCli -PDList -aALL | grep -E 'Slot Number|Media Error Count' | awk '/Slot Number/{printf $3 ":"} /Media Error Count/{print $4}')
for disk in $disk_info;do
slot_number=$(echo $disk | awk -F ':' '{print $1}')
error_count=$(echo $disk | awk -F ':' '{print $2}')
if [[ $error_count != 0 ]];then
echo "磁盘插槽号:$slot_number"
echo "坏道计数:$error_count"
else
echo "Disk $slot_number is health."
fi
done