Página seguinte Página anterior Índice

72. sistema/rede/nfs

72.1 Como configurar o NFS ?

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> start
Para 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

72.2 Como exportar um volume pela rede usando o nfs?

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


Página seguinte Página anterior Índice