使用 Ubuntu 工具或 LiveUSB 设置 GRUB 2 来启动 FreeBSD 来查找哪些分区?

使用 Ubuntu 工具或 LiveUSB 设置 GRUB 2 来启动 FreeBSD 来查找哪些分区?

我的计算机上目前安装了 Windows 7 和 Ubuntu 11.04 (Natty)。我还制作了一个 FreeBSD liveUSB(或安装程序,不确定;只是dd将其 .img 编辑到 USB 记忆棒)并在没有安装引导加载程序的情况下安装了它(因为我不想弄乱 GRUB 2,而且我认为 GRUB 2 应该是能够启动大多数东西)。 FreeBSD 有它自己的分区,并且内部有由安装程序自动分配的 FreeBSD 分区(也许它们被称为切片?)。我已经尝试运行update-grub——它说这是一个未知的Linux,并且没有为其添加条目。

那么,两个问题:

  1. 如何使用 Ubuntu 工具或我拥有的 USB 安装棒找到要告诉 Grub 的分区?
  2. 一旦找到分区,我会放入什么/etc/grub.d/40_custom

答案1

您有三种选择:您可以让 Grub 将 FreeBSD 视为某些未知操作系统并链加载 FreeBSD 的第 1 阶段引导加载程序,或者您可以让 Grub 加载 FreeBSD 的第 2 阶段引导加载程序,或者您可以让 Grub 加载 FreeBSD 内核。

链式装载

这是最简单、最可靠的方法。您所需要的只是将 FreeBSD 引导加载程序安装在其自己的片上(*BSD 所谓的片就是 Linux 和 Windows 所说的分区)。然后,/etc/grub.d/30_os-prober当您运行时,Grub 应该会自动(通过)找到它update-grub。中的条目/boot/grub/grub.cfg如下所示(如果 FreeBSD 位于/dev/sda2aka上/dev/wd0s2):

menuentry "FreeBSD" {
    set root=(hd0,2)
    chainloader +1
}

加载 FreeBSD 引导加载程序或内核

GRUB2目前支持所有主要的 BSD 内核(假设您的计算机从 BIOS 启动)。安装脚本没有(至少是 Ubuntu 10.04 附带的脚本,我没有检查 11.04),所以如果您选择此路线,您必须通过/etc/grub.d/40_Custom.

以下是示例条目来自 FreeBSD 论坛上的 David Marec。我还没有测试过它们,但它们看起来似乎合理。最好的方法似乎是加载 FreeBSD stage 2 引导加载程序。您可以将 FreeBSD 安装的位置指定为磁盘号、片号和分区a

menuentry "FreeBSD (/boot/loader)" {
    insmod ufs2
    set root=(hd0,1,a)
    kfreebsd /boot/loader
}

或通过寻找具有特定 UUID、文件或标签的文件系统:

menuentry "FreeBSD (/boot/loader)" {
    insmod ufs2
    search --no-floppy --file /boot/loader
    kfreebsd /boot/loader
}

答案2

搜索具有特定 UUID、文件或标签的文件系统:

menuentry "FreeBSD (/boot/loader)" {
    insmod ufs2
    search --no-floppy --file --set=root /boot/loader
    kfreebsd /boot/loader
}

或者:

menuentry "FreeBSD (/boot/loader)" {
    insmod ufs2
    search --no-floppy --file /boot/loader --set=root /boot/loader
    kfreebsd /boot/loader
}

答案3

你考虑过跑步吗update-grub?这将自动为您更新 GRUB 系统及其项目列表。

相关内容