Alternar boot Linux-FreeBSD mediante UEFI


La mayor pega de tener varios sistemas operativos instalados simultáneamente es que solo podemos asignar una opción por defecto en el arranque, si arrancamos Linux no hay problema ya que podemos utilizar grub-set-default para cambiar la entrada por defecto pero si arrancamos otro SO como FreeBSD ya no podremos volver a Linux ya que no podemos modificar la configuración del Grub de Linux desde FreeBSD. Para resolver esta problemática utilizaremos las opciones de arranque que nos brinda UEFI tanto desde Linux como desde FreeBSD.

En Gentoo compilamos la tool, en FreeBSD no hará falta ya que forma parte del sistema base:

emerge -av sys-boot/efibootmgr

Lo primero será consultar el estado de las entradas UEFI:

efibootmgr -v
BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0002,0004,0005,0006,0007,0008,0009,0003,0001
Boot0001* gentoo    HD(3,GPT,839e3608-bfd6-42ba-94a2-14c3d5ae227c,0x2e1800,0x32000)/File(\EFI\GENTOO\GRUBX64.EFI)
Boot0002*     HD(3,GPT,839e3608-bfd6-42ba-94a2-14c3d5ae227c,0x2e1800,0x32000)/File(\EFI\FREEBSD\BOOT1.EFI)
Boot0003* UEFI OS    HD(1,GPT,eb358698-5581-11e9-8ecb-3497f636bf45,0x28,0x64000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot0004* UEFI OS    HD(1,GPT,eb358698-5581-11e9-8ecb-3497f636bf45,0x28,0x64000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot0005* Samsung SSD 850 EVO 500GB    BBS(HD,,0x0)..BO
Boot0006* WDC WD10EAVS-00D7B1    BBS(HD,,0x0)..BO
Boot0007* WDC WD60EFRX-68L0BN1    BBS(HD,,0x0)..BO
Boot0008* KINGSTON SA400S37120G    BBS(HD,,0x0)..BO
Boot0009* WDC WD20EARX-00PASB0    BBS(HD,,0x0)..BO
Boot000A* WDC WD20EARX-00PASB0    BBS(HD,,0x0)..BO
Boot000C* KINGSTON SA400S37120G    BBS(HD,,0x0)..BO
Boot000F* KingstonDataTraveler 3.0PMAP    BBS(HD,,0x0)..BO

Si queremos modificar el Next boot a la entrada 0002(FreeBSD) ejecutamos:

efibootmgr -n 0002

Si queremos modificar el Boot order(GrubGentoo, FreeBSD):

efibootmgr -o 0001,0002

Para añadir entradas hay que tener en cuenta el disco y la partición donde residen los ficheros UEFI, podemos consultarlo tanto desde Linux como FreeBSD.

Linux:

fdisk -l /dev/sda
/dev/sda3    3020800   3225599    204800   100M Sistema EFI
efibootmgr -c -d /dev/sda -l /EFI/freebsd/boot1.efi -L freebsd -p 3

FreeBSD:

gpart show
=>       34  976773101  ada0  GPT  (466G)
    3020800     204800     3  efi  (100M)
mount -t msdosfs /dev/ada0p3 /mnt/aux/
efibootmgr -c -l /mnt/aux/EFI/gentoo/grubx64.efi -L gentoo

Para eliminar entradas.

Linux:

efibootmgr -b ID -B

FreeBSD:

efibootmgr -B ID

Para mas información acerca efibootmgr y UEFI sobre FreeBSD:

https://www.freebsd.org/cgi/man.cgi?query=efibootmgr&sektion=8&manpath=freebsd-release-ports
https://www.freebsd.org/cgi/man.cgi?query=uefi&sektion=8&manpath=freebsd-release-ports

Si te ha gustado el artículo puedes invitarme a un redbull aquí.
Autor: kr0m -- 15/01/2020 21:42:10