如何从软件 raid 1 阵列启动 Linux

如何从软件 raid 1 阵列启动 Linux

我正在尝试在现有的 Linux Ubuntu 安装上创建一个 raid 阵列。

我正在按照本教程... http://howtoforge.org/software-raid1-grub-boot-fedora-8

在看了无数遍清单后,我终于明白了发生了什么。你制作 raid 设备,在新的空白驱动器上,将旧的 / 驱动器复制到其中,设置 grub menu.lst、fstab、mtab initrd 和 grub MBR 以使其全部指向 raid 设备(我已经定义并且正在运行),然后重新启动。启动后,你现在在 raid 设备 (/dev/md0) 中运行。然后,你只需将原始驱动器连接到 raid 阵列,它就会同步,然后你就大功告成了。

因此,我将 menu.lst 设置为主要从 raid 设备加载内核和 initrd,并故障转移到我原来的(仍然完好无损的)旧磁盘。而且它总是在我重新启动时故障转移。我启动机器,运行我的新 grub 条目,它显示“错误 15 文件未找到”。网上有很多关于它的内容,但似乎没有一个有帮助。

唯一奇怪的是,当我使用 grub 设置 MBR 时,会显示“root (hd0,0)”,我终于明白它的意思了,它应该显示文件系统类型为 ext2fs,分区类型为 0xfd 或类似内容。我的系统什么都没显示。但是当我运行 setup (hd0) 和 setup (hd2) 时,它显示它正在对正确的驱动器执行正确的操作。所以我认为它正在工作。但它无法从 md0 设备加载 initrd/内核。

我唯一在想的是,grub 究竟是如何知道什么是 raid 设备的。内核尚未加载,软件 raid 模块尚未加载,愚蠢的小 grub 怎么会知道从哪里加载 initrd?所以我在想,好吧,从 /dev/md0 到 /dev/sdc1(新 raid 驱动器)存在映射,但我不知道这可能发生在哪里。为了好玩,(我以各种组合多次这样做)我尝试设置 grub menu.lst 以尝试从 root=/dev/sdc1(我的新驱动器)加载 initrd 和内核,但它仍然说文件未找到。所以要么是 grub mbr 设置不起作用,要么是我遗漏了一些非常简单的东西。

有任何想法吗?

这里还有更多信息...

root@io:~# cat /proc/mdstat
个性:[线性] [多路径] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 :活动 raid1 sdc1[1]
      18771840 块 [2/1] [_U]



root@io:~# fdisk -l

磁盘 /dev/sda:20.8 GB,20847697920 字节
255 个磁头、63 个扇区/磁道、2534 个磁柱
单位 = 16065 * 512 = 8225280 字节的柱面
磁盘标识符:0x9d949d94

   设备启动开始结束块ID系统
/dev/sda1 * 1 2337 18771921 83 Linux
/dev/sda2 2338 2434 779152+ 5 扩展
/dev/sda5 2338 2434 779121 82 Linux 交换 / Solaris

磁盘 /dev/sdb:320.0 GB,320072933376 字节
16 个磁头、63 个扇区/磁道、620181 个磁柱
单位 = 1008 * 512 = 516096 字节的柱面
磁盘标识符:0x00000000

   设备启动开始结束块ID系统
/dev/sdb1 * 1 4064 2048224+ 83 Linux
/dev/sdb2 4065 620181 310522968 83 Linux

磁盘 /dev/sdc: 20.0 GB, 20020396032 字节
255 个磁头、63 个扇区/磁道、2434 个磁柱
单位 = 16065 * 512 = 8225280 字节的柱面
磁盘标识符:0x00000080

   设备启动开始结束块ID系统
/dev/sdc1 * 1 2337 18771921 fd Linux raid 自动检测
/dev/sdc2 2338 2434 779152+ 5 扩展
/dev/sdc5 2338 2434 779121 82 Linux 交换 / Solaris

磁盘 /dev/md0:19.2 GB,19222364160 字节
2 个磁头、4 个扇区/磁道、4692960 个磁柱
单位 = 8 * 512 = 4096 字节的柱面
磁盘标识符:0x00000000

磁盘 /dev/md0 不包含有效的分区表



root@io:~# mdadm -E
mdadm:没有要检查的设备



root@io:~# cat /etc/mdadm.conf
数组/dev/md0 级别=raid1 设备数量=2 UUID=5248ed76:cba39cc2:3082255a:649c0d18
root@io:~#



root@io:~# cat /boot/grub/menu.lst

默认 0
# 8/14/09 添加此内容
后备 1

## 超时秒
# 设置在自动启动默认条目之前的超时时间(以 SEC 秒为单位)
#(通常是定义的第一个条目)。
超时 3

