MDADM - 災難恢復或從我將 RAID5 陣列放入的狀態繼續前進
長話短說,對於我在這裡的第一個執行緒,我有一個軟體 RAID5 陣列設置如下:4 個磁碟設備,每個磁碟設備都有一個 linux-RAID 分區。這些磁碟是: /dev/sda1 /dev/sdb1 /dev/sdd1 /dev/sde1
/dev/md0 是帶有加密 LVM 的 raid5 設備。我使用 cryptsetup 打開設備,然後使用 vgscan 和 lvcan -a 映射我的捲。
昨天,我發現 /dev/sdd1 失敗了。以下是我遵循的步驟:
0.刪除故障磁碟
# mdadm --remove /dev/md0 /dev/sdd1
1.檢查故障驅動器
mdadm --examine /dev/sdd1
我收到“無法讀取元數據”錯誤。
2.嘗試讀取分區表
我使用 parted 發現我的 Linux-RAID 分區不見了,當我嘗試重新創建它時(希望能夠重新添加驅動器)我得到“你的設備不可寫”
所以,很明顯:硬碟已經死了。
3. 從我的機箱中取出硬碟(壞事接踵而至)
所以我試圖從我的案例中提取 /dev/sdd1 ,不知道它是 4 個驅動器中的哪一個。所以我拔掉了一根 SATA 電纜,發現我剛剛拔掉了 /dev/sde1 ;我重新插入它並拔掉了下面的一個,很好!它是 /dev/sdd1
4.我做了什麼?!悲傷的臉
使用 :
# mdadm --detail /dev/md0
我意識到 /dev/sde1 將數組標記為“已刪除”。我嘗試重新添加它,而不是使用 –re-add,但是:
mdadm --add /dev/md0 /dev/sde1
/proc/mdstat 向我展示了重建過程,並且 mdadm –detail /dev/md0 將 /dev/sde1 顯示為“備用”;我知道我可能在這裡做了一些可怕的事情。
我試圖從陣列中刪除 /dev/sde1 並使用 –re-add 但 mdadm 告訴我他不能這樣做並建議我停止並重新組裝陣列
5. 從這裡去哪裡?
首先,我正在等待一個新的硬碟來替換有故障的硬碟。一旦我擁有它並將其設置為稱為 /dev/sdd1 的新 Linux-RAID 分區設備,我將不得不停止陣列(不再安裝 LVM 卷,顯然,cryptsetup 關閉了加密設備,然而mdadm 還不能停止陣列)。我正在考慮重新啟動整個系統並從頭開始工作。這是我認為我應該做的:
# mdadm --stop /dev/md0 # mdadm --stop /dev/md0 # mdadm --examine /dev/sd*1 # mdadm --assemble --scan --run --verbose
我讀到沒有 –run 選項,mdadm 將拒絕掃描降級的陣列。
最佳情況:/dev/sde1 被重新組裝過程辨識,新的 /dev/sdd1 用於修復以前的故障。我不會失去任何數據並且會很高興。
最糟糕也是最常見的情況:重新組裝陣列無法恢復 /dev/sde1,我必須從一個空白的新陣列開始。
我在這裡錯過了什麼嗎?我應該從這個程序中查看什麼?
來自法國的問候
因此,感謝此連結,我設法完全康復
我所做的如下:
- 我更換了故障磁碟並重新啟動了伺服器。
- 然後,我將新磁碟格式化為 Linux-RAID 分區類型。
# mdadm --examine /dev/sda1 /dev/sdb1 /dev/sdd1 /dev/sde1
然後,基於上面的連結,我(重新)創建了數組,基於 –examine 命令給出的資訊。
# mdadm --create /dev/md0 --level=5 --raid-devices=4 --chunk=512 --name=server:0 /dev/sda1 /dev/sdb1 missing /dev/sde1 --assume-clean
如該連結所述, –assume-clean 成功了!它避免了來自 /dev/sde1 的“備用”狀態,並將其用作新陣列的活動部分。
從“現有”設備重新創建數組的關鍵可能是不要弄亂塊參數,除非您會失去數據。
- 然後我將新設備添加到這個新陣列中:
# mdadm --add /dev/md0 /dev/sde1
伺服器開始重建(10 Tb 需要 6 小時),之後,我強制對整個陣列進行完整性檢查(也需要 6 小時)
我恢復了一切,我鬆了一口氣!