Date: Wed, 19 Oct 2011 08:21:39 +0200 From: Florian Wagner <florian@wagner-flo.net> To: Andriy Gapon <avg@FreeBSD.org> Cc: freebsd-fs@FreeBSD.org Subject: Re: Extending zfsboot.c to allow selecting filesystem from boot.config Message-ID: <20111019082139.1661868e@auedv3.syscomp.de> In-Reply-To: <4E9ACA9F.5090308@FreeBSD.org> References: <20111015214347.09f68e4e@naclador.mos32.de> <4E9ACA9F.5090308@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/MqGgbxzbrnCGjY92aocJCb= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable > on 15/10/2011 22:43 Florian Wagner said the following: > > Hi, > >=20 > > 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. > >=20 > > How much work would it be to extend the loader to also allow > > selecting a ZFS filesystem? > >=20 > > 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. >=20 > Please check out the following changes: > https://gitorious.org/~avg/freebsd/avgbsd/commit/8c3808c4bb2a2cd746db3e9c= 46871c9bdf943ef6 > https://gitorious.org/~avg/freebsd/avgbsd/commit/0b4279c0d366d9f2b5bb9d4c= 0dd3229d8936d92b > https://gitorious.org/~avg/freebsd/avgbsd/commit/b29ab78b079f27918de1683e= 88bcb1817a0e5969 > https://gitorious.org/~avg/freebsd/avgbsd/commit/f49add15516dfd582258b682= 0b8f0254cf9419a3 > https://gitorious.org/~avg/freebsd/avgbsd/commit/e072b443b0f59fe1ff54a70d= 2437d63698bbf597 > https://gitorious.org/~avg/freebsd/avgbsd/commit/f701760c10812c5b6925352f= b003408c19170063 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 --Sig_/MqGgbxzbrnCGjY92aocJCb= Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iEYEARECAAYFAk6ebHMACgkQLvW/2gp2pPw0rQCeN81YhLpkyZtw+KyMScOOSl1s bxgAoILoMmdsz1lWUC9ex6wunDl+rPRA =F9Av -----END PGP SIGNATURE----- --Sig_/MqGgbxzbrnCGjY92aocJCb=--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20111019082139.1661868e>