## 隐藏菜单
# 默认隐藏菜单(按 ESC 键可查看菜单)
隱藏菜單

# 于 2009 年 8 月 14 日为 raid 启动添加了此项,请注意,此项将在下次内核更新时取消
# 如果是在魔术标记之后
# 这意味着当内核升级时我们必须手动更新它 :-(
# 在 grub land 中 hd0 = /dev/sda 和 hd1 = /dev/sdb 和 hd2 = /dev/sdc 我希望
# 我们目前将 sdc 放在首位
标题 Ubuntu 8.04.3 LTS,内核 2.6.24-24-generic (raid)
根 (hd2,0)
#内核/boot/vmlinuz-2.6.24-24-generic root=UUID=b11d6b08-fdfe-4b0d-adec-4e263455be23 ro
内核/boot/vmlinuz-2.6.24-24-generic root=/dev/md0 ro
initrd /boot/initrd.img-2.6.24-24-generic
安静的




标题 Ubuntu 8.04.3 LTS,内核 2.6.24-24-generic
根 (hd0,0)
内核/boot/vmlinuz-2.6.24-24-generic root=UUID=d8c402cc-7445-4878-b3aa-c9568b740b51 ro
initrd /boot/initrd.img-2.6.24-24-generic
安静的


标题 Ubuntu 8.04.3 LTS,内核 2.6.24-24-generic(恢复模式)
根 (hd0,0)
内核/boot/vmlinuz-2.6.24-24-generic root=UUID=d8c402cc-7445-4878-b3aa-c9568b740b51 ro单个
initrd /boot/initrd.img-2.6.24-24-generic



root@io:~# blkid
/dev/sda1:UUID="d8c402cc-7445-4878-b3aa-c9568b740b51" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda5:TYPE="swap" UUID="e0509276-30eb-4dcb-8e17-20f8244f5403"
/dev/sdb1:LABEL="alt" UUID="ea1789eb-9d6f-47a9-a074-18121792b30a" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdb2:LABEL="sp" UUID="3b6d1173-f9fd-4a3e-8e5d-249fc682355b" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdc1:UUID=“76ed4852-c29c-a3cb-5a25-8230180d9c64”类型=“mdraid”
/dev/md0:UUID="b11d6b08-fdfe-4b0d-adec-4e263455be23" SEC_TYPE="ext2" TYPE="ext3"


答案1

对于其他任何最终遭受我所遭受的错误 15 痛苦的人来说,事实证明 grub 中的设备命名方案 (hd0、hd1、hd2...) 在 grub 启动时和系统启动并运行后 grub 运行时最终有所不同。我花了一个星期使用 root (hd2,0),因为 grub 告诉我我想要的驱动器就是这个名字。但是当我在启动时进入 grub shell 时,我惊讶地发现机器启动时是 hd2,启动时是 hd1。所以我将 menu.lst 更改为使用 root (hd1,0),它开始工作了。我希望用这个可以省去别人很多麻烦。

答案2

Grub 的特点是它被调用linux 系统的其余部分(显然)是这样的,所以它对你的软件 raid 一无所知。它只能看到裸硬盘。

因此,在 RAID1 阵列的两个驱动器上安装 grub 非常重要。BIOS 将选择一个驱动器进行启动,如果该驱动器上未安装 grub,则无法启动。(当我的 sw RAID1 配置中的一个驱动器发生故障时,我发现了这个问题 - 系统拒绝启动,说它没有启动分区。安装了 grub 的驱动器发生故障,我得到的是无法启动的 HDD。在其上安装 Grub 解决了这个问题)

因此在提示符下打开 grub(您可以在运行 Linux 时执行此操作)并输入:

grub

获得 grub 提示符。

root(hd0,0)
setup(hd0)

root(hd1,0)
setup(hd1)

将 grub 设置为驱动器上的第一个分区(*** 如果您的启动分区位于驱动器的其他位置,请将 0 更改为正确的分区),然后安装程序将安装 grub 启动文件。

这应该是您需要做的一切。如果它不能正常工作,您确定您有正确的启动分区,并且您的驱动器布局相同吗?

答案3

蛴螬没有了解您的 RAID 设备;它只是直接从驱动器读取,这(在 RAID-1 设置中)仍然没问题,因为驱动器的整个副本就在那里(而不是像在 RAID-5 或 RAID-10 配置中那样被切成位)。

但你并没有提供足够的信息来确定到底发生了什么;有用的信息是:

  • 所有驱动器的分区表;
  • RAID 配置详细信息(/proc/mdstat、mdadm -E 等的输出)

相关内容