Switch from legacy to UEFI boot??

Matthias Fechner idefix at fechner.net
Sat Feb 13 08:52:59 UTC 2016


Am 12.02.2016 um 08:28 schrieb Trond Endrestøl:
> The ESP contains nothing more than the boot1.efi disquised as 
> /EFI/BOOT/BOOTX64.EFI, i.e. the contents of the /boot/boot1.efifat 
> image. The bootfs property points to zroot/ROOT/default, and 
> everything else resides in the zpool.
> 
> Somehow your setup is different.

I will give you as many details as you need to find out why it does not
work.
The FreeBSD is running in an Oracle Virtualbox on windows 10 (version
5.0.14r105127). I use this version to simulate updates for my real boxes.

There is a FreeBSD 10.2-RELEASE-p9 installed that is updated using
freebsd-update.

The zpool consists of two 20GB harddisk switch together as a mirror:
  pool: zroot
 state: ONLINE
  scan: resilvered 8.82G in 0h12m with 0 errors on Wed Feb 10 08:54:53 2016
config:

        NAME           STATE     READ WRITE CKSUM
        zroot          ONLINE       0     0     0
          mirror-0     ONLINE       0     0     0
            gpt/disk0  ONLINE       0     0     0
            gpt/disk1  ONLINE       0     0     0

I resized the zpool to have space for the efi partition (was a little
bit of snapshoting and copying around).
The new layout of both disks is now:
$ gpart show
=>      34  41942973  ada0  GPT  (20G)
        34         6        - free -  (3.0K)
        40    262144     1  efi  (128M)
    262184       128     2  freebsd-boot  (64K)
    262312  41680688     3  freebsd-zfs  (20G)
  41943000         7        - free -  (3.5K)

=>      34  41942973  ada1  GPT  (20G)
        34         6        - free -  (3.0K)
        40    262144     1  efi  (128M)
    262184       128     2  freebsd-boot  (64K)
    262312  41680688     3  freebsd-zfs  (20G)
  41943000         7        - free -  (3.5K)

As you can see, I have legacy and efi partions available so I can boot
uefi and legacy.

As freebsd10.2 is not able to boot efi I copied the boot1.efi/loader.efi
and GNUSparseFile/boot1.efifat (using dd) to the efi partition.
The efi partition was filled with:
newfs_msdos ada0p1
mount -t msdosfs /dev/ada0p1 /mnt
mkdir -p /mnt/efi/boot/
cp boot1.efi /mnt/efi/boot/BOOTx64.efi
mkdir -p /mnt/boot
cat > /mnt/boot/loader.rc << EOF
unload
set currdev=zfs:zroot/ROOT/default:
load boot/kernel/kernel
load boot/kernel/zfs.ko
autoboot
EOF
(cd /mnt && find .)
.
./efi
./efi/boot
./efi/boot/BOOTx64.efi
./boot
./boot/loader.rc
umount /mnt

The same steps are performed on the second disk (but this should make
for these test not a difference I think).

I tested boot1.efi/loader.efi and the efifat with dd from 10.3-beta1 and
11, but was only able to boot with the loader.rc in place. The moment I
removed the loader.rc the systems stops on boot prompt and I have to
type the lines from the loader.rc manually to boot the system.

The bootfs flag is defined:
$ zpool get bootfs
NAME   PROPERTY  VALUE               SOURCE
zroot  bootfs    zroot/ROOT/default  local

$ zfs list
NAME                        USED  AVAIL  REFER  MOUNTPOINT
zroot                      12.9G  6.19G    19K  none
zroot/ROOT                  433M  6.19G    19K  none
zroot/ROOT/default          433M  6.19G   433M  none
zroot/swap                 4.13G  10.3G     8K  -
zroot/tmp                  74.5K  6.19G  74.5K  /tmp
zroot/usr                  5.68G  6.19G  3.42G  /usr
zroot/usr/home             11.2M  6.19G  11.2M  /usr/home
zroot/usr/local             895M  6.19G   895M  /usr/local
zroot/usr/ports             525M  6.19G   280M  /usr/ports
zroot/usr/ports/distfiles   242M  6.19G   242M  /usr/ports/distfiles
zroot/usr/ports/packages   2.76M  6.19G  2.76M  /usr/ports/packages
zroot/usr/src               880M  6.19G   880M  /usr/src
zroot/var                  2.72G  6.19G  1.18G  /var
zroot/var/crash              19K  6.19G    19K  /var/crash
zroot/var/db               1.54G  6.19G  1.50G  /var/db
zroot/var/db/pkg           38.8M  6.19G  38.8M  /var/db/pkg
zroot/var/empty              19K  6.19G    19K  /var/empty
zroot/var/log               243K  6.19G   243K  /var/log
zroot/var/mail               23K  6.19G    23K  /var/mail
zroot/var/run                30K  6.19G    30K  /var/run
zroot/var/tmp               171K  6.19G   171K  /var/tmp

> $ zfs get mountpoint
> NAME                       PROPERTY    VALUE                 SOURCE
> zroot                      mountpoint  none                  received
> zroot/ROOT                 mountpoint  none                  inherited from zroot
> zroot/ROOT/default         mountpoint  none                  inherited from zroot
> zroot/swap                 mountpoint  -                     -
> zroot/tmp                  mountpoint  /tmp                  received
> zroot/usr                  mountpoint  /usr                  received
> zroot/usr/home             mountpoint  /usr/home             inherited from zroot/usr
> zroot/usr/local            mountpoint  /usr/local            inherited from zroot/usr
> zroot/usr/ports            mountpoint  /usr/ports            inherited from zroot/usr
> zroot/usr/ports/distfiles  mountpoint  /usr/ports/distfiles  inherited from zroot/usr
> zroot/usr/ports/packages   mountpoint  /usr/ports/packages   inherited from zroot/usr
> zroot/usr/src              mountpoint  /usr/src              inherited from zroot/usr
> zroot/var                  mountpoint  /var                  received
> zroot/var/crash            mountpoint  /var/crash            inherited from zroot/var
> zroot/var/db               mountpoint  /var/db               inherited from zroot/var
> zroot/var/db/pkg           mountpoint  /var/db/pkg           inherited from zroot/var
> zroot/var/empty            mountpoint  /var/empty            inherited from zroot/var
> zroot/var/log              mountpoint  /var/log              inherited from zroot/var
> zroot/var/mail             mountpoint  /var/mail             inherited from zroot/var
> zroot/var/run              mountpoint  /var/run              inherited from zroot/var
> zroot/var/tmp              mountpoint  /var/tmp              inherited from zroot/var

The boot environments are managed using beadm:
$ beadm list
BE      Active Mountpoint  Space Created
default NR     /          433.0M 2016-02-10 08:10

I hope the post is not to long ;)


Gruß
Matthias

-- 

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the universe trying to
produce bigger and better idiots. So far, the universe is winning." --
Rich Cook


More information about the freebsd-questions mailing list