3

I have a number of ZFS file systems intended to be exported:

$ sudo zfs get sharenfs
NAME                              PROPERTY  VALUE                SOURCE
zpool0                            sharenfs  off                  local
zpool0/books                      sharenfs  [email protected]/24  local
zpool0/music                      sharenfs  [email protected]/24  local
zpool0/photo                      sharenfs  [email protected]/24  local
zpool0/video                      sharenfs  [email protected]/24  local
[...]

These are the only file systems intended to be exported via NFS, so they are not listed in /etc/exports:

$ grep -v '^#' <  /etc/exports  | wc -c
0

Unfortunately this seems to mean that the nfs kernel service won't register the various RPC services needed for the ZFS system to export the relevant file systems:

$ sudo systemctl status  nfs-kernel-server.service 
● nfs-kernel-server.service - LSB: Kernel NFS server support
   Loaded: loaded (/etc/init.d/nfs-kernel-server)
   Active: active (exited) since Sun 2017-06-25 13:18:48 IST; 10h ago
  Process: 3867 ExecStart=/etc/init.d/nfs-kernel-server start (code=exited, status=0/SUCCESS)

Jun 25 13:18:48 jupiter nfs-kernel-server[3867]: \\
Not starting NFS kernel daemon: no exports. ... (warning).
Jun 25 13:18:48 jupiter systemd[1]: Started LSB: Kernel NFS server support.

(I added a line break at the point marked with \\ so that the relevant message would be clearly shown).

As a result the needed RPC services are not registered:

$ /usr/sbin/rpcinfo -p localhost
program vers proto   port  service
100000    4   tcp    111  portmapper
100000    3   tcp    111  portmapper
100000    2   tcp    111  portmapper
100000    4   udp    111  portmapper
100000    3   udp    111  portmapper
100000    2   udp    111  portmapper
100024    1   udp  60457  status
100024    1   tcp  55306  status

Notice that for example the mount and stat services are not registered. Hence ZFS cannot export its own file systems.

I'm seeing this problem on Debian version 8.8:

$ dpkg -l nfs-kernel-server zfsutils-linux
[...]
ii  nfs-kernel-server                              1:1.2.8-9                    amd64                        support for NFS kernel server
ii  zfsutils-linux                                 0.6.5.9-2~bpo8+1             amd64                        command-line tools to manage OpenZFS filesystems

This did used to work, but since I reboot the NFS server very rarely it's possible that when I last booted it there was some entry in /etc/exports which would have prevented this problem.

I believe I have correctly set ZFS up to export the filesystems:

$ grep -B2 ZFS_SHARE   /etc/default/zfs 
# Run `zfs share -a` during system start?
# nb: The shareiscsi, sharenfs, and sharesmb dataset properties.
ZFS_SHARE='yes'

Any ideas how I can solve this? I could hand-hack this conditional in /etc/init.d/nfs-kernel-server...

if [ -f /etc/exports ] && grep -q '^[[:space:]]*[^#]*/' $export_files
then
    do_modprobe nfsd

... but that seems inelegant and likely to be reversed by future updates.

Any suggestions?

1 Answer 1

3

After re-reading Aaron Toponce's excellent guide I believe the best workaround is to put a dummy export in /etc/exports as he describes here:

$ echo '/mnt localhost(ro)' >> /etc/exports
$ sudo /etc/init.d/nfs-kernel-server start
$ showmount -e hostname.example.com
Export list for hostname.example.com:
/mnt localhost

Notice above that we edit /etc/exports by redirection, so presumably must be running as root, despite the $ shell prompt.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .