一台跑了多年的机器,某天起写入速度掉到原来的零头。
硬盘全绿,阵列不报错,系统日志干净。换网线、查交换机、重装驱动、重启——都不是。最后查到 RAID 卡上那块缓存电池没电了。
这是数据中心里最典型的一类「没坏但不能用」的故障。它不触发任何告警,因为从控制器的角度看,一切都在按设计工作。
为什么电池没电,写入就慢十倍
RAID 控制器上有一块缓存。开启回写(write-back)模式时,数据写进缓存控制器就返回「完成」,后台再慢慢落盘——这是写性能的主要来源。
风险在于:缓存是易失的。如果这时候断电,缓存里还没落盘的数据就没了。
所以回写模式依赖一块电池(或超级电容)兜底:断电时靠它维持供电,等待恢复或者把缓存转存到闪存。
电池一失效,控制器不敢再用回写,自动降级成直写(write-through)——每一次写入都要等硬盘真正落盘才返回。机械盘的落盘延迟是毫秒级,缓存是微秒级,差一个数量级,性能表现就是掉十倍。
控制器这么做是对的。它在保护你的数据。但它不会大声告诉你。
怎么确认是这个问题
在控制器管理工具里看两项:
- 当前缓存策略:是 Write Back 还是 Write Through
- 电池 / 电容状态:容量、健康度、上次学习周期时间
如果策略显示 Write Through 且备注里有 BBU failed、Battery not present、Learn cycle in progress 之类的字样,就对上了。
不同厂商的叫法不一样:BBU(Battery Backup Unit)、FBWC(Flash-Backed Write Cache)、CacheVault、超级电容包——指的都是同一类东西。
电池在做学习周期,不是坏了
现象:某段时间性能明显变差,过几小时又自己恢复,而且是周期性出现的。
原因:RAID 电池会定期做一次完整的充放电循环,用来校准实际容量。这段时间里缓存策略会临时降级成直写,跑完自动恢复。
怎么判断:看控制器日志里有没有 Learn Cycle 记录,时间点能对上就不是故障。
怎么处理:学习周期的时间可以设定,把它挪到业务低峰时段就行。多数平台默认是每 30 天或 90 天一次。
什么时候才是真坏:学习周期跑完之后容量仍然不达标,或者反复报 BBU 故障——那才该换。
把正常行为当故障换件,也是一种浪费。这一条值得在换件之前确认一遍。
换了新电池,缓存还是不开
现象:新电池装上去了,控制器仍然维持直写模式。
这不一定是备件的问题。三个常见原因:
- 新电池需要一次完整的充电和学习周期之后才会启用回写,不是插上就好。 视型号不同,这个过程从几小时到十几小时不等。
- 部分平台需要在控制器里手动把缓存策略改回回写。 有些管理工具在电池失效时会把策略锁定,修好之后不会自动解锁。
- 电池型号不匹配,控制器识别不了。
做法:换完等一个完整充电周期,再确认策略设置。不要在充电完成之前就下结论说备件有问题——这种误判会把一次成功的更换变成一次退货流程。
这块电池真正的意义,是断电那一刻
平时看不出它有什么用,直到机房跳闸。
回写缓存里那部分还没落盘的数据,全靠它撑着等待恢复供电或转存。电池失效的情况下断电,缓存里的数据就没了。
对文件系统来说,这可能意味着元数据不一致;对数据库来说,这可能意味着一批已经返回「提交成功」的事务实际上没有落盘。后者比丢一块盘严重得多,因为它是静默的——系统起来了,数据少了一截,你不知道少在哪。
所以这是一个耗材,有寿命,必须按周期检查和更换。锂电池型的一般 2–3 年,超级电容型的寿命长一些但也不是永久。
过保之后的麻烦
这类耗材在过保之后,原厂通常不单独供应——它不是一个「维修件」,是捆绑在整机服务合同里的东西。
结果是:一个成本很低的电容包找不到,一台功能完好的机器长期在直写模式下跑,性能只有设计值的零头,最后被当成「机器老了」整机换掉。
一块电池的钱,和一台整机的钱,差着两个数量级。
七小服的料号库收录各主流平台的 BBU / FBWC / 超级电容包,包括 IBM、HP、Dell、华为等,可以在备件料号速查里按料号搜。入库做 48 小时以上加压测试,出库逐件复测。
一份检查清单
给还在跑的过保设备做一次排查,按这个顺序:
- 列出所有带 RAID 卡的机器
- 逐台看当前缓存策略——不是看有没有告警,是看策略本身
- 处于直写的,看电池状态和日志里的学习周期记录
- 区分「学习周期中」和「已失效」
- 已失效的,确认料号,备件到位后更换
- 换完等一个完整充电周期,再确认策略回到回写
- 把学习周期的时间窗口统一挪到业务低峰
这套检查不需要停机,一台机器几分钟。在过保设备比较多的机房里,这通常是投入产出比最高的一次巡检。
本文描述的是这类设备的常见故障模式,不是某一台机器的具体案例。
