Raid
MD RAID扇區修復
本文指出 RAID 控制器對不可恢復的讀取錯誤很聰明,並嘗試使用組件驅動器的冗餘重寫此類扇區。如果扇區壞了,磁碟的韌體會透明地重新分配扇區。
Linux MD RAID 做類似的事情嗎?也許我的 Google-Fu 不好,但我找不到任何關於它的資訊。
**簡短回答:**鏡像和基於奇偶校驗的 RAID 佈局支持在正常讀取和擦除期間使用所謂的良好數據修復壞扇區。然而,經典的 RAID(基於硬體和軟體)對無聲數據損壞無能為力,這需要以數據校驗和的形式提供更強的保護(例如,由 BTRFS 和 ZFS 提供)。
**長答案:**問題和提供的答案混淆了關於磁碟、MDRAID 和校驗和文件系統如何工作的不同概念。讓他們一一解釋;無論如何,請考慮確切的行為在某種程度上取決於韌體和實現:
- 第一道防線是磁碟自身的內部 ECC:當某些位變壞時,嵌入式 ECC 恢復啟動,實時糾正受影響的錯誤。低 ECC 讀取率通常不會導致自動扇區修復/重新分配;但是,如果 ECC 錯誤累積並增加,磁碟的韌體最終會在受影響的扇區變得不可讀之前重新分配它(這將被 SMART 屬性計為“重新分配的偶數計數”)。有的企業盤會定期讀取所有扇區,及時發現有問題的扇區(見SAS/SATA表面掃描)。
- 如果該扇區很少被讀取並且磁碟沒有“看到”逐漸損壞的扇區數據,則讀取可能會突然失敗(“待定扇區”SMART屬性)並且受影響的數據會失去。磁碟將向作業系統報告 SATA READ ERROR 並繼續執行。如果使用 RAID 1/5/6 方案,系統有足夠的冗餘來重建失去的數據,覆蓋失敗的扇區,並根據磁碟韌體強制重新分配扇區。傳統上,硬體 RAID 卡和 MDRAID(Linux 軟體 RAID)以這種方式工作,依靠 HDD 自己的重新映射功能。較新的硬體 RAID 卡和 MDADM 版本進一步提供了一個內部重新映射列表,如果/當 HDD 無法重新映射受影響的扇區時(即:因為沒有可用的備用扇區),該列表就會啟動;您可以在
md
手冊頁中閱讀更多內容,尤其是“恢復”部分。這顯然意味著應該立即更換磁碟。為了避免太晚發現太多不可讀扇區,所有 RAID 實現都支持“scrub”或“patrol read”操作,其中定期讀取整個陣列以測試底層磁碟。- 上述保護方案僅在向 RAID 卡和/或作業系統明確報告讀/寫錯誤時才有效。在靜默數據損壞的情況下(即:磁碟返回錯誤數據而不是明確錯誤),這種方法是無用的。為了保護自己免受無聲數據損壞(根據定義,任何 SMART 屬性都不會報告),您需要一個額外的校驗和來驗證返回數據的正確性。這種額外的保護可以基於硬體(即:SAS T10 擴展)、基於塊設備軟體(即:dm-integrity)或完全集成的校驗和文件系統(BTRFS 和 ZFS)。談到 ZFS 和 BTRFS,它們支持與它們的 RAID 對像類似但不相同的“清理”操作(即:僅掃描實際分配的空間/數據)。
注意:與 RAID5 和 2 路 RAID1 相比,RAID6 或 3 路 RAID1 佈局理論上可以通過使用某種形式的“多數投票”來提供一些額外的保護,以防止比特腐爛。但是,由於它會對性能造成巨大影響,因此我從未在常見的實現中看到過這種行為。有關更多詳細資訊,請參見此處。