0xC*_*22L 8 linux ubuntu mdadm initrd grub2
如何md在 Ubuntu 启动时组装设备?是/etc/mdadm/mdadm.conf名副其实的相关因素,在这里?
我mdadm.conf的声音很好,我在救援 CD 环境中检查了这一点。运行时,mdadm -A --scan它会根据需要查找并分配设备名称。该mdadm.conf包含AUTO -all从组装阵列采取了所有自动性。
我需要做的是能够在启动时自动组装md设备,mdadm.conf或者在组装时super-minor按照 0.9 数组的值和1.2 数组的name(显然<hostname>:<super-minor>)值自动组装设备,并且在没有mdadm.conf. 我错过了什么拼图?
我有以下问题。有两种md设备带有 RAID1(md0和md1),一种设备带有 RAID6(md2)。我指的是所需的设备名称。md0元数据版本为 0.9,另外两个版本为 1.2。md0映射到/和其他两个与引导无关。
引导驱动器是 GPT 分区的。上面有一个胶水“BIOS 启动分区”( sda1)。grub-install --no-floppy /dev/sda报告成功。
md0 == sda3 + sdb3md1 == sda2 + sdb2md2 == sdc + sdd + sde + sdf + sdg + sdhsda1并且sdb1每个都是“BIOS引导分区”GRUB2 对/boot/grub/devicemap我给它的东西很满意,我将part_gpt, raid,mdraid09和添加ext2到模块中以在 GRUB2 中预加载。
由于我在救援环境中仍然有我的根卷,我简单地挂载了所有东西,然后chroot输入它:
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
Run Code Online (Sandbox Code Playgroud)
从那里我重置了super-minoron md0(使用元数据 0.9)和nameonmd1和md2. 我还验证它使用mdadm --detail .... 除此之外,我调整/etc/default/grub,运行update-grub,还有grub-install --no-floppy /dev/sda和grub-install --no-floppy /dev/sdb。
之后,在启动时,我总是掉进initramfsrescue shell,但是,因为无法挂载根文件系统。原因,经过检查/proc/mdstat似乎是相应的md设备甚至没有组装和运行。更不用说其他两个(元数据版本 1.2)驱动器接收的设备编号在 125..127 范围内。
注意: GRUB2 从引导盘中出现。所以至少它已经被正确嵌入。问题是从初始rootfs到正确的根文件系统的过渡。
der*_*ert 17
有一种回退模式,当 Grub 无法实际读取文件系统时——要么是因为没有足够的空间将所有代码嵌入引导记录中,要么是因为它不知道文件系统或它下面的层。在这种情况下,GRUB 嵌入了一个扇区列表,并从中读取代码。这是很多不太可靠,并且最好避免。它甚至可以像那样做内核和 initramfs(不确定)。
然后内核取得控制权,并执行许多基本的硬件初始化。这个阶段相当快。接下来,内核将 initramfs 解包到 tmpfs,并/init在该 tmpfs 上查找。然后执行(在正常意义上,此时内核正在满负荷运行)/init。顺便说一下,这是一个普通的旧 shell 脚本。
您可以通过执行类似的操作手动提取 initramfs mkdir /tmp/foo; cd /tmp/foo; zcat /boot/initrd.img-3.8-trunk-amd64 | cpio -idmv。
initramfs 负责加载所有驱动程序、启动 udev 和查找根文件系统。这一步对您来说是失败的——它找不到根文件系统,所以它退出了。
一旦 initramfs 完成,它就会挂载根文件系统,并将控制权移交给 /sbin/init。
在这一点上,你的 init 接管了——我认为 Ubuntu 目前正在使用 upstart。
我不完全确定是什么坏了(我承认,我对它在 Debian 上的工作方式比在 Ubuntu 上更熟悉,尽管它很相似),但我有一些建议:
mdadm.conf. 您可能只需要运行update-initramfs -u即可修复它。