11

I have Gentoo x64 installed with Grub2 on my MBR drive. Today I installed FreeBSD x64 9.2. Now I'm in Gentoo and trying to add FreeBSD to grub2 menu list.

grub2-install /dev/sda
os-prober
grub2-mkconfig -o /boot/grub2/grub.cfg

I did the above on Gentoo and it didn't find FreeBSD. The FreeBSD nested partition is on sda1 and contains freebsd-ufs and freebsd-swap partitions.

How could I add FreeBSD to grub2?

9

Here is mine:

menuentry "FreeBSD" --class freebsd --class bsd --class os {
 insmod ufs2
 insmod bsd
 set root=(hd0,1)
 kfreebsd /boot/kernel/kernel
 kfreebsd_loadenv /boot/device.hints
 set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s1a
 set kFreeBSD.vfs.root.mountfrom.options=rw
 set kFreeBSD.hw.psm.synaptics_support=1
}
  • 1
    did you generate it with os-prober or you did it yourself. also which file did that directive go in? – r004 Jan 14 '14 at 11:08
  • does the sda1 translate to hd0,1 ? is it true that grub2 start from 1 not 0? – r004 Jan 14 '14 at 11:14
  • 2
    No, this /isn't auto-generated. I've wrote it into /etc/grub.d/40_custom, check this: wiki.archlinux.org/index.php/… – uzsolt Jan 14 '14 at 11:35
  • 1
    Yes, (hd0,1) is sda1. – uzsolt Jan 14 '14 at 11:35
  • the freebsd is in the /dev/sda1 but the sda1 is a partition slice (according to bsd terminology); and it contains a / and swap partition. How should I precede then? – r004 Jan 18 '14 at 21:13
3

My Goal was to: Boot FreeBSD 10 from Grub2 by editing 40_custom in /etc/grub.d

My Setup: FreeBSD10 is on the fifth hdd of my system (/dev/sde under Linux, so hd4 for Grub2. Remember that under Grub2 hd starts from hd0 for drives, and partitions from 1 and on, not zero). The root partition is the second one (/dev/sde2) as I've used FreeBSD's Guided partitioning (use entire disk) while installing (simplest). Recalling, that is: set root='(hd4,2)' for the fifth hdd and the 2nd partition.

info: (chainloader +1 is actually not required ! The following brings me directly to FreeBSDs Bootloader).

To summarize a little: you just got to adapt set root=(x,x), nothing more is needed. If you want to boot the kernel directly, things get a little more complex than the entry below.

menuentry "FreeBSD 10.0" {
    insmod part_gpt
    set root='(hd4,2)'
    kfreebsd /boot/loader
}

I was a bit disappointed by os-prober which just found 'Unknown linux distribution on /dev/sde2'

ps: don't forget 'update-grub' afterwards and Taddaa (hopefully). :) If somebody succeed, throw me a msg, i would be happy to hear from you !

  • good for gpt partition table – r004 Sep 19 '14 at 9:11
  • What is insmod part_gpt ? – noone Dec 7 '17 at 17:16
2

Do it in this order:

  1. Edit your /etc/grub.d/40_custom and add uzsolt's directives. Add the directive at the end of the file. Don't delete anything that is in there.

  2. Make sure 40_custom is executable. If not then chmod u+x 40_custom.

  3. Now do this to write the changes to grub.cfg.

    grub2-install /dev/sda 
    os-prober 
    grub2-mkconfig -o /boot/grub/grub.cfg
    
  4. Tada! Reboot now; you should have FreeBSD in your OS list in GRUB menu.

To have access to your UFS partition slice you should do the following:

  1. Edit your kernel configuration to add UFS filesystem and UFS label.

  2. Then make && make_modules your kernel.

  3. Install the UFS filesystem software.

  4. Mount your UFS Slice under your Linux:

    sudo mkdir /mnt/freebsd && sudo mount -r -t ufs -o ufstype=ufs2 /dev/sda1 /mnt/freebsd
    
1

The Arch Linux wiki has a very nice explanation for the same. It guides the normal way i.e. direct OS loading as well as chainloading.

However, one must not forget to issue sudo grub-mkconfig -o /boot/grub/grub.cfg to commit changes.

1

According to this site:

  1. Boot Linux.
  2. Create a /boot/grub2/custom.cfg file.
  3. Add these lines to the created file:

    menuentry "FreeBSD" {
    set root='(hd0,3)'
    kfreebsd /boot/loader
    }
    

    where hd0,3 means this is the first hard drive and FreeBSD is on its third partition (since disks are numbered from 0 and partitions are numbered from 1). Probably you'll have to adjust those numbers. One way to find out what your disks are is to run fdisk -l.

  4. Run grub2-mkconfig -o /boot/grub2/grub.cfg.

Remember that your commands might be slightly different. grub2-mkconfig might be grub-mkconfig and so on (this was my case on BunsenLabs Linux).


Mind that I was using FreeBSD with UFS instead of ZFS on this machine. The presented solution does not work for ZFS-based installations from what I've heard.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.