當一個磁盤發生故障時如何重建軟件 RAID 陣列并且不會丟失數據。
如果 SELinux 設置為 enforcing 模式,需要將相應的標簽添加到掛載 RAID 設備的目錄中。(網絡外包公司)
啟用 SELinux 時 RAID 掛載錯誤
通過以下命令來解決:
# restorecon -R /mnt/raid1
配置 RAID 監控存儲設備損壞的原因很多(盡管固態硬盤大大減少了這種情況發生的可能性),但不管是什么原因,可以肯定問題隨時可能發生,你需要準備好替換發生故障的部分,并確保數據的可用性和完整性。
首先,可以查看 /proc/mdstat 來檢查 RAID 的狀態,但有一個更好的和節省時間的方法,使用監控 + 掃描模式運行 mdadm,它將警報通過電子郵件發送到一個預定義的收件人。
要這樣設置,在 /etc/mdadm.conf 添加以下行:
MAILADDR user@
我自己的設置如下:
監控 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。(it外包)
在本文中,我選擇了使用額外的設備來重新創建全新的磁盤陣列,是為了避免與原來的故障磁盤混淆。
當被問及是否繼續寫入陣列時,鍵入 Y,然后按 Enter。陣列被啟動,你也可以查看它的進展:
# watch -n 1 cat /proc/mdstat
當這個過程完成后,你就應該能夠訪問 RAID 的數據:
艾銻無限是中國領先IT外包服務商,專業為企業提供IT運維外包、電腦維護、網絡維護、網絡布線、辦公設備維護、服務器維護、數據備份恢復、門禁監控、網站建設等多項IT服務外包,服務熱線:400-650-7820 聯系電話:010-62684652 咨詢QQ1548853602 地址:北京市海淀區北京科技會展2號樓16D,用心服務每一天,為企業的發展提升更高的效率,創造更大的價值。
更多的IT外包信息盡在艾銻無限http://www.dyfgwiyq.cn
相關文章