务必要通过megacli -AdpBbuCmd -GetBbuStatus -aALL来检查BBU或超级电容的几个关键字段,比如Relative State of Charge(≥85%)、Battery State(Operational)、Learn Cycle Status(OK)。别只看hdparm里显示write cache enabled,这只能说明写缓存开关处于启用状态,并不能直接证明缓存已经真正生效。

用 megacli 查看 BBU 或超级电容的实时健康状态
RAID 控制器能否启用 Write-Back 缓存,完全取决于电池背板(BBU)或超级电容(CacheVault)是否处于可信赖状态。不能只看“在线”,必须确认其电量、温度、校准周期和充放电能力是否达标。
megacli -AdpBbuCmd -GetBbuStatus -aALL是最核心命令,输出中关键字段包括:Relative State of Charge(建议 ≥85%)、Battery State(必须为Operational)、Learn Cycle Status(应为OK,否则缓存可能被控制器自动禁用)- 若返回
Exit Code: 0x01或Get BBU Status Failed,说明 BBU 硬件缺失、通信异常或固件不兼容,不是配置问题,而是物理层失效 - 注意温度项:
Temperature超过 60°C 可能触发保护性降级;Charger Status显示Complete才代表已充满,None或Charging长时间不结束需排查散热或老化
区分 BBU 和超级电容:命令输出差异明显
LSI/Broadcom 卡多用 BBU(铅酸/锂电),Dell PERC 9+ 和部分新卡改用超级电容(CacheVault)。二者状态字段不同,误读会导致错误判断。
- BBU 模式下,
megacli输出含BatteryType: BBU,关注Remaining Capacity和Full Charge Capacity的比值 - 超级电容模式下,
BatteryType字段常为空或显示Capacitor,重点看isSOHGood: Yes和Pack is about to fail & should be replaced: No - 某些固件版本会把电容状态藏在
GasGuageStatus下:Fully Charged: Yes才算可用;Fully Discharged: Yes表示刚断电后未恢复,不是故障
为什么 hdparm 显示 write cache enabled 却没效果
hdparm -I /dev/sdX | grep "Write cache" 返回 enabled,只说明控制器向内核通告了缓存能力,不代表实际生效。常见断点在 BBU 层或驱动协同。
- 即使
megacli -LDGetProp -Cache -Lall -aALL显示Write Cache: Enabled,若 BBU 状态异常,控制器仍会静默降级为Write-Through - 内核驱动若用
sd通用驱动而非megaraid_sas,可能忽略控制器通告的缓存标志,此时hdparm结果不可信 - udev 规则(如
/lib/udev/rules.d/60-persistent-storage.rules中的ENV{ID_WRITE_CACHE}="0")会强制关闭设备写缓存,需手动注释或覆盖
HP 服务器用 hpacucli 查电池状态的等效操作
HP Smart Array 控制器不叫 BBU,但功能等价,对应术语是 “battery-backed write cache” 或 “BBWC”。hpacucli 不直接暴露电量百分比,靠间接指标判断。
hpacucli ctrl all show输出中找Cache Board:行,若显示Not Present或Failed,缓存不可用hpacucli ctrl slot=0 show config detail中查看Cache Status:——Enabled仅表示策略开启,Active才代表正在使用且电池有效- 无
Relative State of Charge字段,需结合Smart Array Battery Status:判断,OK或Good为正常;Replace或Failed必须更换
Learn Cycle Status 和 isSOHGood 这类隐性健康信号——它们不报错,但会让缓存长期处于半启用状态。