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