Raid

RAID 10 無法啟動

  • December 12, 2012

我有一個管理mdadm失敗的 RAID 10 陣列。症狀是 X 崩潰了,我無法從終端登錄。我重新啟動了電腦,/dev/md1但沒有啟動。

我收集了以下資訊 - 有些資訊不完整,因為我手動將其複製到另一台電腦:

$ cat /proc/mdstat

....

md1 :   inactive sdb3[1](S) sdd1[3](S) sdc2[2](S) sda1[0](S)
       1250273760 blocks super 1.0

掛載失敗

$ mount /dev/md1    
EXT4-fs (md1): unable to read superblock

掃描確實找到了元數據

$ mdadm --examine --scan
...
ARRAY /dev/md/1 metadata=1.0 UUID=2c... name=linux:1

由於缺少操作鏡像,執行失敗

$ mdadm --run /dev/md1
md/raid0:md1: not enough operational mirrors.
md: pers->run() failed...
mdadm:failed to run array /dev/md1: Input/output error

執行嘗試後,陣列中只有兩個磁碟

$ cat /proc/mdstat
....
md1  : inactive sdd1[3] sdc2[2]
      62513638 blocks super 1.0

嘗試重新添加一個磁碟失敗

$ mdadm /dev/md1 --add /dev/sda1
mdadm: /dev/sda1 reports being an active member for /dev/md1, but --re-add fails
mdadm: not performing --add as that would convert /dev/sda1 in to a spare
mdadm: To make this a spare, use "mdadm --zero-superblock /dev/sda1" first

我已經記錄了一些元數據,以便嘗試重新創建數組

$ mdadm --examine /dev/sdb3 /dev/sdd1 /dev/sdc2 /dev/sda1 | grep -E 'dev|Update|Role|State|Chunk Size'
/dev/sdb3:
 State: active
 Update time:  Mon May 14 21:51:41 2012
 Chunk Size: 256K
 Device Role: Active device 1
 Array State : AAAA
/dev/sdd1:
 State: active
 Update time:  Mon May 14 22:11:11 2012
 Chunk Size: 256K
 Device Role: Active device 3
 Array State : ..AA
/dev/sdc2:
 State: active
 Update time:  Mon May 14 22:11:11 2012
 Chunk Size: 256K
 Device Role: Active device 2
 Array State : ..AA
/dev/sda1:
 State: active
 Update time:  Mon May 14 21:51:41 2012
 Chunk Size: 256K
 Device Role: Active device 0
 Array State : AAAA

我已經嘗試根據之前記錄的資訊手動重新創建數組

$ mdadm --create --metadata=1.0 --assume-clean --level=10 --raid-devices=4 --chunk=256K /dev/md1 /dev/sda1 /dev/sdb3 /dev/sdc2 /dev/sdd1
mdadm: /dev/sda1 appears to contain an ext2fs file system
mdadm: /dev/sda1 appears to be part of a raid array
mdadm: /dev/sdb3 appears to contain an ext2fs file system
mdadm: /dev/sdb3 appears to be part of a raid array
mdadmin: /dev/sdc2 appears to be part of a raid aray
mdadmin: /dev/sdd1 appears to be part of a raid aray

掛載再次失敗,這可能意味著沒有正確創建 raid

$ 安裝 /dev/md1 /mnt

EXT4-fs (md1): ext4_check_descriptors: Checksum forgroup 0 failed (54076!=0)
EXT4-fs (md1): group descriptors corrupted!

執行 fsck 產生了太多錯誤,無法認真考慮,所以我沒有讓它執行。

我嘗試使用“缺少”設備和兩個磁碟重新創建陣列,但沒有成功組合。我不確定我是否都嘗試過,但我確實嘗試了很多。


一些細節:

  • mdadm是版本 2.3.2,在 OpenSUSE 12.1、核心 3.1.10、x86_64 上執行
  • 所有硬碟都已完成smartctl -t short,沒有任何錯誤

如何在不失去資訊的情況下重建 RAID 陣列,或者只是提取資訊並將其複製到其他地方?我也很想知道在嘗試重新創建數組時是否在上面做錯了什麼。

在一些幫助下,我設法通過以下方式重建了一個降級的陣列:

  1. 使用testdisk實用程序並註意/dev/sdc/dev/sdd磁碟被標記為 GPT 分區表
  2. 修復分區表/dev/sdd以將分區類型列為fd而不是83
  3. /dev/sda1僅使用和創建 RAID 陣列/dev/sdd1
  4. 執行e2fsck -y /dev/md1(期待很多修復)

重建 RAID 陣列時的一個有用提示是查看原始設備的前 100 MB,看看它是否看起來像應該傳遞給 e2fsck 的有效 ext2:

dd if=/dev/md1 of=/tmp/md1.img bs=1k count=1024
strings md1.img | lesss

引用自:https://unix.stackexchange.com/questions/38698