Re: EFI boot partition overwritten
- Reply: Kevin Oberman : "Re: EFI boot partition overwritten"
- In reply to: Michael Gmelin : "Re: EFI boot partition overwritten"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 17 Jul 2021 23:24:17 UTC
On my laptop, which comes with W10 installed, I wanted to shrink W10 to 256G and put FreeBSD on a new 680G partition and make FreeBSD the default boot. This was all easy except setting up boot and making it default. I just created a EFI/FreeBSD folder in the existing EFI partition (ada0p1) and dropped loader.efi into it. Then I could use efibootmgr(8) to do the rest. It was not too easy to figure out the first time and documentation would have been really nice. Took a while googling (duckduckgoing?) to discover the existence of efibootmgr (thanks Netflix!) and bit longer to figure out just how to use it (man page is really quite good), but it worked perfectly. If anyone cares, efibootmgr on dmy laptop shows: Boot to FW : false BootCurrent: 0001 Timeout : 2 seconds BootOrder : 0001, 0000, 0019, 001A, 001B, 001C, 001D, 001E, 001F, 0020, 0021, 0022, 0023 +Boot0001* FreeBSD Boot0000* Windows Boot Manager Boot0019* USB CD Boot001A* USB FDD Boot001B* NVMe0 Boot001C* NVMe1 Boot001D* ATA HDD0 Boot001E* ATA HDD1 Boot001F* USB HDD Boot0020* PXE BOOT Boot0021* LENOVO CLOUD Boot0022 Other CD Boot0023 Other HDD Kevin Oberman, Part time kid herder and retired Network Engineer E-mail: rkoberman@gmail.com PGP Fingerprint: D03FB98AFA78E3B78C1694B318AB39EF1B055683 On Fri, Jul 16, 2021 at 1:15 PM Michael Gmelin <freebsd@grem.de> wrote: > > > > On 16. Jul 2021, at 19:38, Warner Losh <imp@bsdimp.com> wrote: > > > > On Fri, Jul 16, 2021 at 6:14 AM Thomas Laus <lausts@acm.org> wrote: > > > >> Group: > >> > >> This is an issue for more than just CURRENT. The 'usr/src/UPDATING' > >> file has the instructions for updating the ZFS bootblocks but not the > >> EFI partition. I recently upgraded a RELEASE-12.2 to RELEASE-13.0. The > >> freebsd-update procedure did not upgrade the ZFS bootblocks. I forgot > >> that this PC was UEFI only and overwrote the first partition with the > >> gptzfsboot code. That made my system un-bootable. I found the recovery > >> procedure on one of the FreeBSD forums and was able to reformat the EFI > >> MSDOS partition, create the proper directory structure, and copy the > >> loader.efi file to the correct location and filename using the Live > >> Filesystem running on the installation CD. > >> > >> I searched the man pages and the UPDATING file for instructions but came > >> up empty and had to resort to finding the answer on one of the forums. > >> The filenames have changed since FreeBSD first supported EFI and some of > >> the forum instructions are out of date. My problem must be fairly > >> common and the recovery procedure should be in a man page with a > >> footnote or man reference somewhere on the install media. > >> > >> Since CURRENT receives more updates to the EFI boot loader than the > >> release versions, there should be instructions in the CURRENT > >> 'usr/src/UPDATING' file on how to update the EFI bootcode. > >> > > > > There should be. Yes. Last time I went hunting for a place to shoe-horn > it > > in, I got distracted by something else. > > > > The instructions are relatively straight forward. I'm writing them here > for > > your benefit, and also in case someone wants to send me a diff/pull > request > > to include them. Or better yet, put this in the handbook and we can > > reference > > a location from there. > > > > WARNING: This is a quick run-through of how to do this if you need to. > > The example commands given might not be exactly right for all > installations > > as differing numbers of partitions will change the '-i' parameters. > > > > Frist, you need a partition that's of the right type. For GPT that type > is > > `efi` > > as shown in `gpart show <boot-device>` eg > > # gpart show ada0 > > => 40 2000409184 ada0 GPT (954G) > > 40 1600 - free - (800K) > > 1640 1992292792 2 freebsd-ufs (950G) > > 1992294432 7000000 3 freebsd-swap (3.3G) > > 1999294432 1114792 4 efi (544M) > > > > If you don't have one, you'll need to create one. In the above exmaple, > > I had installed the system with a tiny partition for booting with legacy > > BIOS, but then moved to booting with UEFI. I did this by turning off > > swapping and doing the following: > > # gpart resize -i 3 -s 7000000 ada0 > > I then created a new efi partition: > > # gpart add -t efi ada0 > > and I let it autosize. > > > > Next, I needed a FAT32 filesystem on that device. FAT16 usually will > > work and often FAT12, but there are known examples of system integrators > > that omit support for these last two (more the latter than the former > since > > it's viewed as a floppy only thing, and who uses floppies). I just used > > newfs_msdos and mounted it: > > # newfs_msdos -F 32 /dev/ada0p4 > > # mount -t msdos /dev/ada0p4 /boot/efi > > > > Next, you need to put a bootloader on the system. Unless you have > > special needs, loader.efi is that loader. > > # mkdir -p /boot/efi/efi/boot > > # cp /boot/loader.efi /boot/efi/efi/boot/bootx64.efi > > > > If you are using efibootmgr to set a location to boot from, generally > people > > create a freebsd directory (we've registered /efi/freebsd with the proper > > folks > > to avoid conflicts): > > # mkdir -p /boot/efi/efi/freebsd > > # cp /boot/loader.efi /boot/efi/efi/freebsd > > # efibootmgr -c -a -k /boot/kernel/kernel -l > > /boot/efi/efi/freebsd/loader.efi -L "FreeBSD Boot" > > though some vendors impose limits on how many boot envs you can create > > and some do not allow any at all. > > > > It would be cool to also update the loader.efi man page to be a bit more > useful (this is what 'zpool upgrade' refers to/will refer to in the future). > > -m > > > Warner > > >