一台跑了多年的機器,某天起寫入速度掉到原來的零頭。
硬碟全綠,陣列不報錯,系統日誌乾淨。換網線、查交換機、重裝驅動、重啓——都不是。最後查到 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 卡的機器
- 逐台看當前緩存策略——不是看有沒有告警,是看策略本身
- 處於直寫的,看電池狀態和日誌裏的學習週期記錄
- 區分「學習週期中」和「已失效」
- 已失效的,確認料號,零件到位後更換
- 換完等一個完整充電週期,再確認策略回到回寫
- 把學習週期的時間窗口統一挪到業務低峯
這套檢查不需要停機,一台機器幾分鐘。在過保設備比較多的機房裏,這通常是投入產出比最高的一次巡檢。
本文描述的是這類設備的常見故障模式,不是某一台機器的具體案例。
