mdadm RAID5 陣列恢復停止而沒有 SCSI 錯誤
我有一個基於 md 的 RAID5 陣列,它已經執行了大約 2 年沒有問題。昨天我在一個磁碟上發生了自發磁碟和/或 PHY 重置(但不是實際的讀取錯誤)。md 將磁碟標記為故障,剩餘的陣列狀態為“乾淨,已降級”,因此我嘗試刪除並重新添加它。md 開始以良好的速度 (140M/s) 重新同步陣列,但在大約 0.6% 時重新同步速度開始下降,並且在大約 10 秒內 mdadm 退出並顯示消息“md: md0: recovery interrupted”而沒有任何 SCSI 或其他可見錯誤在 dmesg 輸出中(我目前的 SCSI 日誌記錄級別設置為 0x10012DD)。這發生在幾次嘗試中。
smartctl -a
,smartctl -t short
並且掃描所有磁碟的前 1%badblocks
沒有出現任何錯誤。只讀xfs_repair -n
正如預期的那樣,在降級的陣列上顯示了一堆 I/O 錯誤和錯誤的校驗和,但是在所有這些練習之後,重新同步已經超過了它早些時候退出的點。我現在badblocks
在其餘磁碟上執行,並希望陣列最終會完成重新同步,這樣我就可以添加新磁碟並最終升級到 RAID6,但自然不能保證這會發生,這就引出了一個問題:是否有可能使 md resync 克服錯誤並丟棄壞塊?我寧願最終得到一個 0.01% 損壞的數組,也不願什麼都沒有。我在數組中的數據並不重要,我可以在更高級別重新檢查它是否有錯誤,但從頭開始恢復它需要很長時間。
查看 raid5.c 中的驅動程式碼,似乎無法強制 md 在重新同步期間忽略錯誤。但是,如果沒有其他幫助,作為最後的手段,可以通過重新創建陣列來重新組裝陣列而無需強制重新同步
--assume-clean
,請參見例如RAID Wiki和此答案。
降級陣列上的只讀 xfs_repair -n 顯示了一堆 I/O 錯誤和錯誤校驗和,正如預期的那樣
預計不會:一個故障/失去的磁碟不會導致其他良好的 RAID5 陣列中的數據損壞。您可能在一個或另一個磁碟上有多個不可讀的數據扇區。
mdadm
雖然可以強制最近的版本繼續恢復,但內部壞塊列表非常小,並且當它已滿時重建中止。我建議您仔細檢查所有磁碟的執行狀況。