Como posso fazer a versão 2 do protocolo de suporte do servidor nfs no Ubuntu 17.10?

0

Eu tenho um sistema embarcado Linux que (ao fazer um desenvolvimento ativo nele) monta seu sistema de arquivos raiz como um compartilhamento nfs exportado da minha caixa Ubuntu. Então, só para ser mais claro: o linux embutido é o cliente nfs, minha caixa do Ubuntu é o servidor nfs. Eu não tenho muito controle sobre o sistema embarcado fazendo a montagem real do nfs.

Quando atualizei para o ubuntu 17.10, descobri que isso não funciona mais.

Depois de muita depuração, acho que identifiquei o problema para uma incompatibilidade de versão de protocolo: enquanto farejava tráfego com wireshark, descobri que o sistema embarcado envia pacotes NFS com o protocolo antigo versão 2, mas aqui está o que recebo na minha caixa do Ubuntu correr

$ 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
 100005    1   udp  43512  mountd
 100005    1   tcp  39783  mountd
 100005    2   udp  35844  mountd
 100005    2   tcp  58287  mountd
 100005    3   udp  48188  mountd
 100005    3   tcp  60599  mountd
 100003    3   tcp   2049  nfs
 100003    4   tcp   2049  nfs
 100227    3   tcp   2049
 100003    3   udp   2049  nfs
 100227    3   udp   2049
 100021    1   udp  44366  nlockmgr
 100021    3   udp  44366  nlockmgr
 100021    4   udp  44366  nlockmgr
 100021    1   tcp  43079  nlockmgr
 100021    3   tcp  43079  nlockmgr
 100021    4   tcp  43079  nlockmgr
 100024    1   udp  50305  status
 100024    1   tcp  42983  status

então não há nfs versão 2, apenas 3 e 4.

Alguém sabe como adicionar suporte ao nfs versão 2 ao meu servidor nfs?

    
por user128949 09.11.2017 / 14:20

3 respostas

4

Você precisa modificar o / etc / default / nfs-kernel-server para ter estas linhas:

RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
# To confirm above mods are in effect after service restart use
#     cat /run/sysconfig/nfs-utils
#  or 
#    service nfs-kernel-server status
#

e reinicie o serviço

service nfs-kernel-server restart

tome cuidado para que, após o reinício do serviço, você precise reiniciar os compartilhamentos

zfs share -a

Finalmente, confirme que o protocolo 2 está sendo suportado (tcp e udp também, se necessário)

rpcinfo -p servername | fgrep nfs

Você deve ver isso

100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
    
por Gary 11.01.2018 / 21:29
0

Eu encontrei o mesmo problema com o meu sistema embarcado (TI AM5728). Supondo que você esteja usando o uboot, o truque é alterar a linha de comando que está sendo passada para o kernel. Isso é definido pelo conteúdo da variável de ambiente bootargs. (veja a documentação do uboot para detalhes)

Para corrigir, você precisará adicionar uma adição ", nfsvers = 3" ao final do porção nfsroot da sua linha de comando do kernel (variável bootargs)

No meu sistema ao inicializar no NFS, a linha variável do bootargs se parece com o seguinte:

bootargs = console = ttyO2, 1115200n8 root = / dev / nfs rw rootfstype = nfs ip = dhcp nfsroot = 192.168.x.x: / caminho / para / compartilhar

Isso funcionou bem até 17.10 e depois morreu - A seguinte mudança força o kernel a se conectar usando o NFS v3.

bootargs = console = ttyO2,115200n8 root = / dev / nfs rw rootfstype = nfs ip = dhcp nfsroot = 192.168.x.x: / caminho / para / compartilhamento, nfsvers = 3

    
por William Derby 04.12.2017 / 23:09
0

Se você atualizar para o Ubuntu 18.04, você verá que não há mais RPCNFSDOPTS variável em /etc/default/nfs-kernel-server .

Eu tive que seqüestrar RPCNFSDCOUNT para conseguir usar o NFS v2:

RPCNFSDCOUNT="--nfs-version 2 8"

Prova de que funcionou:

$ service nfs-kernel-server restart
$ cat /proc/fs/nfsd/versions
+2 +3 +4 +4.1 +4.2

Depois disso eu pude montar o sistema de arquivos do OpenVMS Alpha 8.2 (... sim, realmente, ...)

$ tcpip mount dnfs2:[000000] /host=beauty /path="/exports/home" /struct=5
%TCPIP$DNFSMOUNT-S-MOUNTED, /exports/home mounted on _DNFS2:[000000]
    
por fork2execve 26.06.2018 / 10:25