LVM 上的 Grub2:如何在备用根 LV 之间切换?

LVM 上的 Grub2:如何在备用根 LV 之间切换?

我在 LVM 卷 (/dev/vg0/root) 上安装了 Ubuntu Server 12.04 LTS (precise) 的工作设置。/boot 位于同一个 LV 上,Grub2 可以使用其自己的 raid/lvm/xfs 模块顺利从中启动。太棒了!

现在我想测试 Ubuntu Server 14.04 LTS (trusty),以评估较新的软件包是否能改善我的设置。所以我所做的就是创建另一个 LV,比如 /dev/vg0/root-trusty,然后像我通常使用 debootstrap 和 chroot 进行裸机设置时一样准备它,安装内核、grub-pc 等。

现在我的 LVM 上有两个完整的根文件系统,包括两个 /boot 目录和两个不同的 /boot/grub/grub.cfg 文件。请帮我想想:Grub 现在如何知道要使用哪个 grub.cfg?

对我来说唯一有意义的方法是grub-install保存有关运行 grub-install 的系统认为哪个是正确的根文件系统的信息。因此,可以通过grub-install从相应的(chrooted)文件系统发出命令然后重新启动来在两个根 LV 之间切换以进行引导。

是吗?如果不是,那么当 Grub2 “找到”多个可用于第二阶段引导的文件系统时,它还会做什么?到目前为止,我似乎找不到任何关于此问题的确凿信息。所以,我想在晚上花几个小时反复试验之前先问一下。

谢谢您对此的任何阐释!

PS:为了清楚起见 - 我指的不是在单独的 /boot 分区上使用单个 grub.cfg 中的多个操作系统条目进行典型的双启动。我知道这一点,但在这里我想在单独的分区上使用并发 Grub2 安装。

答案1

如果您正在查看 grub2 配置(用于bootinfoscript快速摘要),您会注意到启动过程的第一步是查看 MBR,并找到一个入口点,从该入口点加载访问 PC BIOS 从未想过的所有神秘文件系统所需的代码。

如果你缺乏bootinfoscript,您可能想要获取它...

sudo apt-get install boot-info-script cl-awk 

示例输出:

============================= Boot Info Summary: ===============================

 => Grub2 (v1.99) is installed in the MBR of /dev/sda and looks at sector 1 of 
    the same hard drive for core.img. core.img is at this location and looks 
    for (tetrad-12.04)/boot/grub on this drive.
 [detailled per-partition output omitted]

德国维基上有一篇很好的文章描述了如何分析 grub 配置

对于新安装的第二启动分区的首次测试,我建议保持 MBR 不变(您确实进行了备份,以防安装失败,不是吗?),安装后启动到旧的 12.04 分区,运行update-grub以将 14.04 分区上的全新安装包含到菜单中,检查 /boot/grub/grub.cfg(14.04 的条目应该指向正确的分区,而不是 12.04 分区,并且可能nomdmonddf nomdmonisw在您仍在并行使用 12.04 时使用。

如果您能够使用此配置重新启动到 14.04,那么您可以继续grub-install从 14.04 分区运行,让它启动到 14.04,而无需绕道 12.04。

两个根分区都会在更新 grub 期间检测到另一个根分区,并且都能够通过生成的菜单启动到另一个分区,但 grub-install 决定哪个分区为 /boot/grub/grub.cnf 提供服务。

PS:我刚好设置了这样的环境,以便安全地试验从 12.04 到 14.04 的版本升级。(10.04、12.04 和 14.04 各一个 lv)

答案2

我不知道你是否可以,因为即使你将 grub 安装到不同的硬盘上,我认为它仍然需要用 MBR 指向。不过你可以尝试将 grub A 安装到 sda,将 grub B 安装到 sdb,然后每次在 bios 中选择从哪个启动。

答案3

每张光盘只有一个 MBR。MBR 将启动最近写入该 MBR 的 grub。

MBR 通过 UUID 找到它要查找的文件系统。最近的 grub 完全支持 LVM。是的,您可以通过从其他操作系统运行 grub-install 来切换,即使已 chrooted。

我相信这完全回答了你的问题。正如你所说,你可以利用添加到 boot/grub/grub.cfg 的额外条目来启动你拥有的其他操作系统,但是你显然在问题中写出了这一点。

相关内容