Linux

mdadm 在啟動時將錯誤的設備放入陣列中 更正 mdadm.conf 文件

  • August 12, 2011

啟動時,它每次都會把它塞滿:

   [root][centos ~] cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md127 : inactive sda[2] sdb[3]
     1953524992 blocks
unused devices: <none>
[root][centos ~] mdadm --stop /dev/md127 
mdadm: stopped /dev/md127
[root][centos ~] mdadm --assemble --scan
mdadm: /dev/md0 has been started with 4 drives.
[root][centos ~] cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sda1[0] sdd1[3] sdc1[2] sdb1[1]
     2930279424 blocks level 5, 1024k chunk, algorithm 2 [4/4] [UUUU]          
unused devices: <none>

你可以看到它首先檢測到一個 BS md127,然後我必須停止那個,然後重新組裝它,這是一件奇怪的事情,它檢測到兩個 md0,但它是成功的:

[root][centos ~] mdadm -Es 
ARRAY /dev/md0 UUID=39c28990:e753d835:8b94c90b:72da1a08
ARRAY /dev/md0 UUID=88edc937:2ecbc9bb:8b94c90b:72da1a08

我的 mdadm.conf

[root][centos ~] cat /etc/mdadm.conf
DEVICE partitions 
ARRAY /dev/md0 UUID=88edc937:2ecbc9bb:8b94c90b:72da1a08
MAILADDR root 
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST <system>

但最奇怪的是,在 dmesg 中,我認為問題出在:

md: kicking non-fresh sdc from array!
md: unbind<sdc>
md: export_rdev(sdc)
md: kicking non-fresh sdd from array!
md: unbind<sdd>
md: export_rdev(sdd)
async_tx: api initialized (async)
xor: automatically using best checksumming function: generic_sse
  generic_sse:  6532.000 MB/sec
xor: using function: generic_sse (6532.000 MB/sec)
raid6: int64x1   1664 MB/s
raid6: int64x2   2148 MB/s
raid6: int64x4   1453 MB/s
raid6: int64x8   1457 MB/s
raid6: sse2x1    2417 MB/s
raid6: sse2x2    3222 MB/s
raid6: sse2x4    3429 MB/s
raid6: using algorithm sse2x4 (3429 MB/s)
md: raid6 personality registered for level 6
md: raid5 personality registered for level 5
md: raid4 personality registered for level 4
raid5: device sda operational as raid disk 2
raid5: device sdb operational as raid disk 3
raid5: allocated 4282kB for md127
2: w=1 pa=0 pr=4 m=1 a=2 r=4 op1=0 op2=0
3: w=2 pa=0 pr=4 m=1 a=2 r=4 op1=0 op2=0
raid5: not enough operational devices for md127 (2/4 failed)
RAID5 conf printout:
--- rd:4 wd:2
disk 2, o:1, dev:sda
disk 3, o:1, dev:sdb
raid5: failed to run raid set md127
md: pers->run() failed ...

您可能需要重建您的文件,initrd以便其中包含正確的mdadm.conf文件,因為引導過程必須使用該版本,直到它可以安裝根文件系統。

你需要做的是這樣的:

mkinitrd /boot/initrd-<kernel-version>.img <kernel-version>

我在這裡假設您正在使用的 CentOS 版本仍在使用mkinitrd- 如果它已切換到,dracut那麼您將需要:

dracut /boot/initramfs-<kernel-version>.img <kernel-version>

無論哪種情況,您都需要先重命名舊文件,然後才能建構新文件。

mdadm 應該能夠組裝 md 設備。似乎看到一些錯誤的驅動器:

md127 : 非活動 sda

$$ 2 $$數據庫$$ 3 $$ 看起來它為 RAID 陣列佔用了整個 sda 和 sdb 磁碟,而不是分區 sda1 sdb1 sdc1 sdd1。

blkid 顯示什麼?mdadm -E /dev/sda 或 mdadm -E /dev/sdb 顯示什麼?

也許超級塊發生了一些奇怪的事情。

正如 TomH 所說,您還應該嘗試重建 initrd。

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