Extending zfsboot.c to allow selecting filesystem from
boot.config
Andriy Gapon
avg at FreeBSD.org
Wed Oct 19 15:39:53 UTC 2011
on 19/10/2011 09:21 Florian Wagner said the following:
Somewhere about this line an attribution of my text was expected :-)
>> on 15/10/2011 22:43 Florian Wagner said the following:
>>> Hi,
>>>
>>> from looking at the code in sys/boot/i386/zfsboot/zfsboot.c the ZFS
>>> aware boot block already allows to select pool to load the kernel from
>>> by adding <POOL>:<FILE TO BOOT> to the boot.config. As this code calls
>>> the zfs_mount_pool function it will look for the bootfs property on the
>>> new pool or use its root dataset to get the file from there.
>>>
>>> How much work would it be to extend the loader to also allow selecting
>>> a ZFS filesystem?
>>>
>>> What I'd like to do is place a boot.config on the (otherwise empty)
>>> root of my system pool and then tell it to get the loader from another
>>> filesystem by putting "rpool/root/stable-8-r226381:/boot/zfsloader" in
>>> there.
>>
>> Please check out the following changes:
>> https://gitorious.org/~avg/freebsd/avgbsd/commit/8c3808c4bb2a2cd746db3e9c46871c9bdf943ef6
>>
>>
https://gitorious.org/~avg/freebsd/avgbsd/commit/0b4279c0d366d9f2b5bb9d4c0dd3229d8936d92b
>> https://gitorious.org/~avg/freebsd/avgbsd/commit/b29ab78b079f27918de1683e88bcb1817a0e5969
>>
>>
https://gitorious.org/~avg/freebsd/avgbsd/commit/f49add15516dfd582258b6820b8f0254cf9419a3
>> https://gitorious.org/~avg/freebsd/avgbsd/commit/e072b443b0f59fe1ff54a70d2437d63698bbf597
>>
>>
https://gitorious.org/~avg/freebsd/avgbsd/commit/f701760c10812c5b6925352fb003408c19170063
>
> Looks great!
>
> I've applied the patches to my checkout of Stable 8 and gave the resulting
> gptzfsboot and zfsloader a cursory try in a virtual machine.
Thank you for testing!
> Commit f701760c10812c5b6925352fb003408c19170063 breaks the build of the
> non-ZFS-enabled bootcode. The syntax is wrong in the following snippet if
> LOADER_ZFS_SUPPORT is not defined. Moving the closing bracket ("};") right
> after the second #endif into the preprocessor conditional fixes that.
Thank you for reporting this!
> @@ -52,14 +52,21 @@ u_int32_t howto; u_int32_t bootdev; u_int32_t
> bootflags; +#ifdef LOADER_ZFS_SUPPORT union { +#endif struct { u_int32_t
> pxeinfo; u_int32_t res2; }; +#ifdef LOADER_ZFS_SUPPORT uint64_t zfspool;
> +#endif }; u_int32_t bootinfo; +#ifdef LOADER_ZFS_SUPPORT + uint64_t
> zfsroot; +#endif } *kargs;
>
>
> The only thing I was a bit confused by is that on the boot prompt only the
> pool and filename to be booted are printed.
Do you mean the (gpt)zfsboot prompt?
> Apart from that it worked as expected. Not having to set vfs.root.mountfrom
> in the loader is nice.
Thanks!
--
Andriy Gapon
More information about the freebsd-fs
mailing list