Linux

Linux - dmraid(或 mdadm) - 重建 RAID 10

  • July 26, 2013

前段時間我遇到了一個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

引用自:https://serverfault.com/questions/526019