Inicialmente é necessário ter um kernel com o suporte a sistemas de arquivo NFS compilado ou como um módulo. Isso deve ser configurado antes da compilação do kernel. Caso não se tenha feito isto, por favor verifique o Como Fazer - Kernel para instruções sobre como proceder. Caso se esteja utilizando uma distribuição muito boa (como o Conectiva Linux) e nunca se tenha lidado com o kernel ou módulos, nfs está magicamente à sua disposição.
Pode-se agora, na linha de comandos do superusuário, informar o comando de montagem apropriado e o sistema de arquivos estará disponível. Continuando com nosso exemplo anterior, desejamos montar /mn/parolin/local a partir de parolin. Isso deve ser feito através do seguinte comando:
mount -o rsize=1024,wsize=1024 parolin:/mn/parolin/local /mnt
(Retornaremos posteriormente às opções rsize e wsize). O sistema de arquivos está agora disponível sob /mnt e pode-se acessá-lo através do comando cd, assim como verificar o seu conteúdo através do comando ls, e observar os arquivo individualmente. Pode-se perceber que ele não é tão rápido quando um sistema local, mas muito mais amigável que o uso do ftp. Se, ao invés de montar um sistema de arquivos, o comando mount apresente uma mensagem de erro como mount:parolin:/mn/parolin/local falhou, razão fornecida pelo servidor: Permissão negada, então o arquivo exports contém algum erro. Caso ele informe mount clntudp_create: RPC: Programa não registrado isso significa que os programas nfsd ou mountd não estão sendo executados no servidor.
Para desmontar o sistema de arquivos basta comandar:
umount /mnt
Para que um sistema de arquivos nfs seja montado na inicialização do sistema operacional, deve-se editar o arquivo /etc/fstab da forma usual. No caso de nosso exemplo, deve-se adicioar a seguinte linha:
# dispositivo pto.montagem tipo_sist_arqs opções dump ordem verif. ... parolin:/mn/parolin/local /mnt nfs rsize=1024,wsize=1024 0 0 ...
Bem, parece tudo. Quase. Continue a leitura por favor.
Há algumas opções que devem ser consideradas. Eles definem a forma como o cliente NFS lida com uma queda do servidor ou da rede. Um dos aspectos mais interessantes sobre NFS é que ele lida com estas situações com elegância, desde que o cliente esteja corretamente configurado. Há dois tipos distintos de parâmetros de tratamento de falhas:
O cliente NFS reporta um erro ao processar o acesso a um arquivo localizado em um sistema de arquivos montado via NFS. Alguns programas podem lidar com isto com compostura, outros não. Esta opção não é recomendada.
O programa que acessa um arquivo em um sistema de arquivos montado via NFS irá travar sempre que o servidor não responder. O processo não pode ser interrompido ou finalizado a menos que se tenha especificado intr. Quando o servidor NFS esteja novamente ativo, o programa irá continuar a partir do ponto onde tenha parado. Isso é provavelmente o que se deseje. Recomendamos o uso do parâmetro hard,intr em todos os sistemas de arquivos montados via NFS.
A partir do exemplo anterior, esta seria a entrada no arquivo fstab:
# dispositivo pto.montagem tipo_sist_arqs opções dump ordem verif. ... parolin:/mn/parolin/local /mnt nfs rsize=1024,wsize=1024,hard,intr 0 0 ...
Normalmente, caso as opções rsize e wsize seja especificados, o NFS irá ler e gravar blocos de 4096 e 8172 bytes. Algumas combinações de kernel do Linux e placas de rede não podem lidar com blocos grandes e não podem ser otimizados. Então vamos tentar descobrir como encontrar os parâmetros rsize e wsize que funcionem da maneira mais otimizada possível. É possível testar a velocidade das opções com um simples comando. Dado o comando mount conforme descrito acima, logo temos acesso de gravação ao disco, podendo executar um teste de performance de gravação seqüencial:
time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096
Este comando criará um arquivo de 64 Mb de bytes zerados (que deve ser grande o suficiente para que o cache não altere significativamente a performance. Pode ser usado um arquivo maior caso o sistema local tenha muita memória). Isso pode ser feito algumas vezes (5-10?), para que se possa ter uma média bem fundamentada. Neste casos, o importante é medir o tempo de "relógio" e o tempo efetivamente gasto na conexão. Após, pode-se testar a performance da leitura ao se ler o arquivo de volta:
time dd if=/mnt/testfile of=/dev/null bs=16k
Isso pode ser feito algumas vezes. Após deve-se executar o comando mount e umount novamente com tamanhos maiores em rsize e wsize. Eles devem ser provavelmente múltiplos de 1024, e não maior que 16384 visto que este é o tamanho máximo do NFS versão 2. Exatamente após a montagem de um tamanho maior, acesse o sistema de arquivos montado através do comando cd e explore-o através do comando ls, para estar seguro que ele está funcionando perfeitamente. Caso os parâmetros rsize/wsize sejam muito grandes, os sintomas não são muito óbvios. Um típico sintoma é uma lista incompleta dos arquivos produzida pelo comando ls e nenhuma mensagem de erro. Ou ao se ler um arquivo ele falha misteriosamente, sem mensagens de erro. Após definir que os parâmetros rsize/wsize funcionam perfeitamente deve-se executar os testes de performance. SunOS e Solaris tem a reputação de funcionar muito melhor com blocos de 4096 bytes.
kernels mais recentes do Linux (desde o 1.3) executam a leitura antecipada para rsizes maiores ou iguais ao tamanho de página da máquina. Em máquinas Intel o tamanho de página é de 4.096 bytes. A leitura adiantada aumenta significativamente a performance de leitura do NFS. Ou seja, sempre que possível deve-se usar o rsize de 4.096 bytes em máquinas Intel.
Lembre-se de editar o arquivo /etc/fstab com os valores de rsize/wsize encontrados.
Uma sugestão para incrementar a performance de gravação do NFS é desabilitar o sincronismo de gravação do servidor. A especificação NFS indica que a gravação NFS solicitada não pode ser considerada finalizadas antes dos dados serem gravados em um meio não volátil (normalmente o disco rígido). Isso restringe a performance de gravação de alguma forma, enquanto que gravações assíncronas irão aumentar a velocidade do NFS. O servidor Linux nfsd nunca faz gravações síncronas uma que a própria implementação do sistema de arquivos não o faz, mas em servidores em sistemas operacionais diferentes isso pode aumentar a performance através do seguinte parâmetro no arquivo exports:
/dir -async,access=linuxbox
ou algo similar. Por favor verifique a página de manual online da máquina em questão. Cabe salientar que esta opção aumenta o risco de perda de dados no caso de algum problema ocorrer antes da efetiva gravação dos dados.