什么告诉 initramfs 或 Ubuntu 服务器启动过程如何组装 RAID 阵列?

什么告诉 initramfs 或 Ubuntu 服务器启动过程如何组装 RAID 阵列?

简单的问题:initramfs 如何知道如何在启动时组装 mdadm RAID 阵列?

我的问题:我启动服务器并得到:

Gave up waiting for root device.
ALERT! /dev/disk/by-uuid/[UUID] does not exist. Dropping to a shell!

发生这种情况是因为 /dev/md0(即 /boot,RAID 1)和 /dev/md1(即 /,RAID 5)未正确组装。我得到的结果是 /dev/md0 根本没有组装。/dev/md1 已组装,但它没有使用 /dev/sda2、/dev/sdb2、/dev/sdc2 和 /dev/sdd2,而是使用了 /dev/sda、/dev/sdb、/dev/sdc、/dev/sdd。

为了修复这个问题并启动我的服务器我执行以下操作:

$(initramfs) mdadm --stop /dev/md1
$(initramfs) mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
$(initramfs) mdadm --assemble /dev/md1 /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
$(initramfs) exit

它可以正常启动,一切正常。现在我只需要在启动时正确组装 RAID 阵列,这样我就不必手动组装它们了。我检查了 /etc/mdadm/mdadm.conf,该文件中列出的两个阵列的 UUID 与 中的 UUID 相匹配$ mdadm --detail /dev/md[0,1]

其他详细信息:Ubuntu 10.10,GRUB2,mdadm 2.6.7.1

更新:我感觉它与超级块有关。$ mdadm --examine /dev/sda输出与 相同的内容$ mdadm --examine /dev/sda2$ mdadm --examine /dev/sda1似乎没问题,因为它输出有关 的信息/dev/md0。我不知道这是否是问题,但它似乎适合用而不是/dev/md1进行组装。/dev/sd[abcd]/dev/sd[abcd]2

我尝试将超级块归零/dev/sd[abcd]。这也会移除超级块,使我完全/dev/sd[abcd]2无法组装。我不得不把它拿回来。这也使超级块恢复原状。/dev/md1$ mdadm --create

答案1

好吧,查看用于组装 initramfs 的脚本,我认为问题可能只是您的 /etc/mdadm/mdadm.conf 已过时。

当您的系统完成阵列组装后,请执行以下命令来更新您的 mdadm 配置。您可能还需要仔细检查一下,以防万一。

mdadm --detail --scan > /etc/mdadm/mdadm.conf

完成后,使用以下命令更新你的 initramfs:

update-initramfs

如果此操作持续失败,则您的超级块(用于组装阵列的元数据)可能已损坏。您可能需要检查每个驱动器及其分区以进行验证。最糟糕的情况是,通过 mdadm 将超级块清零并重新创建。

答案2

听起来你的 initramfs 是在你的 RAID 设置错误(或者与现在不同)时创建的,并且从那时起就没有更新过。

您可以运行update-initramfs(通常在内核更新后运行),希望这将重建您的 initramfs 文件,包括构建正确的 raid 配置文件。

答案3

这是我想出的一个解决方法:

将此脚本添加到/etc/initramfs-tools/scripts/local-top

 #!/bin/sh
 sleep 6
 mdadm --stop /dev/md1
 mdadm --stop /dev/md0
 sleep 6
 mdadm --assemble --scan

这会在系统尝试安装之前修复 RAID 阵列md1/root我必须添加暂停才能使命令始终正常工作。

这实际上并不能解决问题,但这是我发现的最佳解决方案,不需要更改 RAID 阵列或升级软件。

答案4

回答这个问题:是的,它确实与超级块有关。技术文档在这里:https://raid.wiki.kernel.org/index.php/RAID_superblock_formats

相关内容