O grande erro dos sites que ensinam a dar boot no freebsd e openbsd pelo Grub é que eles se preocupam mais onde esses dois sistemas são instalados do que as partições EFI, quando deveria ser o contrário! Esqueça por enquanto em quais partições os nossos sistemas BSD estão instalados, você não precisa disso! Você deve se preocupar sim quais são as partições FAT EFI (aquelas com pastas efi dentro delas), para isso abra com muito cuidado no seu Linux o gnome-disks , ele é um particionador muito poderoso e que pode fazer estragos também. Você pode usar no console o cfdisk ou o fdisk -l
para identificar também.
Bom, se na sua máquina você usa 1 disco apenas , no grub ele será conhecido como hd0, se fosse no segundo disco seria hd1, favor não confundir disco com partições! Os Linux atuais irão chamar o seu HD0 de sda , não se importe, mesmo assim, no grub o nome dele será hd0!
As partições GPT no grub serão conhecidas por gpt mais o número da partição.
Agora precisamo identificar onde o seu sistema BSD criou a mini partição FAT EFI para dar boot dela, no meu caso, o freebsd criou em /dev/sda6 , que traduzindo para o grub seria hd0 partição gpt6 , por favor, não use como os sites burros ensinam colocando root='(hdx,gpt)', isso nunca funciona, use
chainloader usando o hd e a partição e o caminho do arquivo efi( (hd0,gpt6)/EFI/boot/BOOTx64.efi ) como parâmetro dele! Então no final do seu arquivo /boot/grub/grub.cfg você colocará
esse paragrafo para o freebsd ser butado pela partição efi /dev/sda6:
Code: Select all
menuentry "FreeBSD 12 JavaNunes server" {
insmod part_gpt
insmod fat
insmod search_fs_uuid
insmod chain
chainloader (hd0,gpt6)/EFI/boot/BOOTx64.efi
}
e sda6 = (hd0,gpt6)
O importante é apontar para o arquivo BOOTx64.efi que o seu BSD injetou nessa partição, o restante: kernel do freebsd, arquivo de ramdisk e todas essas pataqualhadas em sistemas UEFI e partições GPT não é necessário informar ao grub, o BOOTx64.efi que na verdade é um .exe disfarçado fará isso sozinho numa busca inteligente.
No caso do OpenBSD tem alguns agravantes: o arquivo de boot eu tive que baixar de um site FTP no caso o BSD.BOOTX64.EFI e colocá-lo dentro
da minha partição efi que eu usava pro Linux (sda1) em uma pasta de boot, também tive que baixar estranhamente o kernel dele para por na mesma pasta, baixei usando o wget assim:
Code: Select all
wget http://ftp.ch.openbsd.org/pub/OpenBSD/snapshots/amd64/BOOTX64.EFI
wget http://ftp.ch.openbsd.org/pub/OpenBSD/snapshots/amd64/bsd.rd
Deixando no final do meu /boot/grub/grub.cfg assim:
Code: Select all
menuentry 'OpenBSD 6.6 JavaNunes Server ' {
insmod part_gpt
insmod search_fs_uuid
insmod fat
insmod chain
chainloader (hd0,gpt1)/EFI/boot/BSD.BOOTX64.EFI
}
Sendo sda= hd0
e sda1 = (hd0,gpt1)
Aí é só salvar e dar um reboot no seu Linux, pronto! Os sistemas estarão lá para dar boot!