Linux - dmraid(或 mdadm) - 重建 RAID 10
前段時間我遇到了一個raid10配置廢話,現在我正試圖挽救陣列,這樣我就可以重建並繼續我的生活。基本上每個子集中的一個驅動器都發生了故障,這意味著(理論上)我可以恢復。如果我在同一個子集中失去了兩個磁碟,則無法恢復。
我刪除了兩個壞驅動器並在系統中添加了兩個新驅動器。對於raid 控制器卡,系統使用promise fasttrak 4310。當我啟動系統時,我跳轉到raid 控制器卡BIOS 並註意到所有4 個驅動器都找到了,但是兩個新驅動器(顯然)沒有分配給raid配置。不幸的是,我無法通過 bios 從配置中刪除兩個舊驅動器並添加兩個新驅動器。Promise 確實提供了一個 WebPAM 安裝程序,但它很古老(6 歲)並且不會安裝在 CentOS 6.4 上。
所以我做了一些探勘並遇到了“dmraid”。dmraid 看起來很有希望,因為它正在返回有關我的 raid 配置的資訊,基於我對它的了解:
root@service1 ~ # -> dmraid -s -s ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-0" [1/2] on /dev/sdb ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-1" [1/2] on /dev/sde ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-0" [1/2] on /dev/sdb ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-1" [1/2] on /dev/sde *** Superset name : pdc_fbdbhaai size : 976642080 stride : 32 type : raid10 status : ok subsets: 2 devs : 2 spares : 0 --> Subset name : pdc_fbdbhaai-0 size : 976642080 stride : 32 type : stripe status : broken subsets: 0 devs : 1 spares : 0 --> Subset name : pdc_fbdbhaai-1 size : 976642080 stride : 32 type : stripe status : broken subsets: 0 devs : 1 spares : 0 root@service1 ~ # -> dmraid -r /dev/sde: pdc, "pdc_fbdbhaai-1", stripe, ok, 976642080 sectors, data@ 0 /dev/sdb: pdc, "pdc_fbdbhaai-0", stripe, ok, 976642080 sectors, data@ 0
到目前為止,看起來我需要做的就是更新 raid 元數據以忽略舊驅動器,然後添加新驅動器。然後(希望)我可以發出重建命令,理論上,raid 將使用剩餘的兩個驅動器來挽救自己。
我確實讀過“man dmraid”,但我想絕對確定我發出的命令會完成我想要做的事情。不幸的是,我無法在網上找到任何關於如何使用 dmraid 從 RAID 元數據中添加/刪除驅動器的好的文件。
我建議的命令集如下所示:
root@service1 ~ # -> dmraid --remove pdc_fbdbhaai-0 /dev/sda1 root@service1 ~ # -> dmraid --remove pdc_fbdbhaai-1 /dev/sda2
移除舊驅動器後,是時候添加新驅動器了:
root@service1 ~ # -> dmraid -R pdc_fbdbhaai-0 /dev/sdc root@service1 ~ # -> dmraid -R pdc_fbdbhaai-1 /dev/sdd
有使用 dmraid 經驗的人能夠確認這些步驟嗎?還是我應該走另一條路?
碉堡了。能夠弄清楚。經過更多研究後,我偶然發現了一些文章,這些文章表明dmraid不再被積極維護,而是使用mdadm。所以我開始使用 mdadm 並找出命令來重建 raid 並希望再次上線。這是我所做的:
根據 mdadm 文件,發出 assemble 命令將從兩個物理驅動器創建邏輯卷,如果它們具有超級塊資訊,那麼讓我們添加兩個沒有失敗的驅動器:
$ -> mdadm --assemble /dev/md0 /dev/sdb /dev/sde mdadm: /dev/md0 assembled from 2 drives - need all 4 to start it (use --run to insist).
很簡單,讓我們將兩個新驅動器添加到邏輯卷:
$ -> mdadm --add /dev/md0 /dev/sdc /dev/sdd mdadm: cannot get array info for /dev/md0
在這一點上,我做了一些Google搜尋以找出這條消息的含義。有無數種不同的情況可能會導致給定的響應,所以我再次考慮了 assemble 命令。第二次重新檢查 assemble 命令的關鍵是給出的消息;“使用 –run 堅持”。想通了,為什麼不試一試:
$ -> mdadm --run /dev/md0 mdadm: started /dev/md0
好的,到目前為止很好,現在我可以添加兩個新驅動器了嗎?
$ -> mdadm --add /dev/md0 /dev/sdc mdadm: added /dev/sdc $ -> mdadm --add /dev/md0 /dev/sdd mdadm: added /dev/sdd
哇酷!讓我們檢查一下狀態:
$ -> cat /prod/mdstat Personalities : [raid10] md0 : active raid10 sdd[4](S) sdc[5] sdb[1] sde[2] 976772992 blocks 64K chunks 2 near-copies [4/2] [_UU_] [>....................] recovery = 2.2% (10762688/488386496) finish=131.5min speed=60498K/sec unused devices: <none>
當然好!根據狀態,raid 正在從沒有崩潰和燒毀的兩個驅動器重建。
- 編輯 -
為了確保 raid 配置在重新啟動/關閉之間持續存在,我必須執行以下操作:
$ -> mdadm --detail --scan >> /etc/mdadm.conf