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
HTF
fonte
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
Piotr Jurkiewicz
fonte
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.

pmhahn
fonte
-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
Kathirvel
fonte
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 é