Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 May 2017 23:45:12 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Julian Elischer <julian@freebsd.org>
Cc:        Toomas Soome <tsoome@me.com>, freebsd-current <freebsd-current@freebsd.org>, Toomas Soome <tsoome@freebsd.org>, Andriy Gapon <avg@freebsd.org>,  Colin Percival <cperciva@freebsd.org>
Subject:   Re: bootcode capable of booting both UFS and ZFS? (Amazon/ec2)
Message-ID:  <CANCZdfoPF2rxD50n=HgYRkwZLhX2XOAeVcMiJ8Z=3Q9wvcog-w@mail.gmail.com>
In-Reply-To: <972d2a0b-862c-2510-090d-7e8f5d1fce4d@freebsd.org>
References:  <963c5c97-2f92-9983-cf90-ec9d59d87bba@freebsd.org> <053354DF-651F-423C-8057-494496DA3B91@me.com> <972d2a0b-862c-2510-090d-7e8f5d1fce4d@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, May 6, 2017 at 10:03 PM, Julian Elischer <julian@freebsd.org> wrote=
:
> On 6/5/17 4:01 am, Toomas Soome wrote:
>>
>>
>>> On 5. mai 2017, at 22:07, Julian Elischer <julian@freebsd.org
>>> <mailto:julian@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 =E2=80=9Cuniversal=E2=80=9D 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 triv=
ial
>> string change).
>>
>> The gptzfsboot in illumos case is only built with zfs, dosfs and ufs - a=
s
>> it has to support only disk based media to read out the loader. Also I a=
m
>> 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.5=
MB
>> boot area after first 2 labels (as there is no geli, the illumos does no=
t
>> 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 supp=
ort
>> 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 ha=
ve
>> seen with zfsbootcfg bits). But then again, here also the shared code ca=
n
>> 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 al=
ways
>> 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 boot=
2,
>> 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 possibl=
e
> 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 th=
e
> 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 n=
ot
> 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 chanc=
es
> of confusion during recovery, I'd like the (recovery) system itself to be
> running off a UFS partition, and potentially, with a memory root filesyst=
em.
> 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 complet=
ely
> different boot procedure after some number of boot attempts without getti=
ng
> all the way to multi-user.
>
> How does that come out size-wise?  And what do I need to  configure to ge=
t
> that?
>
> The current EC2 Instances have a 64kB boot partition , but I have a windo=
w
> 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 g=
ood
> enough argument and would make the EC2 instances the same as all the othe=
r
> 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@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org=
"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfoPF2rxD50n=HgYRkwZLhX2XOAeVcMiJ8Z=3Q9wvcog-w>