Sistema de Arquvivos NFS

O NFS permite que usuários tenham acesso a arquivos localizados remotamente, de maneira transparente ao usuário, e que possam realizar as mesmas operações do que àquelas possíveis sobre um arquivo local: ler, gravar, editar arquivos etc. A exemplo de outas aplicações Internet, o NFS está baseado em um sistema cliente-servidor, onde um servidor NFS processa os pedidos e responde aos clientes, utilizando o protocolo de transporte UDP.

O protocolo NFS (um dos três componentes da aplicação que leva o mesmo nome) foi projetado para ser independente de computador, sistema operacional, arquitetura de rede e de protocolo de transporte. Esta independência é atingida através do uso de RPC - Remote Procedure Call - um mecanismo que providencia uma interface orientada a procedimentos para serviços remotos e ao uso de XDR - eXternal Data Representation - uma especificação padrão de representação de um conjunto de tipos de dados em uma rede, o que resolve o tipo de representação de dados na comunicação entre diferentes computadores.

Existe uma grande variedade de implementações do protocolo NFS versão 2 para todos os tipos decomputadores, desde computadores pessoais até supercomputadores. Atualmente o protocolo NFS encontra-se em sua versão 3.


Uma Visão Geral do NFS 

Cliente NFS:

 Um cliente NFS roda em um computador arbitrário e acessa os arquivos em um computador que possui um servidor NFS. A função de servidor NFS é frequentemente deixada para um computador com razoavel capacidade em disco (uma grande capacidade seria mais interessante), ao contrário do cliente, que pode inclusive não ter nenhum dispositivo de armazenamento. 

            Quando uma aplicação no computador onde roda um cliente NFS chama a operação abrir para obter acesso a um arquivo, o sistema operacional utiliza a sintaxe do nome do caminho para escolher entre procedimentos para acessar o arquivo local ou o arquivo remoto. A figura 1 mostra como funciona a resolução de arquivos no cliente NFS.

                              Figura 1 - Resolução de arquivos em um cliente

O redirecionador passa o controle sobre o arquivo solicitado ou para o sistema de arquivo local ou para o cliente NFS, dependendo do resultado da sintaxe do nome do caminho (path name) interceptado a partir da aplicação. Desta maneira, se o arquivo solicitado não for local, será necessário o cliente NFS a partir de uma requisição ao servidor NFS, obter o arquivo remoto e permitir seu acesso ao usuário da aplicação, de forma totalmente transparente.

Operação do Cliente NFS:

 A aplicação NFS foi projetada para acomodar sistemas computacionais heterogêneos, e desta forma a sintaxe do path name usada pelo sistema de arquivo remoto pode diferir daquela do computador cliente. Um exemplo seria quando há um cliente NFS rodando em um computador que usa o MS-DOS conectando-se para um servidor NFS rodando em UNIX: o cliente utiliza backslash (\) como um caractere separador, enquanto o sistema de arquivo servidor utiliza slash (/).

 Para acomodar as potenciais diferenças entre a sintaxe do path name entre cliente e servidor, o NFS segue a seguinte regra:

somente o lado cliente interpreta path name completos. Para traçar um path name completo a partir de um sistema de diretório hierárquico do servidor, o cliente envia cada componente do path name por vez. Por exemplo, se o cliente que utiliza slash como separador, necessitar visualizar um path name /a/b/c em um servidor, ele inicia pela obtenção da informação sobre o diretório root do servidor. Ele então pergunta pelo nome a naquele diretório e o servidor envia de volta ao cliente a informação sobre a. O mesmo processa é feito com restante do path name, até o cliente obter a informação referente ao arquivo c. A desvantagem deste processo seria a troca de informação através da rede para cada componente no path e a vantagem é o fato de aplicações em um dado computador poderem acessar arquivos remotos usando a mesma sintaxe para o path name usado por eles como arquivos locais.

Servidor NFS

Para configurar um sistema como servidor, o administrador do sistema indica área do disco na qual será acessível pela rede. A confuguração dos dados exportados a partir do servidor é tipicamente armazenada no arquivo /etc/exports. Um exemplo de um arquivo exports é dado a seguir:

 /usr/Shultz -ro

/home/snoopy -access=genova.lcmi.ufsc.br 

Diversas porções do disco podem ser exportados com diferentes controles de acesso. No exemplo acima o dado em /usr/Shultz - e todo os dados abaixo de /usr/Shultz - é exportado como somente leitura para o mundo. O árvore de diretório /home/snoopy é exportado para o sistema genova.lcmi.ufsc.br como com permissão de acesso de leitura-escrita. Para acessar os dados em /home/snoopy no sistema tortona.lcmi.ufsc.br, o administrador do sistema deveria ter os seguintes comandos:

mkdir /usr/usrs/snoopy

mount tortona.lcmi.ufsc.br:/home/snoopy /usr/usrs/snoopy

O comando mount associa um sistema de arquivo de rede com um path local. Não é necessário para o nome local ser o mesmo que o nome remoto. Uma vez que a montagem tenha sido completada com sucesso, os dados em /usr/usrs/snoopy/ pode ser acessados no cliente exatamente como se ele estivesse no disco local.

 

Figura 2 - Configuração de acesso do servidor NFS

 Como a figura 2 ilustra, os arquivos do diretório Snoopy podem ser acessados pelo cliente NFS rodando no computador genova, obtidos a partir do servidor NFS rodando no computador tortona (onde localiza-se realmente o diretório Snoopy).