Switch from legacy to UEFI boot??

Trond Endrestøl Trond.Endrestol at fagskolen.gjovik.no
Mon Feb 15 09:05:49 UTC 2016


On Sat, 13 Feb 2016 09:52+0100, Matthias Fechner wrote:

> 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 ;)

I tried to recreate your setup using 
FreeBSD-10.3-BETA1-amd64-uefi-dvd1.iso.

It booted just fine without any loader.rc stored in the ESP.

To recap:

gpart create -s gpt ada0
gpart create -s gpt ada1

gpart add -a 4K -t efi -s 128M ada0
gpart add -a 4K -t efi -s 128M ada1

gpart add -a 4K -t freebsd-boot -s 64K ada0
gpart add -a 4K -t freebsd-boot -s 64K ada1

gpart add -a 4K -t freebsd-zfs ada0
gpart add -a 4K -t freebsd-zfs ada1

gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 ada1

newfs_msdos ada0p1
newfs_msdos ada1p1

mount -t msdosfs /dev/ada0p1 /mnt
mkdir -p /mnt/EFI/BOOT
cp -p /boot/boot1.efi /mnt/EFI/BOOT/BOOTX64.EFI
umount /mnt

mount -t msdosfs /dev/ada1p1 /mnt
mkdir -p /mnt/EFI/BOOT
cp -p /boot/boot1.efi /mnt/EFI/BOOT/BOOTX64.EFI
umount /mnt

kldload zfs

sysctl vfs.zfs.min_auto_ashift=12

hostname matthias.example.org

zpool create -o autoreplace=on -o cachefile=/tmp/zpool.cache -o failmode=continue -O mountpoint=legacy zroot mirror ada0p3 ada1p3

I used my own recipe for crafting the ZFS pool, you'll find the recipe 
as the files matching 0* at 
http://ximalas.info/~trond/create-zfs/canmount/

The two .vdi files (2x 1,065,353,216 bytes) can be downloaded for 
comparison from http://ximalas.info/~trond/matthias/

-- 
+-------------------------------+------------------------------------+
| Vennlig hilsen,               | Best regards,                      |
| Trond Endrestøl,              | Trond Endrestøl,                   |
| IT-ansvarlig,                 | System administrator,              |
| Fagskolen Innlandet,          | Gjøvik Technical College, Norway,  |
| tlf. mob.   952 62 567,       | Cellular...: +47 952 62 567,       |
| sentralbord 61 14 54 00.      | Switchboard: +47 61 14 54 00.      |
+-------------------------------+------------------------------------+


More information about the freebsd-questions mailing list