简单的问题是: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