Este documento descreve os conceitos e configuração básicos do NFS (Network File System) no Linux. Inicialmente aborda o que é o NFS e como funciona, permitindo partilhar diretórios e ficheiros através da rede como se fossem locais. Em seguida, explica os passos para instalar e configurar um servidor e cliente NFS, incluindo a exportação e montagem de diretórios remotos e o uso de ferramentas como autofs para automontagem.
4. A partilha de ficheiros numa rede de computadores é sem duvida um dos serviços
mais importantes, pois é basicamente através dos ficheiros que os utilizadores e as
máquinas trocam informações pela rede.
Assim, a habilidade de partilhar ficheiros é um serviço fundamental de qualquer
rede, tornando indispensável para todos os sistemas operativos de rede o suporte à
partilha de ficheiros pela rede.
O Linux é um sistema perfeito para este serviço, porque fornece uma gama extensa
de mecanismos de partilha de ficheiros, que integram desde os clientes Microsoft
Windows, clientes Unix e outros clientes que não são compatíveis com qualquer um
destes numa rede única e coesa.
Desta forma, iremos abordar inicialmente o que é o NFS e posteriormente estudar
como funciona o NFS (Network File System), utilizando exemplos práticos realizados
nas sessões.
Ilustração 1 - NFS
3
UFCD 0840 - Servidores Web
5. O NFS, originalmente desenvolvido pela Sun Microsystems, permite partilhar
directorias e ficheiros através de uma rede.
Através do NFS os utilizadores e programas acedem a pastas partilhadas localizadas
em sistemas remotos como se fossem ficheiros locais.
O NFS é um sistema cliente/servidor. O cliente usa as directorias remotos como se elas
fizessem parte de seu sistema físico, o servidor torna directorias disponíveis para
partilha.
Anexar uma directoria remota a um sistema de ficheiro local é chamado de montar
uma directoria. O ato de oferecer partilha de pastas é chamado de exportar uma
directoria.
O NFS é um protocolo de chamada a procedimento remoto (RPC – Remote
Procedure Calls) que é executado em simultâneo com os protocolos UDP e TCP/IP.
Uma chamada de procedimento remoto simplesmente é uma chamada de sistema
que é processada por um servidor remoto.
Quando um programa fizer uma chamada de I/O (Entrada/Saída) para um ficheiro
NFS, a chamada é interceptada pelo sistema de arquivos NFS, e é enviada através
da rede ao servidor remoto para processamento.
Ilustração 2 - Network file system
4
UFCD 0840 - Servidores Web
6. Na implementação de um sistema NFS para exportar directorias de trabalho dos
utilizadores, é importante que as quotas definidas no servidor NFS sejam válidas e
que se encontrem activas nos sistemas dos clientes NFS.
O servidor NFS deve dispor do serviço rpc.rquotad activo para que as quotas sejam
válidas no cliente, este processo normalmente é activado pelo script de controlo do
NFS.
A configuração do ficheiro rpc.rquotad deve ser implementada no servidor, onde
serão atribuídas as quotas em disco para os clientes, tal como se os valores dessas
mesmas quotas estivessem sidos definidos localmente.
Ilustração 3 - Quotas NFS
5
UFCD 0840 - Servidores Web
7. O protocolo RPC (Remote Procedure Call) é um dos protocolos de aplicação mais
utilizados, pois permite que sejam criadas aplicações cliente servidor num ambiente
de rede sem que o programador tenha a necessidade de implementar um protocolo.
O protocolo RPC estende o conceito de chamada a procedimentos locais. O objetivo
do protocolo será tornar transparentes chamadas a procedimentos cujo código está
localizado em servidores remotos. O sistema procura tornar as mensagens trocadas
para a invocação do procedimento e retorno de parâmetros transparente para o
utilizador.
A figura abaixo representa a sequência executada quando uma chamada a um
procedimento é executada a partir de um cliente.
Ilustração 4 - Remote Procedure Call
A figura não mostra um acesso anterior realizado na porta 111 do servidor, onde está
a escutar um processo chamado portmapper. O portmapper é responsável por
6
UFCD 0840 - Servidores Web
8. realizar o mapeamento dos procedimentos remotos operados pelo servidor e a porta
onde está o servidor do procedimento propriamente dito.
Os daemons que processam as solicitações do NFS no servidor não têm números de
porta UDP padrão. Ao invés disto, a eles são atribuídos dinamicamente um número
de porta pelo portmapper do RPC. Em alguns sistemas, o programa portmapper é
chamado de rpc.portmap ou simplesmente portmap.
Então, o portmap é um servidor que converte chamadas RPC em números de portas
de rede. Assim, quando um servidor RPC é iniciado ele abre a porta 111, que é a
padrão do portmappers, desta forma, quando um cliente quer utilizar algum serviço
RPC ele contata o portmapper e descobre qual é a porta atribuída ao serviço
desejado.
7
UFCD 0840 - Servidores Web
9. Através do NFS é possível montar diretorias partilhadas remotamente como se
fossem dispositivos locais. O NFS precisa estar preparado no kernel, seja nativo ou
carregado como módulo, tanto no servidor quanto no cliente.
Para montar dispositivos remotos, é necessário que o daemon /sbin/rpc.portmap
esteja ativo no cliente e no servidor. A sua execução é controlada através do script
/etc/init.d/portmap start|stop|restart ou /etc/rc.d/rc.portmap start|stop|restart.
Para que uma máquina possa oferecer diretorias através do NFS, é necessário ativar
os daemons:
/usr/sbin/rpc.rquotad
/usr/sbin/rpc.nfsd
/usr/sbin/rpc.mountd
/usr/sbin/rpc.lockd
/usr/sbin/rpc.statd
A execução de todos esses daemons é unificada através do script /etc/rc.d/init.d/nfs
start|stop|restart ou /etc/rc.d/rc.nfsd start|stop|restart.
As partilhas são configuradas através do arquivos /etc/exports. Cada linha contém
uma directoria partilhada seguida de uma lista, separada por espaços, dos IP´S
clientes que poderão montá-los. Cada IP cliente pode estar acompanhado de
parênteses imediatamente à sua direita, sem que haja espaço depois dele, contendo
opções de acesso para o mesmo.
Exemplo de partilha em /etc/exportfs:
8
UFCD 0840 - Servidores Web
10. Ilustração 5 - /etc/exportfs
A directoria /home/Carlos/Transferências 10.0.0.92 poderá ser montada pelo cliente,
de forma a ser acedida com permissões de leitura e escrita .
Para atualizar as alterações feitas ao ficheiro /etc/exportfs no servidor NFS ativo, é
necessário executar o comando exportfs -a. Para desativar as partilhas em
/etc/exports, executar exportfs -ua.
No cliente, o próprio comando mount é usado para montar a directoria remota.
O comando nfsstat mostra estatísticas de uso dos compartilhamentos NFS no servidor,
vejamos um exemplo:
9
UFCD 0840 - Servidores Web
12. Permissões Definição
Activa a opção de leitura e escrita nesse
rw volume NFS. Por padrão isso é desactivo,
o padrão é ro.
Esta opção não terá efeito caso o async
seja definido. O Servidor NFS
normalmente demora a fazer um comit
de escrita para disco e se o NFS Server
suspeitar que há outra requisição
solicitando a gravação. Isso permite que
no_wdelay
múltiplas solicitações de gravações
requisitadas sejam tranferidas para o
disco. Se o servidor de NFS recebe
pequenos pedidos relacionados, este
comportamento pode realmente
diminuir a performance, assim
no_wdelay está disponível como off. Por
padrão a opção wdelay é on.
Esta opção desactiva a verificação do
subtree, que tem implicações de
segurança média, mas pode melhorar a
confiabilidade em algumas
circunstâncias.
Se um subdirectório de um sistema de
no_subtree_check
arquivo é exportado, o servidor deve
verificar não só o arquivo que é acedido
no sistema de arquivo apropriado (que é
mais fácil) mas também o que esta na
árvore exportada (que é mais difícil).
11
UFCD 0840 - Servidores Web
13. Esta opção permite que o Servidor NFS
viole o protocolo NFS e responda ao
pedido antes de quaisquer alterações
feitas nos ficheiros. Ao usar esta opção
geralmente melhora o desempenho, mas
async
existe custo de perder a integridade dos
dados em caso de um crash no servidor,
isso pode causar danos, perdas ou dados
corrompidos.
Esta opção é baseada na opção do IRIX
NFS. Normalmente, se um servidor
exporta dois sistemas de arquivos que
estão dentro de um só, então o cliente
terá que montar dois sistemas de
arquivos explicitamente para ter acesso
nohide
aos dois.
É usado para certificar que os arquivos
dentro das directorias somente são
no_root_squash acedidas pelo root, se o sistema de
arquivos é exportado com a opção
no_root_squash, então o arquivo é
acedido com mais direitos em geral.
12
UFCD 0840 - Servidores Web
14. Para procedermos à instalação do servidor NFS, utilizamos o comando “sudo apt-get
install portmap nfs-kernel-server”, vejamos o exemplo:
Ilustração 7 - sudo apt-get install portmap nfs-kernel-server
O próximo passo é irmos ao ficheiro /etc/exportfs, é neste ficheiro que especificamos o
nome dos sistemas de ficheiros, as estações clientes que a eles podem aceder, bem como
as políticas segundo as quais estes espaços em disco podem ser acedidos:
13
UFCD 0840 - Servidores Web
15. Ilustração 8 - /etc/exportfs
Depois de modificarmos o ficheiro /etc/exports é necessário exportar as partilhas,
através do comando “sudo exportfs -ra” para que as alterações tenham efeito.
Para arrancar o serviço NFS é necessário ter o serviço Portmap a funcionar, para tal
usamos o seguinte comando “sudo /etc/init.d/portmap restart”:
Ilustração 9 - sudo /etc/init.d/portmap restart
14
UFCD 0840 - Servidores Web
16. Para iniciarmos e reiniciarmos o servidor NFS, precisamos de digitar o comando “sudo
/etc/init.d/nfs-kernel-server restart”
Ilustração 10 - sudo /etc/init.d/nfs-kernel-server restart
15
UFCD 0840 - Servidores Web
17. O procedimento da instalação do cliente NFS, executa-se através do seguinte
comando “sudo apt-get install portmap nfs-common”:
Ilustração 11 - sudo apt-get install portmap nfs-common
Depois de instalado passaremos então para a sua configuração para isso é necessário
usar o comando mount directamente na linha de comandos da estação cliente,
especificando o nome ou IP do servidor, a directoria da máquina remota e o ponto
de montagem na máquina local, como se pode ver no exemplo seguinte:
16
UFCD 0840 - Servidores Web
18. Ilustração 12 - Efectuar a associação de uma dada directoria na árvore de directorias do cliente a
um sistema de ficheiros remotos
17
UFCD 0840 - Servidores Web
19. Para nos livrarmos da perda tempo a efectuar a montagem de todos os espaços em
disco necessários numa estação cliente sempre que esta arranque, os espaços em disco
a montar no cliente podem ser previamente especificados no ficheiro de configuração
/etc/fstab. Assim sempre que uma estação arranca este ficheiro será lido e os espaços
montados nas directorias especificadas. Par que tal aconteça basta alteramos o
ficheiro fstab de modo a incluir a montagem de um espaço em disco proveniente de
outra máquina da sua bancada, a linha a acrescentar no ficheiro é a seguinte
“10.0.0.49:Transferências /mntpoint nfs rw,hard,intr 0 0”:
Ilustração 13 - sudo gedit fstab
18
UFCD 0840 - Servidores Web
21. Como se pode observar nos passos anteriores, o sistema de mounts do Linux torna-se
pouco prático porque obriga a usar o comando “mount” constantemente. Para
resolver este problema foram criados os serviços “amd” e “autofs” que fazem mount
automaticamente (automount), sempre que alguém usa os volumes de dados
correspondentes, vamos utilizar o autofs, para procedermos à instalação do mesmo
usamos o comando “sudo apt-get install autofs”:
Ilustração 15 - sudo apt-get install autofs
Em seguida vamos montar a pedido qualquer directoria /home/etc/auto.home, na
máquina cliente, para tal abrimos o documento /etc/auto.master e adicionamos a
linha acima referida:
20
UFCD 0840 - Servidores Web
22. Ilustração 16 - /etc/auto.master
O próximo passo passa pela criação do ficheiro /etc/auto.home, e nele adicionamos a
seguinte linha “* 10.0.0.92.netlab.estv.ipv.pt:/export/home/&”, o IP inserido
corresponde ao IP do nosso servidor.
Ilustração 17 - /etc/auto.home
21
UFCD 0840 - Servidores Web
23. Feita a instalação e configuração do autofs, vamos reiniciar o serviço através do
comando “sudo /etc/init.d/autofs start”:
Ilustração 18 - Reiniciar autofs
22
UFCD 0840 - Servidores Web
24. Neste trabalho aprendemos que o protocolo NFS é um dos clássicos em sistemas
Linux, permite a exportação e o mapeamento de directorias e sistemas de ficheiros
entre servidores/clientes.
A configuração deste serviço em Linux é relativamente simples como tivemos
oportunidade de demonstrar.
Apesar de simples, as funcionalidades do NFS utilizadas em ambientes distribuídos
são bastantes importantes, permitem-nos aceder a ficheiros pessoais ou de trabalho
em diversos servidores dentro de uma rede local e de uma forma transparente.
23
UFCD 0840 - Servidores Web
25. O presente trabalho teve como base:
O livro Gestão de Sistemas de Redes Linux, cap. 20 – NFS;
http://www.techienote.com/2010/10/file-sharing-in-ubuntu-with-nfs.html#more-
833;
http://ubuntuguide.net/share-ubuntu-folders-to-specifical-computer-with-nfs;
http://www.vivaolinux.com.br/artigo/Configurando-um-servidor-NFS-em-4-
passos;
http://www.youtube.com/watch?v=d9uokz7yzPg&feature=related;
http://www.vivaolinux.com.br/artigo/Configurando-um-servidor-NFS-em-4-
passos;
http://www.youtube.com/watch?v=d9uokz7yzPg&feature=related;
http://ajmoreti.blogspot.com/2009/10/exports-sistema-de-arquivos-nfs-
ser.html;
http://lcnsqr.byethost9.com/?sec=lpic&exam=102&node=26;
http://www.slideshare.net/luiz_arthur/redes-prtica-nfs;
Algumas imagens foram retiradas do site:
http://www.google.pt/imghp?hl=pt-pt&tab=wi;
24
UFCD 0840 - Servidores Web