如何在Ubuntu启动时组装md设备? /etc/mdadm/mdadm.conf真的是这里的相关因素吗?
我的mdadm.conf声音很好,我在救援CD环境中检查过.运行mdadm -A –scan时,它会根据需要查找并分配设备名称. mdadm.conf包含AUTO -all以从组装数组中取出所有自动操作.
我需要做的是能够在启动时自动组装mdadm.conf中概述的md设备,或者在组装它时尊重0.9数组的超小值和名称(显然< hostname>:对于1.2阵列,< super-minor>)并且在没有mdadm.conf的情况下做正确的事情.我错过了什么拼图?
我有以下问题.有两个带有RAID1(md0和md1)的md设备和一个带有RAID6(md2)的设备.我指的是所需的设备名称. md0的元数据版本为0.9,另外两个版本为1.2. md0映射到/,其他两个与引导无关.
启动驱动器是GPT分区的.它上面有一个胶水“BIOS Boot Partition”(sda1). grub-install –no-floppy / dev / sda报告成功.
> md0 == sda3 sdb3
> md1 == sda2 sdb2
> md2 == sdc sdd sde sdf sdg sdh
> sda1和sdb1分别是“BIOS Boot Partition”
GRUB2对我给它的/ boot / grub / devicemap很满意,我将part_gpt,raid,mdraid09和ext2添加到模块中以在GRUB2中预加载.
由于我仍然在救援环境中拥有自己的根音量,所以我只需安装所有内容然后将其插入其中:
mkdir /target
mount /dev/md0 /target
mount -o bind /dev /target/dev
mount -o bind /dev/pts /target/dev/pts
mount -o bind /sys /target/sys
mount -o bind /proc /target/proc
chroot /target /bin/bash
从那里我重置了md0上的超级小调(带有元数据0.9)和md1和md2上的名字.我还验证了它使用mdadm –detail ….
除了调整/ etc / default / grub,运行update-grub和grub-install –no-floppy / dev / sda和grub-install –no-floppy / dev / sdb.
之后,在启动时,我总是被放入initramfs rescue shell中,因为无法挂载根文件系统.检查/ proc / mdstat之后的原因似乎是相应的md设备甚至没有组装和运行.更不用说其他两个(元数据版本1.2)驱动器在125..127范围内的某处接收设备号.
注意:GRUB2来自启动盘.所以至少它已被正确嵌入.问题是从初始rootfs到正确的根文件系统的过渡.
解决方法:
基本启动过程
蛴螬
> Grub从MBR读取其磁盘,md,文件系统等代码.
> Grub找到它的/ boot分区,并从中读取其余部分.包括配置,以及配置指定的任何模块都需要加载.
> Grub遵循配置中的指令,通常告诉它将内核和initramfs加载到内存中,然后执行内核.
有一种后备模式,因为当Grub实际上无法读取文件系统时 – 或者因为没有足够的空间将所有代码嵌入到引导记录中,或者因为它不知道文件系统或其下的层.在这种情况下,GRUB嵌入一个扇区列表,并从中读取代码.这不太稳健,最好避免.甚至可以像这样做内核和initramfs(不确定).
核心
然后内核获得控制权,并执行许多基本硬件初始化.这个阶段相当快.接下来,内核将initramfs解压缩到tmpfs,并在该tmpfs上查找/ init.然后它执行(在正常意义上,内核正在此时运行)/ init.顺便说一句,这是一个普通的旧shell脚本.
initramfs的
您可以通过执行类似mkdir / tmp / foo的操作来手动提取initramfs; cd / tmp / foo; zcat /boot/initrd.img-3.8-trunk-amd64 | cpio -idmv.
initramfs负责加载所有驱动程序,启动udev,并查找根文件系统.这是失败的步骤 – 它无法找到根文件系统,因此它将失败.
一旦initramfs完成,它就会挂载根文件系统,并将控制交给/ sbin / init.
系统启动
此时,你的init接管了 – 我认为Ubuntu目前正在使用upstart.
什么是破碎的
我不完全确定什么是坏的(部分,我承认,因为我对它在Debian上的工作方式比Ubuntu更熟悉,虽然它类似),但我有几个建议:
> initramfs有自己的mdadm.conf副本.您可能只需要运行update-initramfs -u来修复它.
>查看启动消息.可能有错误.摆脱’安静’和’飞溅’,并可能在你的内核行添加’verbose’来实际看到它们.
>根据使用的存储,您可能需要设置rootdelay参数.
>当你被转储到shell提示符时,你没有很多命令,但你确实有mdadm.试着弄清楚出了什么问题.如果您解决了问题,可以继续启动.