我的軟體 RAID5 (mdadm) 系統由五個磁碟組成。最近,我在讀取某些檔案時遇到 I/O 錯誤。大多數其他文件仍然可讀。
起初,我計劃找出哪個磁碟損壞了(使用 smartctl),並在其他磁碟也出現故障之前快速更換故障磁碟以重建陣列。然而,smartctl 顯示三磁碟存在無法修正的錯誤。
我認為只要這三個磁碟的壞扇區不相交,mdadm 應該仍然能夠重建,讓我可以選擇一一交換和重建。
或者,我出現 I/O 錯誤的事實是否已經表明奇偶校驗已丟失並且多個磁碟上的同一扇區無法讀取?是否有某種方法可以找出任何故障扇區是否相交,從而導致資訊不可逆轉地丟失?
答案1
標準程序是:
- 始終擁有良好的、最新的備份(至少在不同的地方,至少在不同的媒體上有兩個獨立的副本)
- 不斷地監視器您的 RAID 問題。當錯誤不斷累積時,RAID 就毫無價值。
- 擦洗至少每月一次磁碟。這可以避免錯誤累積並阻止重建。
- 考慮磁碟陣列6有兩個冗餘磁碟。
你似乎沒有認真對待這件事。嘗試恢復仍然存在的內容現在。嘗試重建幾乎失敗的陣列可能會造成比您預期更多的損壞。
如果資料夠有價值,請尋找值得信賴且有能力的資料復原服務。預留四到五位數的現金。否則,沖洗並重複 - 更換磁碟、重新格式化、重新安裝並更認真地執行標準程序。
答案2
您是正確的,如果無法讀取的扇區“不相交”,即位於不同的條帶中,MD RAID可能使用奇偶校驗恢復資料。但它可能會在恢復過程中踢掉一些驅動器,然後機會就會顯著下降。
資料恢復有一個一般規則:總是從原始轉儲開始。這保證了您無限的嘗試:如果您搞砸了某些事情,您可以透過轉儲重新開始。因此,一般來說,您可以將所有即將失效的磁碟克隆到一些正常的磁碟,讀取錯誤,然後用新磁碟組裝 RAID。
您可以先將每個磁碟機逐個磁區複製為替換
ddrescue
(即不是透過使用 MD RAID 恢復過程)。除了複製錯誤之外,它還創建了所謂的記錄檔,這實際上是壞扇區圖。當你複製這三個地圖時,你可以比較這些地圖並找出是否有交叉點。不要扔掉它們,這些地圖可能會在恢復過程中為您提供幫助。然而,從這種轉儲的意義上來說,RAID5 是非常令人討厭的野獸。可能會出什麼問題?如果您的磁碟機的磁區根本無法讀取並引發 I/O 錯誤,RAID 層將從其他磁碟還原該資料;對於舊磁碟來說就是這種情況。但如果讀取時沒有錯誤,但傳回錯誤數據,RAID 不會嘗試從奇偶校驗中恢復數據,而是傳回錯誤資料。
ddrescue
將以零填充不可讀的扇區,如果稍後使用此克隆設備組裝陣列,則將讀回該扇區,因此這將轉換為讀取零(損壞的資料),其中有可能恢復原始資料。 RAID 不保證數據正直。這是所有變體的真正問題,除了具有兩個奇偶校驗綜合症的 RAID6 或具有兩個以上鏡像的 RAID1 之外。而且,您可能已經猜到,這個問題在 RAID5 中以最具破壞性的方式表現出來。 (對此還有其他考慮,例如現代磁碟大小及其誤碼率。)在任何克隆操作期間,磁碟都可能完全失效。然後你就卡住了。超過這個點有可能進行恢復,但這會花費你的錢很多。有些服務是“無塵室”,它們可以更換硬碟內的磁頭並重新嘗試讀取;它很慢,容易出錯,而且他們可能會向你收取很高的費用。如果您的數據非常有價值,請考慮這一點。
因此,明智的做法是克隆原始磁碟,然後將克隆存放起來,從其中組裝陣列原來的磁碟並嘗試從陣列本身克隆 (
/dev/mdX
)。如果出現問題(磁碟損壞),請用克隆替換它,然後手動恢復損壞的條帶(閱讀第 4 頁),並查閱日誌檔案(第 3 頁)這是一項相當艱苦的工作。另請注意,您需要節省兩次執行復原的原始空間。或者自己什麼都不做,將整個工作外包給專家。這是您因陣列和資料維護不當而付出的代價。現在,你擁有了這段寶貴的經驗。不要責怪數組,責怪自己,吸取教訓並正確管理它們:
- 使用RAID5前請三思。然後說“不”並選擇另一個 RAID 等級。
- 定期擦洗陣列。這意味著 MD RAID 將讀取並比較磁碟機上的數據,如果出現問題(不匹配、無法讀取區塊),它會發出警報。然後,您可以在早期症狀出現時更換不良行為驅動力。好的發行版都具有開箱即用的配置(至少 Debian)。
- 監視磁碟和陣列,不要錯過重要的問題跡象。
- 最後,歡迎來到定期備份資料的管理員俱樂部。