在之前的文章中已经提到了,Gentoo的mdadm在Intel的FakeRAID存在bug,会将一个三块正常硬盘组成的RAID5阵列少识别一块硬盘,但由于RAID5在2块硬盘也能正常运行。而重新启动计算机后,mdadm又能识别出三块硬盘,并开始重建RAID阵列。再次重启后,又回到最初的情况。
为了解决这个bug,比尔盖子经过多次实验均以失败告终,而失败的后果就是等待3个小时重建阵列。最后,在StackOverflow上看到一个关于mdadm的提问,用了一下发现工作完美,便索性禁了mdadm的服务,用自己写的Quick and Dirty的脚本替代。
更新1:改成了OpenRC脚本,这样fstab里面的文件系统就能挂载了!
启动RAID的脚本
#!/bin/bash
#禁用内核自动激活的RAID设备,它们会导致mdadm将三块硬盘识别为两块
mdadm -S /dev/md* > /dev/null 2>&1
#自动检测并激活Intel FakeRAID
mdadm --assemble --scan > /dev/null 2>&1
mdadm -I /dev/md/imsm0 > /dev/null 2>&1
禁用RAID的脚本
#!/bin/bash
#批量解除挂载RAID
umount /dev/md* > /dev/null 2>&1
#批量停止RAID块设备
mdadm -S /dev/md* > /dev/null 2>&1
然后将这两个脚本分别命名为raid.start和raid.stop,放到/etc/local.d/,赋予可执行权限,大功告成!
OpenRC脚本,放到/etc/init.d里面,叫fakeraid,赋予可执行权限,然后rc-update add fakeraid default
#!/sbin/runscript
depend() {
before checkfs fsck localmount
after modules
}
start() {
ebegin "Starting up Intel FakeRAID devices"
mdadm -S /dev/md* > /dev/null 2>&1
mdadm --assemble --scan > /dev/null 2>&1
mdadm -I /dev/md/imsm0 > /dev/null 2>&1
eend $?
}
stop() {
local output
ebegin "Shutting down Intel FakeRAID devices (mdadm)"
umount /dev/md* > /dev/null 2>&1
output=$(mdadm -Ss 2>&1)
eend $? "${output}"
}
发表评论