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

Bra*_*rad 6 ubuntu mdadm initramfs

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

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

Gave up waiting for root device.
ALERT! /dev/disk/by-uuid/[UUID] does not exist. Dropping to a shell!
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为 /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、/开发/ SD。

要解决此问题并启动我的服务器,我会执行以下操作:

$(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
Run Code Online (Sandbox Code Playgroud)

它可以正常启动并且一切正常。现在我只需要 RAID 阵列在启动时正确组装,所以我不必手动组装它们。我检查了 /etc/mdadm/mdadm.conf 并且该文件中列出的两个数组的 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把它拿回来。这也使超级块恢复原状。

jon*_*ini 10

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

当您的系统与阵列组合在一起时,执行以下命令来更新您的 mdadm 配置。您可能还想仔细检查一下以防万一。

mdadm --detail --scan > /etc/mdadm/mdadm.conf
Run Code Online (Sandbox Code Playgroud)

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

update-initramfs
Run Code Online (Sandbox Code Playgroud)

如果这始终失败,那么您的超级块(用于组装阵列的元数据)可能会被击中。您可能需要检查每个驱动器及其分区以进行验证。更糟糕的情况是,通过 mdadm 将超级块清零并重新创建。


Dav*_*ett 1

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

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