FreeBSD Upgrade Bootloader
WARNING: Not tested on dual boot machines and probably doesn’t work
The recommended partitioning layout is to support BIOS and UEFI. The following is GPT partitioning (could be MBR in this simple example). Notice that the first two partitions are EFI and BIOS boot partitions. The EFI partition is nothing more than a FAT partition in most cases.
gpart show
=> 40 500118112 ada0 GPT (238G)
40 532480 1 efi (260M)
532520 1024 2 freebsd-boot (512K)
533544 984 - free - (492K)
534528 4194304 3 freebsd-swap (2.0G)
4728832 495388672 4 freebsd-zfs (236G)
500117504 648 - free - (324K)
To see current UEFI settings like which disk/partition/file is configured for booting, run the following:
efibootmgr -v
BootCurrent: 0019
Timeout : 0 seconds
BootOrder : 0019, 000A, 000C, 0006, 0007, 0008, 0009, 000B, 000D, 000E, 000F, 0010, 0011, 0012, 0013
+Boot0019* FreeBSD HD(1,GPT,0a7e1ccc-8826-11eb-b711-f0def164c22a,0x28,0x82000)/File(\efi\freebsd\loader.efi)
ada0p1:/efi/freebsd/loader.efi (null)
# A LOT OF LINES REMOVED
Write disk (pmbr) and second partition (gptzfsboot) boot codes. If you’re using UFS instead of ZFS, change gptzfsboot to gptboot.
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 ada0
# if not mounted, mount efi partition under /boot/efi
# in my case, that's adaop1, as efibootmgr reported
cp /boot/loader.efi /boot/efi/efi/freebsd/loader.efi