我为安装在 上的数据分区配置了 RAID-5 阵列/mnt/data
。我的系统无法在其上启动(/
并且/boot
位于专用驱动器上不是任何 RAID 阵列的一部分)。
我在 Ubuntu 12.04 上通过 mdadm(软件 raid)向我的 3 个磁盘 RAID-5 软件阵列添加了第 4 个驱动器。我的 RAID 阵列包含/dev/sdb1
和dev/sdc1
/dev/sdd1.
我使用该命令添加了第 4 个驱动器:
mdadm --add /dev/md0 /dev/sde
然后,我升级了阵列,将其转换为 RAID-6 阵列,使用方法如下:
mdadm --grow /dev/md0 --raid-devices 4 --level 6 --backup-file=backup/raid-backup-file
运行良好。服务器运行正常,启动时没有出现任何问题。唯一的问题是我发现我将第 4 个驱动器添加为整个驱动器。我应该添加/dev/sde1
而不是 sde!
为了清理它,我删除了驱动器并再次添加它,但这次使用分区:
mdadm /dev/md0 --fail /dev/sde --remove --/dev/sde
mdadm --add /dev/md0 /dev/sde1
迁移后,它工作正常(阵列可访问),但在下次启动时,我收到一条消息,说 RAID 阵列已降级,因为缺少 /dev/sde(我的所有驱动器都标记为备用),然后进入 initramfs 提示符。退出该 shell 后,服务器继续启动,而不安装来自我的 RAID 阵列的数据分区。
登录后,我能够停止 RAID 阵列并通过以下方式重新组装它:
mdadm --stop /dev/md0
mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
然后挂载文件系统。所有数据都在那里,RAID 阵列也很干净。
但是,系统无法正常启动。我最后一次尝试是移除最后一个驱动器,然后通过以下方式将 RAID-6 阵列再次更改为 RAID-5:
mdadm /dev/md0 --remove /dev/sde1
mdadm --grow /dev/md0 --raid-devices 3 --level 5 --backup-file=backup/raid-backup-file
但这并不能解决问题。启动时,系统显示阵列已降级,并且仍然缺少驱动器 sde。
退出 initramfs shell 后,登录并像以前一样重新组装阵列,阵列是干净的,请参阅
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdb1[0] sdd1[2] sdc1[1]
3907026816 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
我还发现,在我的内核消息中,在驱动器发现(sda、sdb、sdc、sde)和网卡发现之后,出现了那行奇怪的:
md: bind<sde>
这是从哪里来的?我怎样才能改变它?
我的 RAID 阵列根本不应该包含对 /dev/sde 的任何引用。
在阵列第一次发生更改时我没有更新 initramfs,之后我尝试过,但没有任何改变。
顺便说一下,这是我的 /etc/mdadm.conf :
DEVICE partitions
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST <system>
MAILADDR root
ARRAY /dev/md0 metadata=0.90 UUID=4d84e24c:e40f825f:3ba42e3c:267295e2
答案1
sde 设备上一定还保留着一些 md 元数据。
- 从 raid 设备中删除 sde1。
完全擦除 sde md 元数据(使用 dd 并取决于元数据的版本及其在磁盘上的位置),例如:
dd if=/dev/zero of=/dev/sde bs=4096 count=1 seek=1
甚至更好:
mdadm --misc --zero-superblock /dev/sde
重新创建 sde1 并将其再次添加到 md0 设备,然后更新 mdadm.conf(如果您仍希望它包含 UUID)(如果您首先备份了以前的元数据,您也可以恢复它们)
答案2
更新 md 设备后,您是否尝试过重新生成 initrd?尝试 update-initramfs 或与您的发行版匹配的工具。更新 bootlegger 可能也是个好主意(grub-pc 的 update-grub2)
还尝试在 mdadm.conf 中为 md0 指定分区 uuid。