问题描述
我目前在计算机上安装了Windows 7和Ubuntu 11.04(Natty)。我还制作了一个FreeBSD liveUSB(或安装程序,不确定;只是dd
将其.img放到USB memory 棒中),并在没有安装引导程序的情况下安装了它(因为我不想弄乱GRUB 2,我认为GRUB 2应该能够启动大多数东西)。 FreeBSD拥有自己的分区,并且在内部具有由安装程序自动分配的FreeBSD分区(也许称为分片?)。我已经尝试运行update-grub
-它说这是一个未知的Linux,并且没有为其添加条目。
因此,有两个问题:
-
如何找到使用我拥有的Ubuntu工具或USB安装棒告诉Grub的分区?
-
找到分区后,我将在
/etc/grub.d/40_custom
中放入什么?
最佳办法
您有三种选择:您可以让Grub将FreeBSD当作某些未知的操作系统,并连锁加载FreeBSD的Stage 1引导程序,或者您可以让Grub加载FreeBSD的Stage 2引导程序,或者可以让Grub加载FreeBSD内核。
Chainloading
这是最简单,最可靠的方法。您所需要做的就是在自己的片上安装FreeBSD引导程序(* BSD称为片就是Linux和Windows称为分区)。然后,当您运行update-grub
时,Grub应该自动找到它(通过/etc/grub.d/30_os-prober
)。 /boot/grub/grub.cfg
中的条目如下所示(如果FreeBSD位于/dev/sda2
上,即/dev/wd0s2
):
menuentry "FreeBSD" {
set root=(hd0,2)
chainloader +1
}
加载FreeBSD引导程序或内核
Grub2 currently supports所有主要的BSD内核(假设您的计算机从BIOS引导)。安装脚本没有(至少是Ubuntu 10.04附带的安装脚本,我没有检查11.04),因此,如果选择此路由,则必须通过/etc/grub.d/40_Custom
添加自己的条目。
这是样本条目from David Marec on the FreeBSD forums。我还没有测试过它们,但是它们看起来很合理。最好的方法似乎是加载FreeBSD Stage 2引导程序。您可以将FreeBSD安装的位置指定为磁盘号,片号和分区a
:
menuentry "FreeBSD (/boot/loader)" {
insmod ufs2
set root=(hd0,1,a)
kfreebsd /boot/loader
}
或通过searching具有特定UUID,文件或标签的文件系统:
menuentry "FreeBSD (/boot/loader)" {
insmod ufs2
search --no-floppy --file /boot/loader
kfreebsd /boot/loader
}