Re: bootcode capable of booting both UFS and ZFS? (Amazon/ec2)

From: Warner Losh <imp_at_bsdimp.com>
Date: Sat, 6 May 2017 23:45:12 -0600
On Sat, May 6, 2017 at 10:03 PM, Julian Elischer <julian_at_freebsd.org> wrote:
> On 6/5/17 4:01 am, Toomas Soome wrote:
>>
>>
>>> On 5. mai 2017, at 22:07, Julian Elischer <julian_at_freebsd.org
>>> <mailto:julian_at_freebsd.org>> wrote:
>>>
>>> Subject says it all really, is this an option at this time?
>>>
>>> we'd like to try boot the main zfs root partition and then fall back to a
>>> small UFS based recovery partition.. is that possible?
>>>
>>> I know we could use grub but I'd prefer keep it in the family.
>>>
>>>
>>>
>>
>>
>> it is, sure. but there is an compromise to be made for it.
>>
>> Lets start with what I have done in illumos port, as the idea there is
>> exactly about having as “universal” binaries as possible (just the binaries
>> are listed below to get the size):
>>
>> -r-xr-xr-x   1 root     sys       171008 apr 30 19:55 bootia32.efi
>> -r-xr-xr-x   1 root     sys       148992 apr 30 19:55 bootx64.efi
>> -r--r--r--   1 root     sys         1255 okt 25  2015 cdboot
>> -r--r--r--   1 root     sys       154112 apr 30 19:55 gptzfsboot
>> -r-xr-xr-x   1 root     sys       482293 mai  2 21:10 loader32.efi
>> -r-xr-xr-x   1 root     sys       499218 mai  2 21:10 loader64.efi
>> -r--r--r--   1 root     sys          512 okt 15  2015 pmbr
>> -r--r--r--   1 root     sys       377344 mai  2 21:10 pxeboot
>> -r--r--r--   1 root     sys       376832 mai  2 21:10 zfsloader
>>
>> the loader (bios/efi) is built with full complement - zfs, ufs, dosfs,
>> cd9660, nfs, tftp + gzipfs. The cdboot is starting zfsloader (thats trivial
>> string change).
>>
>> The gptzfsboot in illumos case is only built with zfs, dosfs and ufs - as
>> it has to support only disk based media to read out the loader. Also I am
>> building gptzfsboot with libstand and libi386 to get as much shared code as
>> possible - which has both good and bad sides, as usual;)
>>
>> The gptzfsboot size means that with ufs the dedicated boot partition is
>> needed (freebsd-boot), with zfs the illumos port is always using the 3.5MB
>> boot area after first 2 labels (as there is no geli, the illumos does not
>> need dedicated boot partition with zfs).
>>
>> As the freebsd-boot is currently created 512k, the size is not an issue.
>> Also using common code does allow the generic partition code to be used, so
>> GPT/MBR/BSD (VTOC in illumos case) labels are not problem.
>>
>>
>> So, even just with cd boot (iso), starting zfsloader (which in fbsd has
>> built in ufs, zfs etc), you already can get rescue capability.
>>
>> Now, even with just adding ufs reader to gptzfsboot, we can use gpt +
>> freebsd-boot and ufs root but loading zfsloader on usb image, so it can be
>> used for both live/install and rescue, because zfsloader itself has support
>> for all file systems + partition types.
>>
>> I have kept myself a bit off from freebsd gptzfsboot because of simple
>> reason - the older setups have smaller size for freebsd boot, and not
>> everyone is necessarily happy about size changes:D also in freebsd case
>> there is another factor called geli - it most certainly does contribute some
>> bits, but also needs to be properly addressed on IO call stack (as we have
>> seen with zfsbootcfg bits). But then again, here also the shared code can
>> help to reduce the complexity.
>>
>> Yea, the zfsloader/loader*.efi in that listing above is actually built
>> with framebuffer code and compiled in 8x16 default font (lz4 compressed
>> ascii+boxdrawing basically - because zfs has lz4, the decompressor is always
>> there), and ficl 4.1, so thats a bit of difference from fbsd loader.
>>
>> Also note that we can still build the smaller dedicated blocks like boot2,
>> just that we can not use those blocks for more universal cases and
>> eventually those special cases will diminish.
>
>
> thanks for that..
>
>  so, here's my exact problem I need to solve.
> FreeBSD 10 (or newer) on Amazon EC2.
> We need to have a plan for recovering the scenario where somethign goes
> wrong (e.g. during an upgrade) and we are left with a system where the
> default zpool rootfs points to a dataset that doesn't boot. It is possible
> that mabe the entire pool is unbootable into multi-user..  Maybe somehow it
> filled up? who knows. It's hard to predict future problems.
> There is no console access at all so there is no possibility of human
> intervention. So all recovery paths that start "enter single user mode
> and...." are unusable.
>
> The customers who own the amazon account are not crazy about giving us the
> keys to the kingdom as far as all their EC2 instances, so taking a root
> drive off a 'sick' VM and grafting it onto a freebsd instance to 'repair' it
> becomes a task we don't want to really have to ask them to do. They may not
> have the in-house expertise to do it. confidently.
>
> This leaves us with automatic recovery, or at least automatic methods of
> getting access to that drive from the network.
> Since the regular root is zfs, my gut feeling is that to deduce the chances
> of confusion during recovery, I'd like the (recovery) system itself to be
> running off a UFS partition, and potentially, with a memory root filesystem.
> As long as it can be reached over the network we can then take over.
>
> we'd also like to have the boot environment support in the bootcode.
> so, what would be the minimum set we'd need?
>
> Ufs support, zfs support, BE support, and support for selecting a completely
> different boot procedure after some number of boot attempts without getting
> all the way to multi-user.
>
> How does that come out size-wise?  And what do I need to  configure to get
> that?
>
> The current EC2 Instances have a 64kB boot partition , but I have a window
> to convince management to expand that if I have a good enough  argument.
> (since we a re doing a repartition on the next upgrade, which is "special"
> (it's out upgrade to 10.3 from 8.0).
> Being able to self heal or at least 'get at' a sick instance might be a good
> enough argument and would make the EC2 instances the same as all the other
> versions of the product..

You should convince them to move to 512k post-haste. I doubt 64k will
suffice, and 512k is enough to get all the features you desire.

Warner

> /me has thought..  I wonder if the ec2 instance bios has enough network
> support to allow PXE-like behaviour? or at least being able to receive
> packets..?
>
>>
>> rgds,
>> toomas
>>
>
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
Received on Sun May 07 2017 - 03:45:14 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:11 UTC