從生產資料庫損壞中恢復:硬碟故障案例研究

從生產資料庫損壞中恢復:硬碟故障案例研究

當生產伺服器發生故障時,時鐘便立即開始倒數。對於一家生物製藥公司的 ICT 工程師而言,這種緊迫感因實驗室儀器正不斷將數據串流傳輸至 MS SQL 資料庫而變得更加劇烈;任何停機時間都意味著關鍵生物分析數據的永久丟失。

這場最初始於備份失敗通知的事件,演變成了一場涉及 Volume Shadow Copy Services (VSS)、系統檔案損壞以及最終磁性儲存媒介物理衰減的複雜偵探故事。本案例研究探討了診斷損壞硬碟的過程,以及從中學習到的關於生產環境穩定性的教訓。

症狀:備份失敗與數據缺失

第一個警訊出現在 2023 年底,當時備份系統標記了一個未完成的程序。最初,團隊嘗試使用 MS SQL 內部備份系統來傾印 (dump) 資料庫進行快速修復。雖然這暫時奏效,但使用者很快便回報某些分析數據無法再被存取。

在檢查 Windows Event Viewer 後,團隊發現了關鍵的磁碟錯誤。隨後的調查接著透過幾個假設進行:

調查路徑

  1. EDR 假設:由於最近部署了新的 Endpoint Detection and Response (EDR) 系統,工程師懷疑代理程式 (agent) 正在干擾備份程序。禁用並完全卸載代理程式後並未產生任何結果。
  2. VSS 深度探究:錯誤代碼的分析指出 Volume Shadow Copy Service (VSS) 無法讀取快照。這顯示問題出在儲存層而非應用程式層。
  3. OS 損壞:懷疑系統檔案損壞,工程師執行了 dism /Online /Cleanup-Image /RestoreHealthsfc /scannow。雖然 Windows 偵測到了問題,但卻無法修復它們,這顯示問題比作業系統層級更深。
  4. SQL 修補程式相關性:廠商技術人員最近進行的「修補程式 (patch)」套用時間點與問題發生時機吻合。雖然 T-SQL 無法直接寫入壞軌,但修補程式所需的高強度 I/O 可能迫使硬碟讀取了多年未被存取的稽核頁面 (audit pages),進而暴露了磁性訊號已經衰減的磁區 (sectors)。

解決方案:對抗磁性衰減

由於伺服器仍在保固期內,Dell 提供了一顆替換硬碟,但並未提供數據恢復的協助。團隊嘗試了幾種軟體解決方案,包括 EaseUS,但未能成功恢復數據。

最終,他們求助於一個名為 HDD Regenerator 的工具。雖然該網站看起來已經過時,但該工具在其他工具失敗的地方成功了。這種成功的技術原因在於磁性儲存的本質。許多「壞軌 (bad sectors)」並非物理性的盤片刮傷,而是「弱磁化」——訊號已衰減到標準錯誤修正功能無法恢復數據的程度。

透過重複讀取並使用特定的磁性模式重寫磁區,該軟體能夠恢復可讀取的訊號,或強制硬碟韌體將故障磁區重新映射 (remap) 到其預備池中的備用磁區。由於損壞僅限於少數幾個磁區,一旦底層物理區塊變得可讀,資料庫引擎的檢查碼 (checksums) 就保持完好。

技術評論與社群洞察

Hacker News 上的業界同儕提供了關於此恢復過程的關鍵背景資訊,並指出了初始方法中的幾個系統性缺失:

硬體監控

幾位專家指出,工程師當時應該立即檢查 S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) 診斷資訊。像 CrystalDiskInfo 這樣的工具可以揭示「當前待處理磁區 (Current Pending Sectors, Attribute C5)」或「重新分配磁區計數 (Reallocated Sectors Count, Attribute 05)」,這些資訊可以在作業系統回報讀取錯誤之前,就為硬碟故障提供早期預警。

RAID 與數據完整性

原作者認為 RAID 不會救得了他們免於「靜默頁面損壞 (silent page corruption)」。然而,社群成員對此提出了異議,指出「靜默數據損壞 (silent data corruption)」與「壞塊 (bad blocks)」之間存在區別:

「RAID 1 鏡像會保護你免於兩個磁碟中出現相同的鏡像缺陷。RAID 控制器... 會維護陣列中磁碟的數據完整性。故障的磁碟會回報壞塊... 但其他磁碟是正常的,數據可以安全地讀取。」

此外,有人建議使用基於 ZFS 的條帶化鏡像 (striped mirror) 作為生產資料庫的更優替代方案,因為它具有內建的檢查碼功能與自我修復能力。

系統管理員的關鍵教訓

這次事件提醒了大家,生產環境不僅需要備份策略,更需要驗證與監控策略。

  • 驗證恢復,而不僅是備份:備份成功標記並不代表數據可以被恢復。應定期測試恢復程序,以確保數據有效。
  • 監控硬體健康狀況:實施主動式的 S.M.A.R.T. 監控與告警。等待 Event Viewer 回報磁碟錯誤是一種被動式策略,這會增加數據全損的風險。
  • 將廠商修補程式視為重大變更:任何由第三方技術人員在生產資料庫上執行的腳本都應被視為高風險事件。在操作前應立即進行完整備份,並在操作期間與操作後密切監控 I/O。
  • 現代化儲存設備:正如一位貢獻者所言,從 HDD 轉向 SSD/NVMe 在生產環境中使用,已顯著減少了與機械故障相關的「診斷鬧劇 (diagnosis circus)」,並為大多數工作負載提供了更好的性能與更高的可靠性。

Sources