当唯一的 NFS 导出是 ZFS 时,如何使 nfs-kernel-server.service 初始化?

当唯一的 NFS 导出是 ZFS 时,如何使 nfs-kernel-server.service 初始化?

我有许多要导出的 ZFS 文件系统:

$ 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
[...]

这些是唯一打算通过 NFS 导出的文件系统,因此它们未在中列出/etc/exports

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

不幸的是,这似乎意味着 nfs 内核服务不会注册 ZFS 系统导出相关文件系统所需的各种 RPC 服务:

$ 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.

(我在标记处添加了换行符,\\以便清楚地显示相关消息)。

因此,所需的 RPC 服务未注册:

$ /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

请注意,例如 mount 和 stat 服务未注册。因此,ZFS 无法导出自己的文件系统。

我在 Debian 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

这曾经确实有效,但由于我很少重新启动 NFS 服务器,因此当我上次启动它时,可能有一些条目/etc/exports可以防止此问题。

我相信我已经正确设置 ZFS 来导出文件系统:

$ 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'

我有什么想法可以解决这个问题吗?我可以手动破解这个条件/etc/init.d/nfs-kernel-server...

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

...但这似乎不优雅,并且可能会被未来的更新所扭转。

有什么建议么?

答案1

重读后Aaron Toponce 的出色指南/etc/exports我相信最好的解决方法是按照他的描述放入一个虚拟导出这里

$ 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

请注意,上面我们/etc/exports通过重定向进行编辑,因此尽管有 shell 提示,但可能必须以 root 身份运行$

相关内容