O NFS é um serviço de rede que usa RPC (Chamada de Procedimento Remoto), e que permite o compartilhamento de arquivos e diretórios. É simples e fácil de configurar, tanto o servidor como o cliente, de uma rede baseada em NFS. O NFS é uma ferramenta poderosa, é a mais usada/indicada para montar uma rede de compartilhamento de arquivos em redes com máquinas Linux. Funciona permitindo as "máquinas" acessar arquivos em máquinas remotas, como se estivesse em um diretório da máquina local. Se o NFS for instalado junto ao NIS - Network Information System (Sistema de informação de Rede), os "usuários" podem acessar qualquer sistema e ainda trabalhar em um único conjunto de arquivos.
Para saber mais sobre o NIS acesse e leia: http://linux.unicamp.br/docs/howtos/BR-NIS-HOWTO.html
A maneira como o NFS trabalha, rapidamente, podemos dizer que quando dá-se a linha de comando:
# mount -t nfs <servidor>:/<caminho_diretório> /<diretório_local> [opções] 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. Estes pacotes, na maioria das vezes já são instalados por default, mas caso não tenham sido instalados, os pacotes são estes: # Marumbi # rpm -ivh nfs-server-2.2beta29-2.i386.rpm nfs-server-clients-2.2beta29-2.i386.rpm # Servidor 3.0 # rpm -ivh nfs-server-2.2beta40-1cl.i386.rpm nfs-server-clients-2.2beta40-1cl.i386.rpm # Guaraní 3.0 # rpm -ivh nfs-server-2.2beta37-2cl.i386.rpm nfs-server-clients-2.2beta37-2cl.i386.rpm # Ipanema 4.0 # rpm -ivh knfsd-1.4.1-5cl.i386.rpm knfsd-clients-1.4.1-5cl.i386.rpm # Servidor 4.2 # rpm -ivh knfsd-1.5.1-7cl.i386.rpm knfsd-clients-1.5.1-7cl.i386.rpm # Xavante 5.0 # rpm -ivh nfs-server-2.2beta47-1cl.i386.rpm nfs-utils-0.1.6-3cl.i386.rpm Ative-o pelo comando: [root@localhost]# ntsysv Ativar, tecle F1 para saber para que serve cada serviço. [X] netfs [X] network [X] nfs [X] nfslock [X] portmap Pode-se tambem habilitar um por um, é só dar, como root, o comando: # cds e habilitar os serviços ./<serviço> startPara configurar o NFS, temos, primeiramente que ter certza que o Kernel tem suporte a NFS e que os serviços estejam funcionando, nos kernels modernos podemos verificar isto dando o seguinte comando:
# cat /proc/filesystems ext2 nodev proc iso9660 nodev devpts nodev nfs <------ Observar a exestência deste.caso não exista, irá ser necessário recompilar o kernel e habilitar o suporte a NFS. Em kernels mais antigos a maneira mais simples de saber se está habilitado o serviço de NFS é totalmente empírica, tente montar um diretório, se o comando mount não funcionar e apresentar uma mensagem do tipo "tipo de sistema de arquivos nfs não suportado pelo kernel", será necessário compilar e habilitá-lo. Ex: (como root)
# mount localhost:/tmp /mnt
Montando um Volume NFS
Para montar volumes NFS, é usado o comando mount com o seguinte formato:
# mount -t nfs <máquina_remota>:/<diretório_remoto> /<diretório_local> [opções] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Volume NFS cabe notar que os parâmetros "-t nfs" não são necessários, pois por ser a notação própria do sistema de arquivos NFS, ele interpreta por default. Existem opções adicionais que podem ser especificadas com o comando mount. Elas pode ser informadas depois da opção -o na linha de comando, ou no campo de opções de arquivo /etc/fstab, em ambos casos, as multiplas opções devem ser separadas por vírgulas. Tenha-se em conta que as opções dadas na linha de comando tem precedencia pelas opções dadas no arquivo /etc/fstab. Exemplo de entrada do arquivo /etc/fstab: Volume NFS Diretório Tipo Opções Verifica a Local partição 192.168.255.220:/wb /wb nfs soft,bg,nosuid 0 0 192.168.255.2:/d /d nfs noauto,soft,bg 0 0 192.168.255.122:/home /home nfs soft,bg,nosuid,nolock 0 0 192.168.255.122:/faq /faq nfs soft,bg,nosuid 0 0 192.168.255.122:/faq-es /es nfs soft,bg,nosuid 0 0 192.168.255.122:/suporte /suporte nfs soft,bg,nosuid 0 0
OPÇÕES rsize=n O número de bytes que NFS usará ao ler arquivos de um servidor NFS. O valor padrão depende do kernel e normalmente é de 1.024 bytes (ainda que a velocidade de acesso cresça substancialmente ao se informar rsize=8192). wsize=n O número de bytes que NFS usará ao gravar arquivos em um servidor NFS. O valor padrão depende do kernel e normalmente é de 1.024 bytes (ainda que a velocidade de acesso cresça substancialmente ao se informar wsize=8192). timeo=n O número de décimos de segundo antes de enviar a primeira retransmissão após findo o tempo de espera de uma RPC. O valor padrão é de 7 décimos de segundo. Após a primeira espera, o tempo é dobrado após cada espera sem respostas, até um máximo de 60 segundos ou um número máximo de retransmissões ser atingido. Então, caso o sistema de arquivos esteja montado com a opção hard, cada novo tempo de espera começa com o dobro do tempo da anterior, novamente dobrando a cada retransmissão. O tempo máximo de espera é sempre de 60 segundos. Uma melhor performance pode ser atingida ao se incrementar o tempo de espera, quando se está montando sistemas sobre uma rede com muito tráfego, utilizando-se servidores lentos ou usando o sistema através de diversos roteadores e gateways. retrans=n O número de tempo limite e retransmissões que devem ocorrer antes que um alarme de tempo de resposta seja acionado. O padrão é de 3 ocorrências. Quando um alarme de tempo de espera maior ocorre, a operação é interrompida ou uma mensagem de "servidor não está respondendo" é apresentada na console. acregmin=n O tempo mínimo em segundos que os atributos de um arquivo normal devem estar em memória cache antes de solicitar novas informações para o servidor. O padrão é de 3 segundos. acregmax=n O tempo máximo em segundos que os atributos de um arquivo normal devem estar em memória cache antes de solicitar novas informações para o servidor. O padrão é de 60 segundos. acdirmin=n O tempo mínimo em segundos que os atributos de um diretório devem estar em memória cache antes de solicitar novas informações para o servidor. O padrão é de 30 segundos. acdirmax=n O tempo máximo em segundos que os atributos de um diretório devem estar em memória cache antes de solicitar novas informações para o servidor. O padrão é de 60 segundos. actimeo=n Utilizando-se actimeo, os parâmetros acregmin, acregmax, acdirmin, e acdirmax recebem o mesmo valor. Não há valor padrão. retry=n O número de minutos na tentativa de executar operações de montagem NFS em primeiro ou segundo plano antes de desistir definitivamente. O valor padrão é de 10.000 minutos, o que é quase uma semana. namlen=n Quando um servidor NFS não suporta a versão 2 do protocolo de montagem RPC, esta opção pode ser usada para especificar o tamanho máximo do nome de arquivos que é suportado pelo sistema de arquivos remoto. Esta opção é usada para suportar as funções pathconf do POSIX. O padrão é de 255 caracteres. port=n O número da porta para conexão no servidor NFS. Caso esta porta seja igual a 0 (o padrão), então será perguntado ao programa mapeador de portas do servidor, qual o número a ser usado. Caso o servidor NFS não esteja registrado no programa mapeador, a porta padrão NFS 2039 será usada. mountport=n O número da porta de mountd. mounthost=nome O nome do servidor executando mountd. mountprog=n Número de programa RPC alternativo para contatar o servidor mount no servidor remoto. Esta opção é útil para servidores que podem rodar múltiplos servidores NFS. O valor padrão é 100.005, o qual é o padrão para o número do servidor mount. mountvers=n Versão alternativa do RPC usado para contatar o servidor mount no servidor remoto. Esta opção é útil para servidores que podem executar múltiplos servidores NFS. O valor padrão é versão 1. nfsprog=n Número alternativo do programa RPC usado para contatar o servidor NFS no servidor remoto. Esta opção é útil para servidores que podem executar múltiplos servidores NFS. O valor padrão é 100.003 para o número do servidor NFS. nfsvers=n Versão alternativa do RPC usado para contatar o servidor NFS no servidor remoto. Esta opção é útil para servidores que podem executar múltiplos servidores NFS. O valor padrão é versão 2. bg Caso a primeira tentativa de montagem NFS não ocorra dentro do tempo de espera definido, tenta a montagem em segundo plano. Após a transferência para segundo plano da operação de montagem, todas as tentativas subseqüentes no mesmo servidor NFS serão transferidas para segundo plano automaticamente, sem a primeira tentativa de montagem em primeiro plano. Um ponto de montagem não encontrado é tratado como a ultrapassagem do tempo de espera, para permitir montagens NFS encadeadas. fg Caso a primeira tentativa de montagem ultrapasse o tempo de espera, tenta novamente a montagem, porém em primeiro plano. Isso complementa a opção bg, e o comportamento padrão. soft Caso uma operação NFS ultrapasse o tempo de espera, então relata um erro de E/S a o programa que a acionou. O padrão é continuar tentando a operação indefinidamente. hard Caso uma operação NFS ultrapasse o tempo de espera, então apresenta a mensagem "servidor não responde" na console e continua indefinidamente. Este é o padrão. intr Se uma operação NFS ultrapassar o tempo de espera e estiver montada com a opção hard, permite o envio de sinais de interrupção da operação e provoca um retorno EINTR para o programa de origem. O padrão é não permitir que as operações sejam interrompidas. posix Monta o sistema de arquivos usando a semântica POSIX. Isso permite que um sistema de arquivos NFS suporte adequadamente o comando POSIX pathconf através da solicitação de informações ao servidor sobre o tamanho máximo de um nome de arquivo. Para fazer isso, o servidor remoto deve suportar a versão 2 do protocolo de montagem RPC. Muitos servidores NFS suportam somente a versão 1. nocto Suprime a recuperação de novos atributos na criação de um arquivo. noac Desabilita inteiramente o cache de atributos. Esta forma de trabalho penaliza a performance de um servidor, mas permite que dois diferentes clientes NFS tenham resultados razoáveis ao utilizar ativamente um sistema de arquivos comum para gravação no servidor. tcp Monta o sistema de arquivos usando o protocolo TCP ao invés do protocolo padrão UDP. Muitos servidores NFS suportam somente UDP. udp Monta o sistema de arquivos NFS usando o protocolo UDP. Este é o padrão.
Manipulação do Arquivo exports
O arquivo exports é o arquivo que contém os diretórios que serão exportados pelo servidor para a(s) máquina(s) remota(s) da rede; pois por default o mount não permite que ninguém acesse seus diretórios, assim, aqueles diretórios que se desejam exportar, tem que estar relacionados no arquivo: /etc/exports
Exemplo de arquivo exports:
Volume a ser Máquina(s) remota(s)(opção(ões)) exportado /tmp/sol 192.168.255.202(rw,no_root_squash) /home/bugs 192.168.255.14(rw,no_root_squash) /home/slowly 192.168.255.13(rw,no_root_squash) /home/skippy 192.168.255.102(rw,no_root_squash) /usr *.conectiva(ro,no_root_squash) /mnt administrador(rw) cliente(rw)Cada vez que seja necessário acrescentar algum diretório, máquina ou alguma modificação for feita no /etc/exports, é necessário "restartar" o serviço de nfs do servidor para que as mudançãs tenham efeito, para fazer isto faça, no servidor e como root:
# cds # ./nfsd restart
OPÇÕES
insecure Permite o acesso não autenticado a partir desta máquina. unix-rpm Requer autenticação RPC (domínio UNIX) para esta máquina. Isto é requerido somente para as requisições originadas a partir de uma porta reservada Internet (isto é, portas com números menor que 1024). Esta opção está ativa por padrão. secure-rpc Requer autenticação segura RPC para esta máquina. Isto ainda não foi implementado. Veja a documentação da Sun em ``Secure RPC''. kerberos Requer autenticação Kerberos para acesso desta máquina. Isto ainda não está implementado. Veja a documentação do MIT sobre sistemas de autenticação Kerberos. root_squash Esta é uma característica de segurança que proíbe que o superusuário dos servidores especificados tenha qualquer direito de acesso especial a partir de sua identificação igual a 0 no cliente, que será alterada no servidor para 65534 (-2). Esta identificação deve ser associada ao usuário nobody. no_root_squash Não mapeia requisições do usuário com identificação 0. Esta opção é ativada por padrão. ro Monta hierarquicamente os arquivos, somente para leitura. Esta opção é usada por padrão. rw Monta hierarquicamente os arquivos, com autorizações para leitura e gravação. link_relativa Converte ligações simbólicas absolutas (onde a ligação começa com uma barra) em ligações relativas colocando os prefixos ../ que sejam necessários para obter a rota do diretório que contém a ligação para a raiz no servidor. Esta opção somente faz sentido quanto é montado um sistema de arquivos completo de uma máquina, onde algumas ligações podem apontar para arquivos inválidos, ou pior, para arquivos que nunca deveriam ser apontados. Esta opção é usada por padrão. link_absolute Deixa todas as ligações simbólicas inalteradas (é a opção normal dos servidores NFS da Sun). map_identity A opção map_identity indica ao servidor para assumir que o cliente usa as mesmas identificações de usuário e grupos que o servidor. Esta opção é usada por padrão. map_deamon Esta opção avisa o servidor NFS para assumir que o cliente e o servidor não compartilham a mesma identificação de usuários e grupos. O servidor nfsd irá então construir uma lista da identificação de mapas entre cliente e servidor, através da chamada ao servidor ugidd na máquina cliente.Para montar um servidor NFS para outras máquinas, antes de nada, deve ser executado o programa nfsd e o servidor mountd nas máquinas locais e no servidor, ainda no servidor, certifique-se que o 'portmap' tenha sido inicializado.
Para saber mais acesse:
http://linux.unicamp.br/docs/howtos/BR-NFS-HOWTO.html
Vamos supor que fosse necessário compartilhar o cdrom da máquina 1 (192.168.1.10). Para isso primeiramente monte o cdrom:
[root@localhost]# mount /dev/cdrom
Agora exporte (compartilhe) esse diretório:
[root@localhost]# linuxconf
Ambiente de rede --> NFS - sistemas de arquivos exportados --> Adicionar --> Caminho para exportar: /mnt/cdrom Aceitar Sair Sair Sair Ativar Mudanças
Lembrando que essas essa é uma configuração básica funcional, para configurações mais avançadas, como permitir que somente algumas máquinas possam acessar esses diretórios exportados, é aconselhável ler o menu de "ajuda" que está dentro de ambiente de rede, nfs, adicionar.
Inicie o serviço nfs, para isso execute:
[root@localhost]# cds
[root@localhost]# ./portmap stop
[root@localhost]# ./portmap start
[root@localhost]# ./nfs stop
[root@localhost]# ./nfs start
Agora na máquina 2 (192.168.1.12) o sr. deverá importar, ou seja, deverá montar um volume NFS (remoto 192.168.1.10) dentro do seu sistema de arquivos. Para isso execute:
[root@localhost]# linuxconf
Sistemas de arquivos --> Acessar volumes NFS --> Adicionar --> Servidor: 192.168.1.10 Volume: /mnt/cdrom Ponto de montagem: /mnt/cdrom-remoto Aceitar Sair Sair Sair Ativar Mudanças
Lembrando novamente que está é uma configuração básica funcional, para configurações avançadas veja no menu ajuda. Algumas observações a serem feitas sobre as opções acima configuradas:
servidor: é a máquina que contêm os diretórios remotos volume: é o diretório que se gostaria de importar, note que o diretório aqui especificado é o mesmo que foi exportado na máquina remota. Ponto de montagem: é um diretório qualquer no seu sistema de arquivos na qual será montado esse diretório remoto. Certifique-se que esse diretório existe na sua máquina local antes de executar esse último procedimento.Depois disso, na próxima vez que o sistema for iniciado esse diretório remoto (192.168.1.10) será montado automaticamente na máquina 192.168.1.12. Se os sistema não ativar as mudanças então para não ser necessário reiniciar o computador execute o seguinte comando na máquina 192.168.1.12:
[root@localhost]# mount 192.168.1.10:/mnt/cdrom /mnt/cdrom-remoto