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: 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
|
# Servidor 5.1
# rpm -ivh nfs-server-2.2beta47-1cl.i386.rpm nfs-utils-0.1.8-3cl.i386.rpm
|
# Desktop e Servidor 6.0
# rpm -ivh nfs-server-2.2beta47-3cl.i386.rpm nfs-utils-0.2-2cl.i386.rpm
|
Ative-o pelo comando:
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:
e habilitar os serviços
Para configurar o NFS, temos, primeiramente que ter certeza 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 existência deste.
|
Caso não exista, poderá 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
|
Nota: O aparecimento da opção nodev nfs no arquivo
/proc/filesystems não é necessariamente
obrigatória para indicar que existe suporte a NFS no kernel
utilizado. Portanto, o teste acima indicado é
necessário para verificação de tal
suporte.
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:
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_daemon 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: linux.unicamp.br/docs/howtos/BR-NFS-HOWTO.html