美國服務(wù)器Linux系統(tǒng)RAID故障時,回復(fù)和重建數(shù)據(jù)的辦法,就是今天本文美聯(lián)科技小編將討論的內(nèi)容,主要講解當(dāng)美國服務(wù)器磁盤發(fā)生故障時如何重建軟件 RAID 陣列并且不會丟失數(shù)據(jù)。下面辦法僅考慮美國服務(wù)器RAID 1 的配置, 但其方法和概念適用于所有情況。
1、RAID 測試方案
在進一步討論之前,請確保美國服務(wù)器已經(jīng)配置好了 RAID 1 陣列。此外,如果 SELinux 設(shè)置為 enforcing 模式,需要將相應(yīng)的標(biāo)簽添加到掛載 RAID 設(shè)備的目錄中。否則,當(dāng)試圖掛載時,則會碰到警告信息,那么需要通過以下命令來解決:# restorecon -R /mnt/raid1。
2、配置 RAID 監(jiān)控
美國服務(wù)器存儲設(shè)備損壞的原因很多,盡管固態(tài)硬盤大大減少了這種情況發(fā)生的可能性,但也有可能會隨時發(fā)生問題,需要準(zhǔn)備好替換發(fā)生故障的部分,并確保數(shù)據(jù)的可用性和完整性。
首先建議的是,雖然可以通過查看 /proc/mdstat 來檢查 RAID 的狀態(tài),但有一個更好和更節(jié)省時間的方法,就是使用監(jiān)控 + 掃描模式運行 mdadm,它將警報通過電子郵件發(fā)送到一個預(yù)定義的收件人。
設(shè)置操作,在 /etc/mdadm.conf 添加以下行:
MAILADDR user@<domain or localhost>
要讓 mdadm 運行在監(jiān)控 + 掃描模式中,以 root 用戶添加以下 crontab 條目:
@reboot /sbin/mdadm --monitor --scan –oneshot
默認(rèn)情況下,mdadm 每隔60秒會檢查 RAID 陣列,如果發(fā)現(xiàn)問題將發(fā)出警報,可以通過添加 --delay 選項到crontab 條目上面,后面跟上秒數(shù),來修改默認(rèn)行為,例如添加--delay 1800,則意味著間隔30分鐘。
最后,確保已經(jīng)安裝了一個郵件用戶代理MUA),如mutt或者mailx,否則將不會收到任何警報。一般設(shè)置完畢,在一分鐘內(nèi)就會看到 mdadm 發(fā)送的警報。
3、模擬和更換發(fā)生故障的 RAID 存儲設(shè)備
為了給 美國服務(wù)器RAID 陣列中的存儲設(shè)備模擬一個故障,下面將使用 --manage 和 --set-faulty 選項,如下所示:
# mdadm --manage --set-faulty /dev/md0 /dev/sdc1
這將導(dǎo)致 /dev/sdc1 被標(biāo)記為 faulty
更重要的是,看看是不是收到了同樣的警報郵件,在這種情況下,需要從軟件 RAID 陣列中刪除該設(shè)備:
# mdadm /dev/md0 --remove /dev/sdc1
然后,可以直接從機器中取出,并將其使用備用設(shè)備來取代,/dev/sdd 中類型為 fd 的分區(qū)是以前創(chuàng)建的:
# mdadm --manage /dev/md0 --add /dev/sdd1
幸運的是,該系統(tǒng)會使用剛才添加的磁盤自動重建陣列,可以通過標(biāo)記 /dev/sdb1 為 faulty 來進行測試,從陣列中取出后,并確認(rèn) tecmint.txt 文件仍然在 /mnt/raid1 是可訪問的:
# mdadm --detail /dev/md0
# mount | grep raid1
# ls -l /mnt/raid1 | grep tecmint
# cat /mnt/raid1/tecmint.txt
這樣添加 /dev/sdd1 到陣列中來替代 /dev/sdc1,數(shù)據(jù)的重建是系統(tǒng)自動完成的,不需要干預(yù)。
還有一個備用設(shè)備可以操作,這樣更換故障的設(shè)備就可以在瞬間完成了。要做到這一點,要先重新添加 /dev/sdb1 和 /dev/sdc1:
1)# mdadm --manage /dev/md0 --add /dev/sdb1
2)# mdadm --manage /dev/md0 --add /dev/sdc1
4、從冗余丟失中恢復(fù)數(shù)據(jù)
如前所述,當(dāng)一個磁盤發(fā)生故障時, mdadm 將自動重建數(shù)據(jù)。如果是陣列中的2個磁盤都故障的情況,通過標(biāo)記 /dev/sdb1 和 /dev/sdd1 為 faulty:
1)# umount /mnt/raid1
2)# mdadm --manage --set-faulty /dev/md0 /dev/sdb1
3)# mdadm --stop /dev/md0
4)# mdadm --manage --set-faulty /dev/md0 /dev/sdd1
如果此時嘗試以同樣的方式重新創(chuàng)建陣列就,或使用 --assume-clean 選項,可能會導(dǎo)致數(shù)據(jù)丟失,因此建議不要使用。
可以試著從 /dev/sdb1 恢復(fù)數(shù)據(jù),例如,在一個類似的磁盤分區(qū)/dev/sde1上使用 ddrescue,注意這需要執(zhí)行前在/dev/sde 上創(chuàng)建一個 fd 類型的分區(qū):
# ddrescue -r 2 /dev/sdb1 /dev/sde1
到現(xiàn)在為止,還沒有觸及的 /dev/sdb 和 /dev/sdd,它們的分區(qū)是 RAID 陣列的一部分?,F(xiàn)在,讓我們使用 /dev/sde1 和 /dev/sdf1 來重建陣列:
# mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[e-f]1
注意,在真實的情況下,需要使用與原來的陣列中相同的設(shè)備名稱,即設(shè)備失效后替換的磁盤的名稱應(yīng)該是 /dev/sdb1 和 /dev/sdc1。
在本文中,小編是選擇了使用額外的設(shè)備來重新創(chuàng)建全新的磁盤陣列,是為了避免與原來的故障磁盤混淆。當(dāng)被問及是否繼續(xù)寫入陣列時,鍵入 Y,然后按 Enter鍵,陣列被啟動,也可以查看它的進展:
# watch -n 1 cat /proc/mdstat
當(dāng)這個過程完成后,就能夠重新訪問 RAID 的數(shù)據(jù),最后再確認(rèn)一下RAID數(shù)據(jù)。還有一點需要記住,這種技術(shù)是一種存儲解決方案,不能取代備份。
關(guān)注美聯(lián)科技,了解更多IDC資訊!