HELP: UEFI/ZFS Boot failure: Ignoring Boot000A: Only one DP found

From: O. Hartmann <ohartmann_at_walstatt.org>
Date: Wed, 21 Aug 2019 14:52:40 +0200
I ran into serious trouble booting several boxes off UEFI. On modern hardware,
the ESP is around 200 - 300 MB in size and usually I install
/efi/freebsd/loader.efi, loader.efi taken from /boot/loader.efi. On some older
hardware, specifically on a Lenovo E540 with latest available firmware (2.28),
which uses 12-STABLE and a ZFS-only installation, there seems no working loader
anymore!
The installation of the Laptop has been performed using 12.0-PRERELEASE on an
Samsung EVO 860 500GB SSD. The ESP is 200M in size and contained
/efi/boot/BOOTx64.efi and /efi/boot/startup.nsh.

The ESP has been destroyed by accident. Now I tried to solve the problem by
installing a new ESP and the proper loader, assuming that /boot/loader.efi
(taken from a FreeBSD-13-CURRENT or from 12-STABLE of the same revision and
sompiled on the same platform (Intel Haswell) as the lost laptop's revison of
the OS is at. But I fail doing so. Somehow Lenovo's firmware is setting up a
lot of UEFI boot numbers as provided via "efibootmgr -b 000X", X some Hex
numer. -b 000A is usually denoted/labeld with "ATA HDD0".

Installing the proper boot/loader.efi loader file from 12-STABLE (r351108) and
setting the EFI variable according the following steps:

mount -t msdosfs /dev/ada0p1 /mnt (ESP is on GPT partition 1, 0p2 is zroot)
Install then loader.efi either as BOOTx64.efi or loader.efi under
/mnt/efi/boot/ or /mnt/efi/freebsd/ and then set the boot environment
accordingly via

delete 000A first:
efibootmgr -B -b 000A

create the new efi boot var:
efibootmgr -a -b 000A -c -l /mnt/efi/{freebsd|boot}/{loader.efi|BOOTx64.efi} -L
FreeBSD

The result is a non booting system, the Lenovo firmware jumps immediately into
the menu for selecting a proper boot media.

The same happens with /boot/boot1.efi installed as loader.efi or BOOTx64.efi
shown above.

In case I just brute-force flash the ESP with /boot/boot1.efifat, dd
if=boot1.efifat of=/dev/ada0p1 (ESP) (taken from the propper 12-STABLE system I
spoeke of above), then booting fails again, but this time with an error I watch
on so many boxes recently:

[...]
Ignoring Boot000a: Only one DP found
Trying ZFS pool
Setting currdev to zfs:zroot/ROOT/default:

Then the console freezes at that point and only RESET or POWER OFF is capable
of a revive.

What is wrong here? What am I missing?

Thanks in advance,

oh
Received on Wed Aug 21 2019 - 17:23:05 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:21 UTC