2021-05-12 14:32:11
在 Linux 下使用 RAID(八):當軟體 RAID 故障時如何恢復和重建資料
在閱讀過 RAID 系列 前面的文章後你已經對 RAID 比較熟悉了。回顧前面幾個軟體 RAID 的設定,我們對每一個都做了詳細的解釋,使用哪一個取決與你的具體情況。
在 Linux 下使用 RAID(七):在 RAID 中擴充套件現有的 RAID 陣列和刪除故障的磁碟 http://www.linuxidc.com/Linux/2015-09/122602.htm
- 介紹 RAID 的級別和概念 http://www.linuxidc.com/Linux/2015-08/122191.htm
- 使用 mdadm 工具建立軟體 RAID 0 (條帶化) http://www.linuxidc.com/Linux/2015-08/122236.htm
- 用兩塊磁碟建立 RAID 1(映象) http://www.linuxidc.com/Linux/2015-08/122289.htm
- 如何在Linux上構建 RAID 10陣列 http://www.linuxidc.com/Linux/2014-12/110318.htm
- Debian軟RAID安裝筆記 - 使用mdadm安裝RAID1 http://www.linuxidc.com/Linux/2013-06/86487.htm
- 常用RAID技術介紹以及範例演示(多圖) http://www.linuxidc.com/Linux/2013-03/81481.htm
- Linux實現最常用的磁碟陣列-- RAID5 http://www.linuxidc.com/Linux/2013-01/77880.htm
- RAID0+1和RAID5的效能測試結果 http://www.linuxidc.com/Linux/2012-07/65567.htm
- Linux入門教學:磁碟陣列(RAID) http://www.linuxidc.com/Linux/2014-07/104444.htm
- 在 Linux 下使用 RAID(四):建立 RAID 5(條帶化與分散式奇偶校驗) http://www.linuxidc.com/Linux/2015-08/122343.htm
恢復並重建故障的軟體 RAID - 第8部分
在本文中,我們將討論當一個磁碟發生故障時如何重建軟體 RAID 陣列並且不會丟失資料。為方便起見,我們僅考慮RAID 1 的設定 - 但其方法和概念適用於所有情況。
RAID 測試方案
在進一步討論之前,請確保你已經設定好了 RAID 1 陣列,可以按照本系列第3部分提供的方法:在 Linux 中如何建立 RAID 1(映象)。
在目前的情況下,僅有的變化是:
- 使用不同版本 CentOS(v7),而不是前面文章中的(v6.5)。
- 磁碟容量發生改變, /dev/sdb 和 /dev/sdc(各8GB)。
此外,如果 SELinux 設定為 enforcing 模式,你需要將相應的標籤新增到掛載 RAID 裝置的目錄中。否則,當你試圖掛載時,你會碰到這樣的警告資訊:
啟用 SELinux 時 RAID 掛載錯誤
通過以下命令來解決:
# restorecon -R /mnt/raid1
設定 RAID 監控
儲存裝置損壞的原因很多(儘管固態硬碟大大減少了這種情況發生的可能性),但不管是什麼原因,可以肯定問題隨時可能發生,你需要準備好替換發生故障的部分,並確保資料的可用性和完整性。
首先建議是。雖然你可以檢視 /proc/mdstat
來檢查 RAID 的狀態,但有一個更好的和節省時間的方法,使用監控 + 掃描模式執行 mdadm,它將警報通過電子郵件傳送到一個預定義的收件人。
要這樣設定,在 /etc/mdadm.conf
新增以下行:
MAILADDR user@<domain or localhost>
我自己的設定如下:
MAILADDR gacanepa@localhost
監控 RAID 並使用電子郵件進行報警
要讓 mdadm 執行在監控 + 掃描模式中,以 root 使用者新增以下 crontab 條目:
@reboot/sbin/mdadm--monitor --scan --oneshot
預設情況下,mdadm 每隔60秒會檢查 RAID 陣列,如果發現問題將發出警報。你可以通過新增 --delay
選項到crontab 條目上面,後面跟上秒數,來修改預設行為(例如,--delay
1800意味著30分鐘)。
最後,確保你已經安裝了一個郵件使用者代理(MUA),如mutt 或 mailx。否則,你將不會收到任何警報。
在一分鐘內,我們就會看到 mdadm 傳送的警報。
模擬和更換發生故障的 RAID 儲存裝置
為了給 RAID 陣列中的儲存裝置模擬一個故障,我們將使用 --manage
和 --set-faulty
選項,如下所示:
#mdadm--manage --set-faulty /dev/md0 /dev/sdc1
這將導致 /dev/sdc1 被標記為 faulty,我們可以在 /proc/mdstat 看到:
在 RAID 儲存裝置上模擬問題
更重要的是,讓我們看看是不是收到了同樣的警報郵件:
RAID 裝置故障時傳送郵件警報
在這種情況下,你需要從軟體 RAID 陣列中刪除該裝置:
#mdadm/dev/md0 --remove /dev/sdc1
然後,你可以直接從機器中取出,並將其使用備用裝置來取代(/dev/sdd 中型別為 fd 的分割區是以前建立的):
#mdadm--manage /dev/md0 --add /dev/sdd1
幸運的是,該系統會使用我們剛才新增的磁碟自動重建陣列。我們可以通過標記 /dev/sdb1 為 faulty 來進行測試,從陣列中取出後,並確認 tecmint.txt 檔案仍然在 /mnt/raid1 是可存取的:
#mdadm--detail /dev/md0
#mount|grep raid1
#ls-l /mnt/raid1 |grep tecmint
#cat/mnt/raid1/tecmint.txt
確認 RAID 重建
上面圖片清楚的顯示,新增 /dev/sdd1 到陣列中來替代 /dev/sdc1,資料的重建是系統自動完成的,不需要干預。
雖然要求不是很嚴格,有一個備用裝置是個好主意,這樣更換故障的裝置就可以在瞬間完成了。要做到這一點,先讓我們重新新增 /dev/sdb1 和 /dev/sdc1:
#mdadm--manage /dev/md0 --add /dev/sdb1
#mdadm--manage /dev/md0 --add /dev/sdc1
取代??障的 Raid 裝置
從冗餘丟失中恢復資料
如前所述,當一個磁碟發生故障時, mdadm 將自動重建資料。但是,如果陣列中的2個磁碟都故障時會發生什麼?讓我們來模擬這種情況,通過標記 /dev/sdb1 和 /dev/sdd1 為 faulty:
#umount/mnt/raid1
#mdadm--manage --set-faulty /dev/md0 /dev/sdb1
#mdadm--stop /dev/md0
#mdadm--manage --set-faulty /dev/md0 /dev/sdd1
此時嘗試以同樣的方式重新建立陣列就(或使用 --assume-clean
選項)可能會導致資料丟失,因此不到萬不得已不要使用。
讓我們試著從 /dev/sdb1 恢復資料,例如,在一個類似的磁碟分割區(/dev/sde1 - 注意,這需要你執行前在/dev/sde 上建立一個 fd 型別的分割區)上使用 ddrescue
:
# ddrescue -r 2/dev/sdb1 /dev/sde1
恢復 Raid 陣列
請注意,到現在為止,我們還沒有觸及 /dev/sdb 和 /dev/sdd,它們的分割區是 RAID 陣列的一部分。
現在,讓我們使用 /dev/sde1 和 /dev/sdf1 來重建陣列:
#mdadm--create /dev/md0 --level=mirror --raid-devices=2/dev/sd[e-f]1
請注意,在真實的情況下,你需要使用與原來的陣列中相同的裝置名稱,即裝置失效後替換的磁碟的名稱應該是 /dev/sdb1 和 /dev/sdc1。
在本文中,我選擇了使用額外的裝置來重新建立全新的磁碟陣列,是為了避免與原來的故障磁碟混淆。
當被問及是否繼續寫入陣列時,鍵入 Y,然後按 Enter。陣列被啟動,你也可以檢視它的進展:
#watch-n 1cat/proc/mdstat
當這個過程完成後,你就應該能夠存取 RAID 的資料:
確認 Raid 資料
總結
在本文中,我們回顧了從 RAID 故障和冗餘丟失中恢復資料。但是,你要記住,這種技術是一種儲存解決方案,不能取代備份。
本文中介紹的方法適用於所有 RAID 中,其中的概念我將在本系列的最後一篇(RAID 管理)中涵蓋它。
如果你對本文有任何疑問,隨時給我們以評論的形式說明。我們期待傾聽閣下的心聲!
via: http://www.tecmint.com/recover-data-and-rebuild-failed-software-raid/
作者:Gabriel Cánepa 譯者:strugglingyouth 校對:wxy
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-10/124389.htm
相關文章