安装Freebsd的时候应该选择不安装引导,如果安装了引导在MBR中将会出现用Freebsd引导grub2的情况。比较麻烦。安装好Freebsd后用grub2引导双系统。
搞了好久才找到原因,网络上其他的帖子就说加几行命令就可以了。但是死活就是不引导,原来关键在于,必须通过手动方式先挂载Freebsd的根分区到Ubuntu中然后才能让grub2去引导。
一、挂载Freebsd分区
先确定Freebsd各分区的代码:
命令如下: dmesg | grep 'bsd'   (我的freebsd安装在sda5-sda9,根分区是sda5)

然后分别挂载每个分区:   (我只挂载了sda5根分区)
命令如下:  sudo mount -r -t ufs -o ufstype=ufs2 /dev/sda5 /mnt 
如果没有任何错误提示,表示挂载成功了。

二、在grub中写入命令引导Freebsd
修改 /etc/grub.d/40_custom 文件,在最后增加如下文字 

menuentry “FreeBSD” {
      insmod ufs2
      set root=(hd0,4)
      chainloader +1
}

命令如下:sudo gedit /etc/grub.d/40_custom ,在最后添加文字后保存退出。
需要注意的是要确认你的 FreeBSD 安装在哪个主分区,如果是在第二个主分区,那么上面一段的第二行应该写 (hd0,1),如果是第三个主分区写成(hd0.2)
最后还要执行 sudo update-grub2 更新 grub 引导配置文件,重启完成。

附录:以上grub中添加的命令可以引导freebsd,引导后还是会出现freebsd的开机选项菜单(有7项),以下代码可以让grub引导freebsd直接进入系统,而不出现freebsd自己的引导菜单(此段代码源于http://wiki.freebsdchina.org/howto/g/grub2,未经测试)。
menuentry "FreeBSD2" {
     insmod ufs2
     set root=(hd0,4)
     kfreebsd                      /boot/kernel/kernel
     kfreebsd_loadenv     /boot/device.hints
     set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0
     set kFreeBSD.vfs.root.mountfrom.options=rw
}