Exportar diretório via NFS

O NFS (Network File System) é um sistema de arquivos distribuídos utilizado para compartilhar arquivos e diretórios entre computadores conectados em rede, formando assim um diretório virtual. Para que os clientes tenham acesso aos arquivos, é feita uma requisição ao servidor que, dependendo das permissões do cliente, responde confirmando a requisição. A partir desse ponto a hierarquia de diretórios e arquivos remotos passa a fazer parte do sistema de arquivos local da máquina.

O RPC (Remote Procedure Call) é um padrão Unix para serviços remotos, sendo o NFS um desses serviços. Eles registram-se em um diretório conhecido como portmapper. Um cliente querendo realizar uma consulta NFS primeiro consulta o portmapper (na porta 111, seja TCP ou UDP), e pergunta pelo servidor NFS; a resposta geralmente vem pela porta 2049 (a padrão para o NFS).

Primeiramente, deve-se ter certeza que o Kernel tem suporte a NFS e que os serviços estejam funcionando em ambos os computadores, o que é possível através do comando:

$ cat /proc/filesystems | grep nfs

Se aparecer algo como "nodev nfs", o kernel tem suporte. A instalação se dá através do seguinte comando:

$ sudo apt-get install nfs-kernel-server

Agora deverá ser realizada a configuração do serviço no servidor. Para isso, edite o arquivo "/etc/exports" incluindo uma linha com a sintaxe "diretorio_a_ser_liberado host(permissao)". Por exemplo, pode-se dar permissão de leitura (r) e escrita (w) do diretório /dados/teste_nfs para o host 192.168.0.12 da seguinte forma:

/dados/teste_nfs 192.168.0.12(rw,sync,root_squash,no_subtree_check)

As outras opções estão relacionadas à sincronicidade e permissões - veja mais detalhes no final do post. Caso a liberação seja para qualquer computador, utiliza-se asterisco (*) no lugar do host.

Depois de configurado, reinicie o servidor NFS através do comando:

$ sudo service nfs-kernel-server restart

Ou também exporte através do seguinte comando (sem reiniciar):

$ exportfs -av

No computador cliente, para montar um diretório liberado do servidor, uma maneira é utilizar o seguinte comando (especificando o host, diretorio_a_ser_montado e diretorio_destino):

$ sudo mount -t nfs host:diretorio_a_ser_montado diretorio_destino

O servidor irá verificar se a máquina tem permissão para acessar os dados daquele diretório, caso tenha, e isto deve estar especificado no arquivo "/etc/exports" do servidor, retorna um descritor de arquivos. Quando é acessado o NFS, o kernel envia uma chamada RPC ao servidor nfsd na máquina servidora, nesta são enviados os parâmetros, descritor de arquivos, o nome do arquivo, o identificador de usuário e grupo, usados para controle. As funcionalidades do NFS no Linux são implementadas em nível kernel, o VFS (sistema de arquivo virtual) é integrado no kernel.

Uma outra maneira de montar um compartilhamento NFS de uma outra máquina é adicionar uma linha ao arquivo "/etc/fstab" no computador cliente com a seguinte sintaxe (veja o exemplo abaixo):

host:diretorio_a_ser_montado    diretorio_destino   nfs    opções verificação
192.168.0.112:/dados/teste_nfs/ /home/user/teste_nfs/ nfs rw,vers=3,nointr,lock,hard,proto=tcp,rsize=524288,wsize=524288 0 0

Depois de salvar o arquivo, digite o comando "mount diretorio_destino" no computador cliente e o ponto de montagem será montado pelo servidor (ou digite "mount -a" para montar tudo o que está na tabela de partições do fstab). A vantagem desse método é que, se o computador reiniciar, a montagem se dará automaticamente (caso não tenha configurado o contrário). Veja mais sobre o fstab no final do post Particionamento de disco e inicialização de sistema e sobre as opções no artigo abaixo do LNCC.

Importante: o UID e o GID do usuário do servidor deve ser o mesmo do usuário da máquina cliente. Para visualizar esses números, abra o arquivo "/etc/passwd" e para alterar são os seguintes comandos:

$ sudo usermod -u <NOVOUID> <NOMEUSUÁRIO>
$ sudo usermod -g <NOVOGID> <NOMEUSUÁRIO>

Veja um exemplo de como incluir um novo diretório compartilhado em uma servidora de disco (pc_hd) em uma máquina virtual servidora de web e ftp (pc_web) com tudo já instalado configurado:

  1. Criar diretório no pc_hd; mudar usuário e permissões de acesso se for o caso
  2. Criar diretório no pc_web; mudar usuário e permissões de acesso se for o caso
  3. Incluir no "/etc/fstab" do pc_web: ip_pc_hd:/path_pc_hd/ftp/dir_compartilhado /path_pc_web/ftp/dir_compartilhado nfs rw,vers=3,nointr,lock,hard,proto=tcp,rsize=524288,wsize=524288 0 0
  4. Incluir diretório na lista "/etc/exports" do pc_hd dos que serão exportados (incluir porta se for o caso, copiar o comando na mesma linha para compartilhar a mesma pasta se mais IPs): /path_pc_hd/ftp/dir_compartilhado ip_pc_web/porta(rw,sync,root_squash,no_subtree_check)
  5. Exportar do pc_hd: exportfs -av
  6. Montar diretório no pc_web: mount -a

Caso apareça um erro do tipo "Stale file handle" ao manipular um diretório montado remotamente (estando no computador cliente), ele indica que o compartilhamento NFS não pode ser montado por ter mudado alguma coisa desde a última configuração conhecida. Para restabelecer a normalidade, reinicie o serviço no servidor (service nfs-kernel-server restart), e no computador cliente, force a desmontagem desse diretório (umount -f /caminho/nome_do_diretorio) e remonte (mount /caminho/nome_do_diretorio).

Dica: monitore I/O e outros parâmetros instalando o programa "apt-get install sysstat" e usando o comando "iostat número_de_segundos".

Fontes

Compartilhe o link desse texto, mas se for copiar algum trecho, cite a fonte. Valorize nosso trabalho.
Mais informações na licença de uso do site.