Am 19.02.21 um 22:07 schrieb Warner Losh:
To avoid confusion and errors, I think a proper boot1.efifat should be put back into the base system so that people don't have to track the above recipe (which is likely to change).There's no safe way to do this. The old process has been deprecated because it is dangerous and inflexible. For upgrading from an old-style installation, the new process is actually fairly simple: mount -t msdos /dev/daXsY /mnt cp /boot/loader.efi /mnt/efi/boot/bootx64.efi umount /mnt Though if you're using eftbootmgr to select things, you'll need to copy to efi/freebsd/loader.efi. Different BIOS vendors have a number of different bugs that make this trickier than it should be, alas.
I have been using the attached script to update book blocks on EFI or GPT ZFS MBR boot disks for quite some time. More partition schemes and boot block types could be supported by extending the covered cases and/or passing the partition type (GPT vs. MBR). Regards, STefan
#!/bin/sh MOUNTPOINT=/.efi BOOT1=/boot/pmbr BOOT2=/boot/gptzfsboot BOOTEFI=/boot/loader.efi update_gptzfsboot () { disk=$1 partname=$2 if strings /dev/$partname | grep -q ZFS; then index=${partname##*p} gpart bootcode -b $BOOT1 -p $BOOT2 -i $index $disk fi } update_efiboot () { disk=$1 partname=$2 efidir=$MOUNTPOINT/efi/boot umount $MOUNTPOINT 2>/dev/null if mount -t msdos "/dev/$partname" $MOUNTPOINT; then mkdir -p $efidir rm -f $efidir/BOOTx64o.efi mv $efidir/BOOTx64.efi $efidir/BOOTx64o.efi cp $BOOTEFI /.efi/efi/boot/BOOTx64.efi umount $MOUNTPOINT fi } while read line do set - $line if [ "$1" = "=>" ]; then disk=$4 partscheme=$5 else partname=$3 parttype=$4 case $parttype in efi) update_efiboot $disk $partname ;; freebsd-boot) update_gptzfsboot $disk $partname ;; esac fi done <<*EOF $(gpart show -p) *EOF
OpenPGP_signature
Description: OpenPGP digital signature