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

Aze*_*ale 5 freebsd ubuntu grub2

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

所以,两个问题:

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

Gil*_*il' 6

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

链式装载

这是最简单、最可靠的方法。您所需要的只是在它自己的切片上安装 FreeBSD 引导加载程序(*BSD 所谓的切片就是 Linux 和 Windows 所谓的分区)。然后/etc/grub.d/30_os-prober当您运行update-grub. 入口/boot/grub/grub.cfg看起来像这样(如果 FreeBSD 在/dev/sda2aka 上/dev/wd0s2):

menuentry "FreeBSD" {
    set root=(hd0,2)
    chainloader +1
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

menuentry "FreeBSD (/boot/loader)" {
    insmod ufs2
    search --no-floppy --file /boot/loader
    kfreebsd /boot/loader
}
Run Code Online (Sandbox Code Playgroud)