Grub2 RAID /启动

Grub2 RAID /启动

我在我的 HomeServer 上使用 Gentoo。我的 HDD 是通过 mdadm 镜像的 raid1。

我的问题是如何正确引导/boot分区?

/dev/md1 consists of /dev/sdc2 & /dev/sdd2 mounted on /boot

在我的系统中,grub.cfg我有 uuid,/dev/md1但在启动时阵列当然还没有准备好。

最简单的方法是取消对 /boot 分区的攻击,但这不是我想要做的。

那么,如何找到raid成员的UUID呢?ls -l /dev/disk/by-uuid只显示 的 uuid /dev/md1。当我取消磁盘阵列时,我无法安装它们来获取它们的 UUIDmount: unknown filesystem type 'linux_raid_member'

那么我怎样才能让Grub2引导这些磁盘,它能够在它们进入raid之前确定内容吗? (它们实际上是 ext2)。

我也许应该补充一点,我使用 gpt 分区表,因此我/dev/sdc1 and /dev/sdd1在两个驱动器上都有一个小分区来托管 bios_grub 分区。那些不是突袭的自动取款机。

正如吉尔斯的回答下面的评论所指出的,我的问题仍然存在。 Grub 找不到该设备,告诉我

error: no such device: 9f81a-(device uuid)-5580.
entering rescue mode...
grub rescue> 

之后我添加了几行

insmod part_msdos
insmod part_gpt
insmod raid
insmod mdraid

到我的 grub.cfg,就在定义 root 的行上方,root='(md0)' 我仍然遇到相同的错误。

我做了一些更多的研究,我真的猜想这是一个与 uuid 相关的错误:

# grub-probe -d --target=fs_uuid /dev/md1
9f81a35d-0813-481f-9ae0-e4fba57c5580
# blkid
/dev/sdc2: UUID="11adb545-0e80-61d1-61f6-565f18e8c3f0" UUID_SUB="88826c5e-d12b-307d-6e54-556d1ebb2458" LABEL="livecd:1" TYPE="linux_raid_member"
/dev/sdd2: UUID="11adb545-0e80-61d1-61f6-565f18e8c3f0" UUID_SUB="15150fb2-5066-edba-d39b-08b63219453c" LABEL="livecd:1" TYPE="linux_raid_member"
/dev/md1: UUID="9f81a35d-0813-481f-9ae0-e4fba57c5580" TYPE="ext2"
(I cut away the other drives here)

正如您所看到的,两个分区具有相同的 UUID,因此我在 grub.cfg 中编辑了驱动器的 UUID 并grub-install /dev/sdx再次执行了操作,但我仍然收到“旧”/dev/md1 UUID 的错误。

答案1

Gentoo 维基有讨论 Grub 1 和 Grub 2 的信息。请注意,Grub 1 和 Grub 2 中的情况完全不同:Grub 1 对 RAID 一无所知,但可以通过读取其中之一来伪造从 RAID-1 设备的读取。磁盘(这需要 0.9 或 1.0 mdraid 超级块格式,而不是 1.1 或 1.2); Grub 2 原生支持 Linux mdraid 卷。

Grub 2 分三个阶段工作(请参见这里更多细节):

  1. 引导扇区。
  2. install-grub由in生成的核心映像/boot/grub/core.img,能够显示救援提示和加载模块,但仅此而已。
  3. 具有可加载模块的完整系统,通常(通过模块normal)显示由 描述的启动菜单 /boot/grub/grub.cfg

生成核心图像

运行grub-install /dev/sda以生成核心映像并填充/boot/grub模块文件。grub-install还在指示的设备上安装引导扇区。如果您想在两个驱动器上都有引导扇区,grub-install /dev/sdc请运行两者。grub-install /dev/sdd

如果grub-install未正确检测到您的驱动器,请创建以下脚本/usr/local/sbin/grub-probe-verbose并运行grub-install --grub-probe=/usr/local/sbin/grub-probe-verbose以查看发生了什么情况。

#!/bin/sh
exec /usr/sbin/grub-probe "$@" | tee /dev/stderr

从您的记录来看bash -x /sbin/grub-install /dev/sdc,似乎grub-probe没有检测/dev/md1为 RAID 阵列(/sbin/grub-probe --device-map=/boot/grub/device.map --target=partmap --device /dev/md1并且/sbin/grub-probe --device-map=/boot/grub/device.map --target=abstraction --device /dev/md1不返回任何内容)。如果问题仅存在于grub-probe引导代码中而不存在于引导代码中,请尝试覆盖其决定:

grub-install --modules='biosdisk ext2 msdos raid mdraid' /dev/sdc

对 mdraid 1.x 超级块的支持仍然是最近才出现的;它不在 Grub 1.98 中,你至少需要集市修订 2550 日期 2010-07-20(该代码位于分支几个月前)。 Debian squeeze 和 Ubuntu 10.10 附带 1.x 超级块支持;我预计 Gentoo 现在已经是 1.99 了。

生成 grub.cfg

运行grub-mkconfig -o /boot/grub/grub.cfg.grub-mkconfig以生成暂定的 Grub 配置文件。检查它,如果看起来正确,则将其重命名为/boot/grub/grub.cfg.

设备图

您可能需要进行调整/boot/grub/device.map才能获得正确的输出grub-mkconfiggrub-mkdevicemap如果该文件不存在,则会自动生成,但具有多个磁盘的设置往往会使其混乱。我希望它包含类似的内容

(md0) /dev/md1
(hd0) /dev/sdc
(hd1) /dev/sdd

其中md0是 Grub 卷名,/dev/md1是 Linux 下的名称。 Grub 需要访问/boot/grub两件事:

  • Grub 的引导扇区在 BIOS 支持的磁盘上的固定位置读取核心映像(它没有太多选择)。对于 PC BIOS,(hd0)是 BIOS 从中读取引导扇区的磁盘(它是包含引导扇区的磁盘),并且(hd1)是其他磁盘(您并不总是可以选择)。如果(hd0)磁盘(或带有 RAID-1 阵列的磁盘)包含/boot/grub.
  • 核心映像从由 确定的文件系统位置(通常是RAID 阵列或 Grub 支持的任何其他卷类型)加载模块grub.cfg和 Linux 内核。grub-install/grub/boot/grub

如果改变device.map,则需要grub-install重新运行。grub-mkconfig如果您不依赖该命令来完成所有操作,则可能需要再次运行search

答案2

要回答有关 UUID 的问题:使用blkid

答案3

直播~#mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdc2 /dev/sdd2

直播~#幼虫

幼虫>根 (hd0,1)

Filesystem type is ext2fs, partition type 0xfd

幼虫>设置(hd0)

Checking if "/boot/grub/stage1" exists... yes  
Checking if "/boot/grub/stage2" exists... yes  Checking if
"/boot/grub/e2fs_stage1_5" exists... yes  Running "embed
/boot/grub/e2fs_stage1_5 (hd0)"...  16 sectors are embedded. succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p
(hd0,0)/boot/grub/stage2 /boot/ grub/menu.lst"... succeeded Done.

相关内容