您可以使用 啟動 mdadm 陣列的清理echo 'check' > /sys/block/mdX/md/sync_action
,如果發現壞扇區,它會自動重寫(來自鏡像或來自 RAID5/6 的奇偶校驗資訊)。
然而如果所有區塊讀取成功但發現不一致,則視為不匹配。在這種情況下,修復會很複雜,因為 mdadm 無法判斷哪個鏡像包含正確的資料 (RAID1/10),或者資料或奇偶校驗是否已損壞 (RAID5)。
理論上,如果我正確理解 RAID6,那麼 RAID6 就不是這種情況。由於存在雙奇偶校驗,因此應該可以找出單一損壞的位置,無論是資料還是奇偶校驗。
- 我的理解是否正確,理論上這應該可行嗎?
- 如果正確,mdadm 是否能夠修復這些不一致的資料而無需猜測哪個區塊已損壞?
答案1
理論上是可能的:數據+奇偶校驗給你關於數據應該是什麼的三種意見;如果其中兩個一致,則可以假設第三個是錯誤的,並根據前兩個重寫。
Linux RAID6 不這樣做。相反,只要出現不匹配,兩個奇偶校驗值就被假定為不正確,並根據資料值重新計算。曾有人提議改為「多數票」制度,但尚未實施。
該mdadm
套件包括raid6check 實用程式它試圖在奇偶校驗不匹配的情況下找出哪個磁碟是壞的,但它有一些粗糙的邊緣,預設不安裝,並且不能修復它發現的錯誤。
答案2
該raid6check
實用程式mdadm
包含repair
自版本 3.3(於 2013 年 9 月 3 日發布)以來的模式(更準確地說自此提交以來):https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id=8a63c73123b9d022107c82bd684e17bf87bc081e)