![如何在 MBR 中使用 GRUB2 双启动 FreeBSD 和 PC-BSD?](https://linux22.com/image/57290/%E5%A6%82%E4%BD%95%E5%9C%A8%20MBR%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20GRUB2%20%E5%8F%8C%E5%90%AF%E5%8A%A8%20FreeBSD%20%E5%92%8C%20PC-BSD%EF%BC%9F.png)
我的计算机在不同分区上安装了多个操作系统:
- 自由BSD
- PC-BSD
- 索拉里斯
- 扩展分区
- / -Linux-Mint 分区
- 交换 Linux-Mint
- Linux-Mint 的 /home
- / -Linux CentOS 的分区(以及所有内容)
我的主要操作系统是 Linux-Mint,它是 Ubuntu 的衍生版本。
我在 MBR 中安装了 GRUB2,它 (GRUB) 使用 Linux-Mint 安装中的数据(/boot/grub 等)。
FreeBSD 和 PC-BSD 在其分区中都有自己的第二阶段引导加载程序。 Solaris 在其分区中有自己的 GRUB 安装(充当第二阶段引导加载程序,使我能够在不同的 Solaris 内核之间进行选择)。 Linux-Mint 和 CentOS 由 MBR 中的 GRUB 引导。
+++
我的问题是 FreeBSD 和 PC-BSD ——它们只是不能很好地相处!即使我在 GRUB 条目中为两个 BSD 安装指定了不同的根分区等;无论我从 GRUB 菜单中选择 FreeBSD 还是 PC-BSD,都会启动同一个(FreeBSD 或 PC-BSD)。
引导 *BSD 似乎是一个三阶段过程:MBR 加载程序(第一阶段)加载 BSD 分区中的第二阶段,最后加载实际的内核(第三阶段)。
最后,我将自己降格为关于在 *BSD 中启动的 RTFM,我发现了以下关于第二阶段 BSD-bootloader(它已安装在我的两个 BSD 分区中)的花絮:
- 如果分区表中没有 BSD 分区被标记为活动分区(可引导分区),则加载程序将开始加载位于以下位置的 BSD 内核的第三阶段:第一个 BSD 分区在磁盘上——无论第二阶段是从哪个 BSD 分区加载的。就我而言,它会总是加载 FreeBSD(因为它是第一个)。
- 另一方面,如果 BSD 分区被标记为活动(可引导),则这将是作为第三阶段加载的 BSD 内核。就我而言,我要么总是使用 FreeBSD,要么总是使用 PC-BSD。
当然一定有办法解决这个问题吗?也许以某种方式跳过第二阶段,让 GRUB 直接加载第三阶段内核——然后不同的内核取决于我的选择...或者可能是第二阶段的一些特殊参数或配置——或者可能是替代的第二阶段加载器?这里有人遇到过类似的问题并解决了吗?
PS:在MBR中安装GRUB,覆盖了FreeBSD(和PC-BSD)安装的第一阶段引导加载程序。然而,我怀疑使用 FreeBSD 第一阶段是否可以解决我的问题,因为问题是(据我所知)第二阶段加载器。
答案1
首先,我不会使用 MBR,因为你有 4 个操作系统,而且那不会走得太远。您需要将 /boot 分区作为主分区而不是扩展分区。因此,您要么放弃 Solaris 安装,要么放弃 Linux 安装。使用 GRUB2 引导到 FreeBSD(或 PC-BSD...无论如何,没有区别)很容易。你只需定义你的“set root=...”,然后你说“kfreebsd /boot/loader”就可以了。对于您的类型,我会使用 GUID/GPT 分区表,您也可以将所有分区拆分到其中,然后您不需要额外的 BSD 切片。