Extending zfsboot.c to allow selecting filesystem from
boot.config
Florian Wagner
florian at wagner-flo.net
Wed Oct 19 06:21:45 UTC 2011
> 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.
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.
@@ -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.
Apart from that it worked as expected. Not having to set
vfs.root.mountfrom in the loader is nice.
Regards and thanks
Florian Wagner
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-fs/attachments/20111019/eb1dc58c/signature.pgp
More information about the freebsd-fs
mailing list