O NFSv4 não pode definir nenhum soquete para o nfsd sem executar o rpcbind


8

De acordo com os documentos da Red Hat, 'rpcbind' não é mais necessário:

Como o suporte ao protocolo foi incorporado ao protocolo v4, o NFSv4 não tem interação com os daemons portmap, rpc.lockd e rpc.statd. O NFSv4 escuta na conhecida porta TCP 2049, que elimina a necessidade de interação do mapa de portas. Os protocolos de montagem e bloqueio foram incorporados ao protocolo V4, o que elimina a necessidade de interação com o rpc.lockd e o rpc.statd. O daemon rpc.mountd ainda é necessário no servidor, mas não está envolvido em nenhuma operação por fio.

no entanto, não consigo iniciar o NFS demon quando o serviço 'rpcbind' não estiver em execução:

# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
                                                           [FAILED]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
                                                           [FAILED]

Desabilitei o NFS v2 e v3:

# grep -v "^#" /etc/sysconfig/nfs
MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
RPCNFSDARGS="-N 2 -N 3"

Você poderia confirmar quais serviços são necessários / essenciais no servidor e no cliente dentre os listados abaixo (basicamente eu gostaria de desativar os serviços que não são necessários):

# rpm -ql nfs-utils | grep 'init.d'
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd

Você configurou seu firewall para permitir nfs?
— user9517

Sim, eu posso montar as exportações NFS no cliente, mas eu me pergunto por que eu ainda preciso usar rpcbindcom v4
— HTF

3
O NFSv4 não requer rpcbind. Mas existem clientes e ferramentas em torno dos quais ainda dependem dessas informações, por exemplo, 'showmount'. Além disso, o nfsd do Linux usa o arquivo / proc / fs / nfsd / portlist para comunicar o número da porta ao rpcbind, e esse arquivo de alguma forma depende da execução do processo rpcbind.
— Kofemann

Eu posso verificar este problema no Debian 7 com o kernel 3.3.2, adicionando -N 2 -N 3a rpc.nfsdno script de início e recebendo o mesmo erro "não é possível definir qualquer soquetes para nfsd"
— Tankman六四

Respostas:


10

Este foi um erro no módulo do kernel do servidor NFS. Foi corrigido em dezembro de 2013.

A partir do kernel 3.14, rpcbindnão é mais necessário executar o servidor NFS no kernel.

(supondo que o servidor esteja configurado para usar apenas NFSv4 e superior)

http://lxr.free-electrons.com/source/net/sunrpc/svc.c?v=3.14#L966

Você pode encontrar mais informações sobre essa alteração neste tópico:

http://www.spinics.net/lists/linux-nfs/msg41053.html

Portanto, sua configuração:

MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
RPCNFSDARGS="-N 2 -N 3"

agora deve funcionar sem rpcbind.

Quando você usa apenas o NFSv4, nenhum desses serviços é necessário:

/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd

rpc.idmapdé necessário apenas para o NFSv4. O GSS também é necessário para a segurança Kerberos. Embora ambos sejam opcionais.
— Irfan Latif

0

A documentação citada do RedHat estava errada e foi corrigida pelo Bug 521215 : rpc.mountdainda deve ser usado para configurar o NFSv4, mas, estritamente falando, não é necessário que seja executado depois disso.

  • nfs: Servidor para todas as versões do NFS: v2, v3, v4, v4.1
  • rpcbind/ portmapper: Servidor , estritamente apenas para NFS <= v3. Mas também para o NFS v4, pois o servidor Linux Kernel NFS tenta se registrar e falha ao iniciar se rpcbindnão estiver em execução.
  • rpc.mountd: Servidor , estritamente apenas para NFS <= 3. Mas também para o NFS v4, como o Linux Kernel o usa para verificar se o cliente de conexão tem permissão para se conectar.
  • nfslock: Servidor apenas para NFS <= v3
  • rpc.idmapd: Servidor opcional (e clientes mais antigos ) para NFS v4
  • rpc.quotad: Servidor para usar cota de disco
  • rpc.statd: Servidor apenas para NFS <= v3

Ao usar o Kerberos ( sec=krb/ krb5i/ krb5p), os seguintes serviços são necessários:

  • rpc.gssd: Cliente
  • rpc.svcgssd: Servidor

Observe que, mesmo que eles carreguem rpc.seus nomes, eles usam o mecanismo interno do kernel do Linux rpc_pipefpara comunicação entre o kernel do Linux e o auxiliar de espaço do usuário; então rpcbindAKA portmappernão é necessário para eles.


-3

Verifique o serviço rpcbind. Se ele parou de funcionar, inicie e tente iniciar o serviço nfs.

service rpcbind start
service nfs start

Esta resposta é de qualidade muito baixa. O OP declarou que rpcbind não era necessário desde o nfsv4. A pergunta já foi respondida: foi um bug do kernel.
— precisa saber é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.