在 mdadm 软件 RAID 上移除/添加驱动器后,如何修复服务器以使其正常启动

在 mdadm 软件 RAID 上移除/添加驱动器后,如何修复服务器以使其正常启动

我为安装在 上的数据分区配置了 RAID-5 阵列/mnt/data。我的系统无法在其上启动(/并且/boot位于专用驱动器上不是任何 RAID 阵列的一部分)。

我在 Ubuntu 12.04 上通过 mdadm(软件 raid)向我的 3 个磁盘 RAID-5 软件阵列添加了第 4 个驱动器。我的 RAID 阵列包含/dev/sdb1dev/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。

相关内容