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

简单的问题是:initramfs在启动时如何知道如何assemblymdadm RAIDarrays?

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

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 / sd2,/ dev / sdc2,/ dev / sdd2,/ 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 

它正确启动,一切正常。 现在我只需要RAIDarrays在启动时正确组装,所以我不必手动组装它们。 我已经检查了/etc/mdadm/mdadm.conf,并且该文件中列出的两个数组的UUID与$ mdadm --detail /dev/md[0,1]中的UUID匹配。

其他细节:Ubuntu 10.10,GRUB2,mdadm 2.6.7.1

更新:我有一种感觉,它与超级块有关。 $ mdadm --examine /dev/sda输出与$ mdadm --examine /dev/sda2相同的东西$ 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恢复。 这也使超级块回到了原来的样子。

看看用来组装initramfs的脚本,我想这个问题可能只是你的/etc/mdadm/mdadm.conf已经过时了。

当您的系统与arrays组装在一起时,执行以下命令来更新您的mdadmconfiguration。 以防万一,您可能需要仔细检查。

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

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

 update-initramfs 

如果这一直失败,那么你的超级块(用于组装数组的元数据)可能被拍摄。 您可能需要检查每个驱动器及其分区以进行validation。 更糟糕的情况是,通过mdadm清零超级块并重新创build。

这听起来像你的initramfs创build时,你的RAID设置是错误的(或只是与现在不同),并没有被更新。

你可以运行update-initramfs (通常在内核更新后运行),并希望这会重build你的initramfs文件,包括build立在正确的raidconfiguration文件中。

以下是我提出的解决方法:

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

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

这会在系统尝试将md1挂载到/root之前修复RAIDarrays。 为了使命令一致地工作,我不得不添加暂停。

这实际上并没有解决问题,但这是我发现的最好的解决scheme,不需要更改RAIDarrays或升级软件。

我有同样的问题,并find这个链接,解释了为什么会发生: https : //bugs.launchpad.net/ubuntu/+source/debian-installer/+bug/599515似乎你的sda2分区一路走到并覆盖磁盘超级块,以便sda和sda2与mdadm是相同的,并且最终组装md1而不是sda2

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

/ dev / sd [abcd] 2是否在分区表中设置为“fd”(RAID自动检测)? 运行fdisk -l | less fdisk -l | less去看分区表。 这听起来像initrd没有检测到分区,但然后在原始设备上看到超级块。 或者可能是在initrd上有一个不正确的mdadm.conf,但我认为update-initramfs可以解决这个问题。

你可以通过创build一个目录来提取initrd, cd进入它,然后运行:

 gunzip </path/to/initrd | cpio -ivd 

然后你可以看到组成initrd的所有文件以及它正在运行的任何脚本。 调查这些可能有助于追查究竟是什么造成的。

但首先检查分区表…

在Debian Lenny框中,RAID + LVM也有类似的问题。 在退出initramfs shell之前,请执行以下操作:

 $(initramfs) vgchange MyLvmVol -ay $(initramfs) exit 

然后

 update-initramfs -u