mdadm在引导时在arrays中放置错误的设备更正mdadm.conf文件

每次开机时都会塞满它:

[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> 

无论哪种情况,您都需要先重命名旧文件,然后才能构build新文件。

mdadm应该能够声明一个md设备。 它似乎正在看到一些错误的驱动器:

md127:不活动sda [2] sdb [3]

这看起来像是整个sda和sdb磁盘的raidarrays,而不是分区sda1 sdb1 sdc1 sdd1。

blkid显示什么? mdadm -E / dev / sda或mdadm -E / dev / sdb显示什么?

也许有一些奇怪的超级块。

正如TomH所说,你也应该尝试重buildinitrd。

在Ubuntu中,我解决了这个问题:

 sudo update-initramfs -k all -u 

我觉得我发现它,这是我的mdadm.conf文件不够具体,可能会混淆操作系统的问题。

所以我读了这个: http : //manpages.ubuntu.com/manpages/hardy/man5/mdadm.conf.5.html

我发现,如果我使用这个

 DEVICE partitions 

然后:

这将导致mdadm读取/ proc /分区,并包含其中find的所有设备和分区

所以我改变了

DEVICE /dev/sd[abcd]1