我的计算机上目前安装了 Windows 7 和 Ubuntu 11.04 (Natty)。我还制作了一个 FreeBSD liveUSB(或安装程序,不确定;只是dd
将其 .img 编辑到 USB 记忆棒)并在没有安装引导加载程序的情况下安装了它(因为我不想弄乱 GRUB 2,而且我认为 GRUB 2 应该是能够启动大多数东西)。 FreeBSD 有它自己的分区,并且内部有由安装程序自动分配的 FreeBSD 分区(也许它们被称为切片?)。我已经尝试运行update-grub
——它说这是一个未知的Linux,并且没有为其添加条目。
那么,两个问题:
- 如何使用 Ubuntu 工具或我拥有的 USB 安装棒找到要告诉 Grub 的分区?
- 一旦找到分区,我会放入什么
/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/sda2
aka上/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 系统及其项目列表。