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