要用megacli查lsi/avago raid卡bbu真实状态,必须执行sudo /opt/megaraid/megacli/megacli64 -adpbbucmd -getbbustatus -aall,重点核查charging status、remaining capacity和learn cycle status三项实时指标,而非仅依赖adpallinfo中缓存的“optimal”字样。

怎么用 MegaCLI 查 BBU(缓存电池)真实状态
LSI/Avago RAID 卡的缓存电池(BBU)状态不能靠 dmesg 或 /proc/mdstat 查——那是软件 RAID 的事。硬件 RAID 的 BBU 健康必须走厂商工具,MegaCLI 是最直接可靠的路径。
常见错误是只跑 MegaCli64 -AdpAllInfo -aAll,它会显示 “Battery State: Optimal”,但这个“Optimal”可能只是缓存值,不是实时检测结果。真正要看的是 Battery Temperature、Remaining Capacity 和 Learn Cycle Status 这三项。
- 先确认路径:多数系统下是
/opt/MegaRAID/MegaCli/MegaCli64;若装在/usr/sbin,就用/usr/sbin/MegaCli64 - 执行完整电池信息命令:
sudo /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aAll - 重点看输出里这三行:
Charging Status(应为 "Charging" 或 "Not Charging",而非 "Unknown")、Remaining Capacity(低于 50% 就得预警)、Learn Cycle Status(应为 "Completed",若卡在 "In Progress" 或 "Failed",说明电池已失效或无法校准) - 如果输出里有
Failed或Unknown,别信 "Optimal" —— 这类卡常把故障态硬报成正常,实际写缓存已降级为 Write-Through 模式
为什么 BBU 失效后 RAID 写性能会暴跌
BBU 不只是“备用电源”,它决定控制器是否敢启用 Write-Back 缓存。一旦 BBU 状态不满足要求(比如电压不足、温度超限、未完成充放电学习周期),控制器自动 fallback 到 Write-Through 模式——所有写请求必须等物理盘落盘才返回,I/O 延迟从毫秒级跳到几十毫秒,随机写吞吐可能掉 70% 以上。
这不是配置问题,是硬件安全机制。你改不了,也绕不过。所以监控 BBU 不是为了“换电池”,而是为了提前发现性能拐点。
- 查当前缓存策略:
sudo /opt/MegaRAID/MegaCli/MegaCli64 -LDGetProp -WriteCache -Lall -aAll,输出里如果是Write Cache: Disabled或Write Cache: Write Through,基本可判定 BBU 已失能 - 不要依赖
cat /proc/mdstat或iostat -x判断原因——它们只反映结果,看不出底层缓存模式切换 - BBU 寿命通常 3–5 年,即使没报错,满 4 年也建议强制做一次 Learn Cycle:
sudo /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -BbuLearn -aAll(注意:该操作会暂停 I/O 数秒)
BBU 状态被屏蔽或读不到怎么办
有些服务器 BIOS 或 RAID 卡固件会默认禁用 BBU 访问权限,或者用直通(IT Mode)固件刷过卡,导致 -AdpBbuCmd 直接报错或无输出。
先排除访问路径问题:
- 运行
sudo /opt/MegaRAID/MegaCli/MegaCli64 -adpCount,确认识别到适配器数量;若返回 0,说明驱动没加载或卡没被识别 - 检查驱动:
lsmod | grep mpt(MPT 驱动)或lsmod | grep megaraid;缺驱动就装megaraid-sas或megaraid2内核模块 - 若命令报
No controller found,试试加-a0明确指定控制器编号,比如:sudo /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -a0 - 某些新款卡(如 LSI 9361)需用
storcli替代:sudo /opt/MegaRAID/storcli/storcli64 /c0/bbu show
BBU 告警要不要立刻停机换电池
不用。BBU 故障本身不会导致数据丢失,只会让缓存策略降级。只要 RAID 卡还在工作、/proc/mdstat 里没降级、smartctl -a 检查各盘都 OK,系统就能继续跑。
但要注意两个临界点:
Remaining Capacity 且 <code>Charging Status = Not Charging:说明电池已老化失效,充不进电,必须更换-
Learn Cycle Status = Failed两次以上:意味着电池内阻异常,控制器拒绝信任它,此时即使电量显示 80%,也会强制禁用 Write-Back - 更换 BBU 后必须手动触发 Learn Cycle,否则新电池仍不被信任;旧卡不支持热插拔 BBU,得重启服务器
BBU 状态容易被当成“次要告警”忽略,但它其实是 RAID 性能和数据一致性的隐性开关——没坏时看不见,一坏就是慢得莫名其妙,还查不出原因。











