Linux 软件 RAID1:如何在(物理)删除 /dev/sda 后启动?(LVM、mdadm、Grub2)

Linux 软件 RAID1:如何在(物理)删除 /dev/sda 后启动?(LVM、mdadm、Grub2)

使用 Debian 6.0/squeeze 设置的服务器。在 squeeze 安装期间,我将两个 500GB SATA 磁盘(/dev/sda 和 /dev/sdb)配置为 RAID1(使用 mdadm 管理)。RAID 保留一个 500GB LVM 卷组 (vg0)。在卷组中,有一个逻辑卷 (lv0)。vg0-lv0 使用 extfs3 格式化并安装为根分区(没有专用的 /boot 分区)。系统使用 GRUB2 启动。

在正常使用情况下,系统启动正常。

另外,当我在关机后尝试移除第二个 SATA 驱动器(/dev/sdb)时,系统启动没有问题,重新连接驱动器后,我能够将 /dev/sdb1 重新添加到 RAID 阵列。

但:移除第一个 SATA 驱动器 (/dev/sda) 后,系统将无法再启动!GRUB 欢迎消息显示一秒钟,然后系统重新启动。

我尝试在 /dev/sdb 上手动安装 GRUB2(“grub-install /dev/sdb”),但这没有帮助。

显然,当第一个磁盘被移除时,squeeze 无法设置 GRUB2 从第二个磁盘启动,这在运行这种软件 RAID1 时似乎是一个相当重要的功能,不是吗?

目前,我不知道这是 GRUB2 的问题、LVM 的问题还是 RAID 设置的问题。有什么提示吗?

答案1

您需要将 GRUB 安装到两个驱动器的 MBR,并且需要以 GRUB 将每个磁盘视为系统中的第一个磁盘的方式执行此操作。

GRUB 使用自己的磁盘枚举,这是从 Linux 内核提供的内容中抽象出来的。您可以使用 grub shell 中的“设备”行来更改它认为是第一个磁盘(hd0)的设备,如下所示:

device (hd0) /dev/sdb

这告诉 grub,对于所有后续命令,将 /dev/sdb 视为磁盘 hd0。从这里您可以手动完成安装:

device (hd0) /dev/sdb
root (hd0,0)
setup (hd0)

这将在磁盘的第一个分区(它视为 hd0,您刚刚将其设置为 /dev/sdb)上设置 GRUB。

为了确保万无一失,我对 /dev/sda 和 /dev/sdb 都执行了相同的操作。

编辑后添加:我总是发现Gentoo 维基很方便,直到我经常这样做才能记住它。

答案2

您是否考虑过安装第三个驱动器作为启动驱动器?我也遇到过 raid 1 lvm 设置(在 CentOS 上)无法启动第二个驱动器的问题。我认为问题源于 grub 无法处理本机 lvm 分区,尽管我并不完全确定。

无论如何,这就是我的答案:安装第三个小型驱动器,仅用于启动系统。哎呀,我敢打赌,你甚至可以聪明地使用某种小型闪存或固态硬盘设备来做到这一点。

答案3

当被告知安装到 MD 设备时,Grub 应该能够识别 RAID1 设置并安装到所有从属磁盘。

答案4

确实应该可以工作。这似乎是grub-installGRUB 1.99 和 2.02 的工作原理。

无论 sda+sdb RAID1 以何种方式保存您的启动分区,核心都可能通过 UUID 引用。检查我的链接问题看看是否是。换句话说,如果grub-install --debug显示类似“--prefix=(md0)/boot/grub/如果首先找到另一个 RAID 阵列,则可能会出现问题”的内容,这可能会给出提示grub rescue>,而不是此处观察到的崩溃。如果它使用--prefix=(mduuid/,它应该会找到它。

因此grub-install /dev/sda; grub-install /dev/sdb,如果您移除其中一个驱动器,则无关紧要:只要 BIOS 可以从其中一个驱动器加载 MBR,它就会通过搜索找到 RAID UUID 和 LV。但是,MBR 不是镜像的。因此,请依次将安装程序指向所有组件。

所有这些都只是理论上的......


我对这个古老问题的兴趣在于Welcome to GRUB!横幅显示然后服务器重新启动,因为我有类似症状,可能是因为 BIOS 无法读取 4K/扇区驱动器。我不知道提问者是否找到解决方案。

这里的逻辑是,欢迎消息在 kernel.img 中,因此至少部分核心必须正在加载。然而根据(可能已过时的)手册,第二次扇区读取使用阻止列表将映像的其余部分加载到内存中。如果阻止列表损坏(或者由于扇区大小或其他原因导致 LBA 偏移计算错误),则可能会发生崩溃、重启或挂起。

相关内容