How to add zfs support to FreeBSD

Jeremy Chadwick jdc at koitsu.org
Tue Feb 19 17:37:23 UTC 2013


On Tue, Feb 19, 2013 at 09:09:07AM +0000, Teske, Devin wrote:
> 4. lsvfs output?
> -- 
> Devin
> 
> ________________________________________
> From: owner-freebsd-questions at freebsd.org [owner-freebsd-questions at freebsd.org] on behalf of Jeremy Chadwick [jdc at koitsu.org]
> Sent: Tuesday, February 19, 2013 12:16 AM
> To: freebsd-questions at freebsd.org
> Cc: fbsd8 at a1poweruser.com; freebsd at edvax.de
> Subject: Re: How to add zfs support to FreeBSD
> 
> Regarding all the recommendations on "how to determine if ZFS is
> available on the system":
> 
> Do not run commands like /sbin/zfs or /sbin/zpool right off the bat.
> This will result in the underlying kld bits dynamically loading zfs.ko
> and opensolaris.ko on the fly -- even if there aren't any ZFS
> filesystems used -- which takes up kernel memory.  This also generates
> crap on the console, and I can assure you an SA running some script is
> not expecting this.  (An example is a system I admin which does not use
> ZFS, but I often forget that fact and type "zpool status" as root by
> accident, which loads ZFS, etc. -- I ended up using WITHOUT_CDDL on that
> system just to keep that from happening ;-) ).
> 
> The OP needs to define what he means by "enabled on the host".  This
> could mean:
> 
> a) The host actually has ZFS compiled or not (e.g. WITHOUT_ZFS and/or
> WITHOUT_CDDL and/or WITHOUT_CTF are not defined in src.conf),
> 
> b) The host is capable of using ZFS (e.g. kernel modules are built and
> installed but are not loaded),
> 
> c) The host has the kernel modules loaded but are not actually in use
> (e.g. zfs_enable="yes" in rc.conf but no ZFS filesystems defined),
> 
> d) The host has the kernel modules loaded and actively has ZFS
> filesystems in use.
> 
> 
> Recommendations (meaning you get to use a combination of these to create
> proper logic depending on what you want -- please keep in mind what I
> just said about using /sbin/zpool and so on however):
> 
> 1) Check for the existence of /sbin/zfs (e.g. if [ -x ... ]).  If it
> exists, the system was built without WITHOUT_{ZFS,CDDL,CTF} set.  (Sorry
> for the double negative).
> 
> 2) Use "sysctl -n vfs.zfs.version.zpl" and check exit code.  If 1, the
> kernel modules are not loaded, else they are.
> 
> 3) Run "/sbin/zpool list -H" and see if there's any output.  If there
> is, there are pools defined, which means in some way or another ZFS is
> being used by the system.  (Note that I recommend using /sbin/zpool not
> /sbin/zfs, because zpool (for me anyway) takes less time and if there's
> a pool there is going to be a filesystem (even if -omountpoint=none)
> that shows up /sbin/zfs).
> 
> Note that this WILL result in the kernel modules being loaded.
> Depending on what the OP wants, you could use "/sbin/mount | grep zfs"
> instead, but that won't catch one situation: where all ZFS filesystems
> are mountpoint=none.
> 
> Footnote: do not do silly things like grep /etc/src.conf for WITHOUT_xxx
> features, or /etc/rc.conf for whatever; an admin may have set these in
> advance for the next {build,install}{world,kernel} which have yet to be
> run.  Parsing/checking config files is not going to suffice.

That's a pretty awesome command, one which I've never heard of --
probably because it's only mentioned in these, and only these:

df(1)
find(1)
mount(2)
nmount(2)
umount(2)
jail(8)

Not even in mount(8), VFS(9), extattr(9), or any other man page one
might think be relevant.  Strange, considering it's existed since
FreeBSD 2.0 (!).

-- 
| Jeremy Chadwick                                   jdc at koitsu.org |
| UNIX Systems Administrator                http://jdc.koitsu.org/ |
| Mountain View, CA, US                                            |
| Making life hard for others since 1977.             PGP 4BD6C0CB |


More information about the freebsd-questions mailing list