Configurar um servidor NFS no Linux é uma das formas mais rápidas de compartilhar arquivos entre máquinas na mesma rede sem instalar pilhas de software pesadas. O NFS (Network File System) permite montar um diretório remoto como se fosse um disco local, tornando-o ideal para diretórios home compartilhados, clusters de laboratório, caches de compilação e bibliotecas de mídia. Neste guia, você configurará um servidor e cliente NFS completos do zero, entenderá as principais opções do /etc/exports, escolherá entre NFSv3 e NFSv4, ajustará os tamanhos dos buffers de leitura/escrita para desempenho e persistirá as montagens de forma confiável com o /etc/fstab.
Pré-requisitos
- Duas máquinas Linux na mesma rede — uma atuando como servidor e outra como cliente. Ambas as funções também podem estar em máquinas virtuais.
- Acesso root ou
sudoem ambas as máquinas. - Acesso ao firewall na porta 2049/TCP (e portas adicionais para NFSv3, se utilizado).
- Família Debian/Ubuntu ou RHEL/Fedora/Rocky — os comandos para ambas são mostrados ao longo do guia.
- Conhecimento básico de endereçamento IP e permissões de arquivos no Linux.
Instalando o Servidor NFS
No nó servidor, instale o pacote do servidor NFS do kernel:
# Debian / Ubuntu
sudo apt update && sudo apt install -y nfs-kernel-server
# RHEL / Fedora / Rocky / AlmaLinux
sudo dnf install -y nfs-utils
Habilite e inicie o serviço para que ele sobreviva às reinicializações:
sudo systemctl enable --now nfs-server
sudo systemctl status nfs-server
Verifique se o servidor NFS está escutando na porta 2049:
ss -tlnp | grep 2049
Você deverá ver uma entrada para nfsd vinculada a 0.0.0.0:2049.
Configurando o /etc/exports
O arquivo /etc/exports é o coração da configuração do servidor NFS. Cada linha define um caminho exportado e quais clientes podem acessá-lo, junto com as opções de montagem.
Sintaxe básica:
/caminho/para/exportação especificação_cliente(opções)
Um exemplo mínimo funcional que exporta /srv/nfs para uma sub-rede inteira:
/srv/nfs 192.168.1.0/24(rw,sync,no_subtree_check)
Crie o diretório compartilhado e defina as permissões antes de exportar:
sudo mkdir -p /srv/nfs
sudo chown nobody:nogroup /srv/nfs # mapeamento anônimo típico do NFS
sudo chmod 755 /srv/nfs
Principais opções do /etc/exports explicadas:
| Opção | Significado |
|---|---|
rw | Permite acesso de leitura e escrita |
ro | Permite acesso somente leitura |
sync | Grava dados no disco antes de confirmar; mais seguro, porém mais lento |
async | Confirma gravações antes de liberar para o disco; mais rápido, mas arriscado em caso de falha |
no_subtree_check | Desativa a verificação de subárvore; reduz erros espúrios quando os arquivos são movidos |
subtree_check | Habilita a verificação de subárvore; necessária por segurança ao exportar um subdiretório |
root_squash | Mapeia o root do cliente para o usuário nobody (padrão, recomendado) |
no_root_squash | Permite que o root do cliente atue como root; use somente em ambientes totalmente confiáveis |
all_squash | Mapeia todos os clientes para o usuário anônimo |
anonuid=1000 | Define o UID para mapeamentos anônimos |
fsid=0 | Marca esta exportação como a pseudo raiz do NFSv4 |
Um arquivo de exportações pronto para produção com múltiplos compartilhamentos:
# Compartilhamento de leitura/escrita para a sub-rede da equipe de desenvolvimento
/srv/nfs/projects 192.168.10.0/24(rw,sync,no_subtree_check,root_squash)
# Repositório de ISO somente leitura disponível para todos os clientes internos
/srv/nfs/isos 192.168.0.0/16(ro,sync,no_subtree_check)
# Diretórios home compartilhados — apenas hosts específicos
/home 192.168.10.5(rw,sync,no_subtree_check) 192.168.10.6(rw,sync,no_subtree_check)
Após editar o /etc/exports, aplique as alterações sem reiniciar o servidor:
sudo exportfs -ra # recarrega todas as exportações
sudo exportfs -v # lista as exportações ativas com suas opções
Comparação entre NFSv3 e NFSv4
Escolher a versão correta do NFS é importante para segurança, configuração de firewall e suporte a recursos. Implantações modernas devem usar NFSv4 por padrão, a menos que sistemas legados exijam NFSv3.
| Recurso | NFSv3 | NFSv4 |
|---|---|---|
| Estado do protocolo | Sem estado | Com estado |
| Portas utilizadas | 2049 + dinâmicas (111, mountd, statd, lockd) | Apenas 2049 |
| Regras de firewall | Complexas — múltiplas portas dinâmicas | Simples — porta única |
| Segurança | AUTH_SYS (apenas UID/GID) | AUTH_SYS + Kerberos (RPCSEC_GSS) |
| Bloqueio de arquivos | NLM (daemon separado) | Integrado, obrigatório |
| Suporte a ACL | Apenas extensões de fornecedor | ACLs POSIX nativamente |
| Nomes de arquivos UTF-8 | Opcional | Obrigatório |
| Delegação | Não | Sim — cache no lado do cliente |
| Pseudo raiz | Não | Sim — namespace unificado |
| Recomendado para | Sistemas legados, configurações simples | Clusters Linux modernos, entre firewalls |
Para forçar uma versão específica do NFS no cliente:
# Montar usando NFSv4 explicitamente
sudo mount -t nfs4 servidor:/srv/nfs /mnt/nfs
# Montar usando NFSv3 (se exigido por servidor legado)
sudo mount -t nfs -o vers=3 servidor:/srv/nfs /mnt/nfs
Instalando o Cliente NFS e Montando Compartilhamentos
No nó cliente, instale os utilitários do cliente NFS:
# Debian / Ubuntu
sudo apt install -y nfs-common
# RHEL / Fedora / Rocky
sudo dnf install -y nfs-utils
Crie um ponto de montagem local e monte a exportação:
sudo mkdir -p /mnt/nfs
sudo mount -t nfs4 192.168.1.100:/srv/nfs /mnt/nfs
Confirme que a montagem está ativa e verifique o espaço disponível:
df -hT /mnt/nfs
mount | grep nfs
Teste o acesso de escrita a partir do cliente:
touch /mnt/nfs/testfile && echo "Acesso de escrita confirmado"
Persistindo Montagens NFS com o /etc/fstab
Uma montagem manual desaparece após a reinicialização. Adicione o compartilhamento ao /etc/fstab para torná-lo permanente:
# Formato: <servidor>:<exportação> <pontomontagem> <tipo> <opções> <dump> <pass>
192.168.1.100:/srv/nfs /mnt/nfs nfs4 defaults,_netdev 0 0
Principais opções do fstab para NFS:
| Opção | Finalidade |
|---|---|
_netdev | Atrasa a montagem até que a rede esteja ativa — essencial para NFS na inicialização |
nofail | A inicialização continua mesmo que o servidor NFS esteja inacessível |
soft | Retorna um erro se o servidor não responder (em vez de travar) |
hard | Tenta novamente indefinidamente até o servidor responder (padrão, mais seguro para dados) |
timeo=30 | Tempo limite em décimos de segundo antes de tentar novamente |
retrans=3 | Número de retransmissões antes de desistir (com soft) |
Uma entrada fstab robusta para produção:
192.168.1.100:/srv/nfs /mnt/nfs nfs4 defaults,_netdev,nofail,hard,timeo=30 0 0
Após editar o fstab, teste sem reinicializar:
sudo mount -a
df -hT /mnt/nfs
Ajuste de Desempenho: rsize e wsize
Por padrão, o NFS usa tamanhos de buffer conservadores (geralmente 1 MB em kernels modernos, mas sistemas mais antigos podem usar 32 KB ou 64 KB). Em uma LAN gigabit ou mais rápida, aumentar rsize (buffer de leitura) e wsize (buffer de escrita) para 1 MB melhora significativamente o throughput.
Montar com buffers ajustados:
sudo mount -t nfs4 -o rsize=1048576,wsize=1048576 192.168.1.100:/srv/nfs /mnt/nfs
Faça benchmark do throughput antes e depois do ajuste:
# Teste de escrita (cliente para servidor)
dd if=/dev/zero of=/mnt/nfs/testfile bs=1M count=512 conv=fdatasync
# Teste de leitura (servidor para cliente)
dd if=/mnt/nfs/testfile of=/dev/null bs=1M
Opções adicionais de desempenho:
| Opção | Efeito |
|---|---|
async (lado do servidor) | Aumenta a velocidade de escrita ao custo da segurança dos dados em caso de falha |
noatime | Desativa atualizações de tempo de acesso; reduz o tráfego de escrita para cargas de trabalho com muita leitura |
actimeo=60 | Armazena atributos de arquivo em cache por 60 segundos; reduz RPCs de metadados |
nconnect=4 | Usa múltiplas conexões TCP com o servidor (Linux 5.3+, NFSv4.1+) |
Para servidores com NVMe em uma rede 10 GbE, combine rsize=1048576,wsize=1048576,nconnect=4,noatime para throughput máximo.
Adicione as opções de ajuste ao fstab:
192.168.1.100:/srv/nfs /mnt/nfs nfs4 defaults,_netdev,nofail,rsize=1048576,wsize=1048576,noatime 0 0
Cenário Real: /home Compartilhado em um Cluster de Laboratório
Você tem um cluster de laboratório Linux com quatro nós — um nó de gerenciamento (lab-mgmt) e três nós de trabalho (lab-worker-1, lab-worker-2, lab-worker-3). Todos os nós compartilham as mesmas contas de usuário, e você quer que os usuários vejam seus diretórios home independentemente de qual nó façam login. O NFS torna isso transparente.
No lab-mgmt (servidor NFS):
# Instalar o servidor
sudo apt install -y nfs-kernel-server
# Os diretórios home já existem em /home
# Exportar /home para todos os nós de trabalho
sudo bash -c 'cat >> /etc/exports <<EOF
/home 192.168.10.11(rw,sync,no_subtree_check) 192.168.10.12(rw,sync,no_subtree_check) 192.168.10.13(rw,sync,no_subtree_check)
EOF'
sudo exportfs -ra
sudo exportfs -v
Em cada nó de trabalho (lab-worker-1/2/3):
# Instalar o cliente
sudo apt install -y nfs-common
# Criar ponto de montagem (faça backup do /home local se necessário)
sudo mount -t nfs4 192.168.10.10:/home /home
# Teste: faça login como usuário regular e verifique se os arquivos estão presentes
ls /home/jcarlos
Persistir com fstab em cada nó de trabalho:
192.168.10.10:/home /home nfs4 defaults,_netdev,hard,timeo=30,rsize=1048576,wsize=1048576 0 0
Agora, quando um usuário faz login em qualquer nó de trabalho, seu diretório home — incluindo histórico do shell, chaves SSH e arquivos de configuração — é idêntico em todos os nós. Combine isso com um /etc/passwd compartilhado ou LDAP para contas de usuário totalmente consistentes.
Armadilhas e Casos Especiais
- Incompatibilidade de UID/GID: O NFS depende de UIDs e GIDs numéricos, não de nomes de usuário. Se um usuário tem UID 1001 no servidor mas UID 1002 no cliente, eles verão os arquivos uns dos outros com o proprietário errado. Sincronize UIDs/GIDs em todos os nós com LDAP ou um
/etc/passwdcompartilhado, ou use NFSv4 comidmapd. - root_squash e operações privilegiadas: Com
root_squashhabilitado (padrão), o usuáriorootem um cliente é mapeado paranobody. Isso quebra operações comochowne alguns backups. Useno_root_squashsomente em redes internas totalmente confiáveis. - Regras de firewall para NFSv3: O NFSv3 usa portas RPC dinâmicas para
mountd,statdelockd. Fixe estas portas estáticas em/etc/sysconfig/nfse abra-as no firewall, ou mude para NFSv4, que só precisa da porta 2049. asyncvssync: A opçãoasyncmelhora o desempenho de escrita, mas dados ainda não liberados para o disco podem ser perdidos se o servidor travar. Sempre usesyncpara bancos de dados compartilhados, artefatos de compilação ou qualquer coisa em que a integridade dos dados seja importante.- Handles NFS obsoletos: Se o servidor reinicializar ou as exportações mudarem enquanto os clientes estão montados, os processos podem receber erros de “Stale file handle”. Desmonte e remonte o compartilhamento para limpar o estado obsoleto.
- Montagem automática com autofs: Para ambientes grandes, considere
autofsem vez de entradas estáticas no fstab. O Autofs monta compartilhamentos sob demanda e os desmonta quando ociosos, reduzindo o tempo de inicialização e evitando falhas quando os servidores NFS estão temporariamente indisponíveis.
Solução de Problemas
A montagem trava indefinidamente:
O cliente não consegue alcançar o servidor. Verifique a conectividade com ping, confirme que o serviço NFS está em execução no servidor (systemctl status nfs-server) e verifique se a porta 2049 está aberta (nc -zv servidor 2049).
Permissão negada na montagem:
O endereço IP do cliente não está no /etc/exports. Verifique com exportfs -v e adicione o CIDR ou hostname correto do cliente, depois execute exportfs -ra.
Arquivos pertencentes a nobody no cliente:
Incompatibilidade de UID/GID. Alinhe os UIDs entre os sistemas ou configure idmapd para mapeamento de identidade NFSv4. Verifique /var/log/syslog no servidor para erros do idmapd.
Desempenho NFS lento:
Verifique os valores de rsize e wsize com mount | grep nfs. Aumente para 1048576. Verifique também se a exportação no lado do servidor usa async, caso a velocidade de escrita seja crítica e o risco de durabilidade seja aceitável.
“exportfs: /etc/exports: No such file or directory”:
Crie o arquivo: sudo touch /etc/exports, adicione suas linhas de exportação e execute exportfs -ra.
Resumo
- O NFS compartilha diretórios de um servidor para múltiplos clientes usando um protocolo leve nativo do kernel.
- Instale
nfs-kernel-serverno servidor enfs-commonnos clientes (Debian/Ubuntu), ounfs-utilsem ambos para sistemas RHEL. - Configure as exportações no
/etc/exportscom o formato/caminho cliente(opções)e recarregue comexportfs -ra. - Prefira NFSv4 para implantações modernas: porta única (2049), conexões com estado, bloqueio integrado e melhor compatibilidade com firewall.
- Use
_netdevno/etc/fstabpara garantir que as montagens NFS aguardem a rede na inicialização, e teste commount -a. - Ajuste
rsize=1048576,wsize=1048576no cliente para transferências LAN de alto throughput; adicionenconnect=4no Linux 5.3+ para NFSv4.1 com múltiplas conexões. - Sincronize UIDs/GIDs em todos os nós para evitar incompatibilidades de permissão — o problema mais comum do NFS.