EFI boot with multiple alternate boot/OS partitions - possible?
Milan Obuch
freebsd-hackers at dino.sk
Fri Nov 30 16:45:14 UTC 2018
On Fri, 30 Nov 2018 09:23:31 -0700
Warner Losh <imp at bsdimp.com> wrote:
> On Fri, Nov 30, 2018 at 7:26 AM Milan Obuch <freebsd-hackers at dino.sk>
> wrote:
[ snip ]
> > It is manageable when dealing with application/libraries, both from
> > ports and custom programms, but if OS partition is to be upgraded,
> > maybe for security reason or the like, power outage in wrong instant
> > could render whole system unusable. In order to minimise risks with
> > such an upgrade, I would like to employ following scheme:
> >
> > (partial partition layout from gpart show)
> >
> > 40 409600 1 efi (200M)
> > 409640 3145728 2 freebsd-ufs (1.5G)
> > 3555368 3145728 3 freebsd-ufs (1.5G)
> > 6701096 8388608 4 freebsd-swap (4.0G)
> >
> > (other partition for application data, cache etc)
> >
> > with /etc/fstab corresponding part being
> >
> > # Device Mountpoint FStype Options Dump Pass#
> > /dev/sdda0p2 / ufs ro 1 1
> > /dev/sdda0p3 /alt ufs ro 2 2
> > /dev/sdda0p4 none swap sw 0 0
> >
> > When upgrade request is being handled, /alt filesystem is being
> > remount with read-write access, receives whole OS installation,
> > relevant config files in /etc directory are being copied
> > into /alt/etc directory, resulting in usable alternate OS copy.
> > This can be verified for accuracy etc. and system should be
> > switched to use partition 3 for next boot, something like nextboot
> > command with -k option makes, but whole partition, not just
> > directory with kernel is switched...
> >
> > Then partitions' roles are swapped, as /etc/fstab file in now active
> > secondary partition would be
> >
> > # Device Mountpoint FStype Options Dump Pass#
> > /dev/sdda0p2 /alt ufs ro 2 2
> > /dev/sdda0p3 / ufs ro 1 1
> > /dev/sdda0p4 none swap sw 0 0
> >
> > Any ideas/hints would be appreciated, I tried to look into
> > efibootmgr and efivar man pages, but got no clear idea how they
> > could be used for my purpose. I do not fully understand some
> > details of EFI boot process, so if some good material for reading
> > is available, let me know (I did some googling, but found no
> > definitive answers yet).
>
> efibootmgr is what you want, though if it's under-documented we
> should fix that. Assuming that p1 is the ESP, you should be able to
> do:
>
> efibootmgr -c -l ssd0p1:/efi/freebsd/loader.efi -k
> ssd0p3:/boot/kernel/kernel -b 10 -a
> efibootmgr -c -l ssd0p1:/efi/freebsd/loader.efi -k
> ssd0p2:/boot/kernel/kernel -b 11 -a
>
> this will setup Boot0010 and Boot0011.
>
> You can then set the order either with efibootmgr -o or efibootmgr
> -n. In theory you can also use the full unix path for the -k and -l
> lines if things are mounted, but I hadn't fixed all the weird edge
> cases with that which kept cropping up (I think they are are fixed
> since I can't recreate the problems, but I'm not 100% sure).
>
Thank you for quick reply! Yes, this looks really well, so I test what
you wrote to verify it (and learn a bit more, again). This just fills
one gap in my undestanding the process of UEFI boot. I try to read our
man pages again, and if verified successfully, write something to
document this usage.
Once again, big thanks!
Regards,
Milan
More information about the freebsd-hackers
mailing list