Como fazer o nfs-kernel-server.service inicializar quando as únicas exportações do NFS são ZFS?

3

Eu tenho vários sistemas de arquivos ZFS destinados a serem exportados:

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

Estes são os únicos sistemas de arquivos a serem exportados via NFS, portanto, eles não estão listados em /etc/exports :

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

Infelizmente, isso parece significar que o serviço do kernel nfs não registrará os vários serviços RPC necessários para o sistema ZFS exportar os sistemas de arquivos relevantes:

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

(adicionei uma quebra de linha no ponto marcado com \ para que a mensagem relevante fosse claramente exibida).

Como resultado, os serviços RPC necessários não estão registrados:

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

Observe que, por exemplo, os serviços mount e stat não estão registrados. Portanto, o ZFS não pode exportar seus próprios sistemas de arquivos.

Estou vendo este problema na versão 8.8 do Debian:

$ 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

Isso costumava funcionar, mas como eu reinicio o servidor NFS muito raramente é possível que, na última vez que eu o inicializei, houvesse alguma entrada em /etc/exports que teria evitado esse problema.

Acredito que configurei corretamente o ZFS para exportar os sistemas de arquivos:

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

Alguma idéia de como posso resolver isso? Eu poderia cortar essa condicional em /etc/init.d/nfs-kernel-server ...

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

... mas isso parece deselegante e provável que seja revertido por futuras atualizações.

Alguma sugestão?

    
por James Youngman 26.06.2017 / 00:58

1 resposta

3

Depois de reler o excelente guia de Aaron Toponce /etc/exports , como ele descreve. -e-samba / "> aqui :

$ 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

Observe acima que editamos /etc/exports por redirecionamento, então presumivelmente deve estar sendo executado como root, apesar do prompt $ do shell.

    
por 26.06.2017 / 01:08

Tags