The magic of ZFS and NFS (2nd try)

Kurt Lidl lidl at pix.net
Tue Feb 24 15:37:44 UTC 2015


> Rainer Duffner wrote:
>
>> You must use the syntax of exports(5) also with zfs set sharenfs=
>> AFAIK, you shouldn’t use /etc/exports to do zfs exports but the above
>> command
>
> But why shouldn't I use /etc/exports? I have read people writing this (don't
> use /etc/exports) in forums when searching for answers, however the current
> manpage for zfs says this:
>
> sharenfs=on | off | opts
>  Controls whether the file system is shared via NFS, and what options
>  are used. A file system with a sharenfs property of off is managed
>  the traditional way via exports(5).  Otherwise, the file system is
>  automatically shared and unshared with the "zfs share" and "zfs
>  unshare" commands. If the property is set to on no NFS export options
>  are used. Otherwise, NFS export options are equivalent to the con-
>  tents of this property. The export options may be comma-separated.
>  See exports(5) for a list of valid options.
>
> To me this looks like I can choose whether I want to use the exports file
> or if I wish to set the sharenfs flag. I don't really *that* much, although
> I don't really think this is something that a file system should decide, but
> should be set from the NFS server.

Well, I would argue (putting aside Jordan's semi-rant), that the correct
thing to do is use the sharenfs flag for ZFS filesystems, as already
recommended.

The mechanics of using it are straightforward:

zfs set sharenfs="things you would put in /etc/exports" path/to/zfs

In a more concrete example, on one of my machines, I have:

root at hostname-134: zfs get all |grep sharenfs|grep zroot/fbsd
zroot/fbsd              sharenfs              off 
default
zroot/fbsd/10.0-amd64   sharenfs              -maproot=root           local
zroot/fbsd/9.1-amd64    sharenfs              -maproot=root -alldirs  local
zroot/fbsd/9.1-sparc64  sharenfs              -maproot=root -alldirs  local

Those were created via:
	zfs set sharenfs="-maproot=root" zroot/fbsd/10.0-amd64

After doing that, the file /etc/zfs/exports was automatically created 
for me (look, no need to manually edit /etc/exports):

root at hostname-135: cat /etc/zfs/exports
# !!! DO NOT EDIT THIS FILE MANUALLY !!!

/fbsd/10.0-amd64	-maproot=root
/fbsd/9.1-amd64	-maproot=root -alldirs
/fbsd/9.1-sparc64	-maproot=root -alldirs

All I had to do after this was restart my mountd daemon:

root at hostname-136: service mountd restart
Stopping mountd.
Starting mountd.
root at hostname-137: ps -auxww | grep mountd
root    58779  0.0  0.1  10232  2312 ??  Ss   10:30AM      0:00.01 
/usr/sbin/mountd -r /etc/exports /etc/zfs/exports

Make sure that you have the appropriate NFS daemons started in your
server's /etc/rc.conf:

# NFS server things
# (inetd is needed for tftpd)
inetd_enable="YES"
mountd_enable="YES"
mountd_flags="-r"
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 4"
rarpd_enable="YES"
rpcbind_enable="YES"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"

I enable inetd because I need to have tftpd running for diskless booting
of my sparcs when I play with them, along with some other, older
machines.

The examples above work fine for me on FreeBSD 9.1, and I've done the
same thing on FreeBSD 10.1 too - this has worked fine for pretty long
time.

-Kurt


More information about the freebsd-fs mailing list