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 sudo em 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çãoSignificado
rwPermite acesso de leitura e escrita
roPermite acesso somente leitura
syncGrava dados no disco antes de confirmar; mais seguro, porém mais lento
asyncConfirma gravações antes de liberar para o disco; mais rápido, mas arriscado em caso de falha
no_subtree_checkDesativa a verificação de subárvore; reduz erros espúrios quando os arquivos são movidos
subtree_checkHabilita a verificação de subárvore; necessária por segurança ao exportar um subdiretório
root_squashMapeia o root do cliente para o usuário nobody (padrão, recomendado)
no_root_squashPermite que o root do cliente atue como root; use somente em ambientes totalmente confiáveis
all_squashMapeia todos os clientes para o usuário anônimo
anonuid=1000Define o UID para mapeamentos anônimos
fsid=0Marca 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.

RecursoNFSv3NFSv4
Estado do protocoloSem estadoCom estado
Portas utilizadas2049 + dinâmicas (111, mountd, statd, lockd)Apenas 2049
Regras de firewallComplexas — múltiplas portas dinâmicasSimples — porta única
SegurançaAUTH_SYS (apenas UID/GID)AUTH_SYS + Kerberos (RPCSEC_GSS)
Bloqueio de arquivosNLM (daemon separado)Integrado, obrigatório
Suporte a ACLApenas extensões de fornecedorACLs POSIX nativamente
Nomes de arquivos UTF-8OpcionalObrigatório
DelegaçãoNãoSim — cache no lado do cliente
Pseudo raizNãoSim — namespace unificado
Recomendado paraSistemas legados, configurações simplesClusters 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çãoFinalidade
_netdevAtrasa a montagem até que a rede esteja ativa — essencial para NFS na inicialização
nofailA inicialização continua mesmo que o servidor NFS esteja inacessível
softRetorna um erro se o servidor não responder (em vez de travar)
hardTenta novamente indefinidamente até o servidor responder (padrão, mais seguro para dados)
timeo=30Tempo limite em décimos de segundo antes de tentar novamente
retrans=3Nú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çãoEfeito
async (lado do servidor)Aumenta a velocidade de escrita ao custo da segurança dos dados em caso de falha
noatimeDesativa atualizações de tempo de acesso; reduz o tráfego de escrita para cargas de trabalho com muita leitura
actimeo=60Armazena atributos de arquivo em cache por 60 segundos; reduz RPCs de metadados
nconnect=4Usa 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/passwd compartilhado, ou use NFSv4 com idmapd.
  • root_squash e operações privilegiadas: Com root_squash habilitado (padrão), o usuário root em um cliente é mapeado para nobody. Isso quebra operações como chown e alguns backups. Use no_root_squash somente em redes internas totalmente confiáveis.
  • Regras de firewall para NFSv3: O NFSv3 usa portas RPC dinâmicas para mountd, statd e lockd. Fixe estas portas estáticas em /etc/sysconfig/nfs e abra-as no firewall, ou mude para NFSv4, que só precisa da porta 2049.
  • async vs sync: A opção async melhora o desempenho de escrita, mas dados ainda não liberados para o disco podem ser perdidos se o servidor travar. Sempre use sync para 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 autofs em 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-server no servidor e nfs-common nos clientes (Debian/Ubuntu), ou nfs-utils em ambos para sistemas RHEL.
  • Configure as exportações no /etc/exports com o formato /caminho cliente(opções) e recarregue com exportfs -ra.
  • Prefira NFSv4 para implantações modernas: porta única (2049), conexões com estado, bloqueio integrado e melhor compatibilidade com firewall.
  • Use _netdev no /etc/fstab para garantir que as montagens NFS aguardem a rede na inicialização, e teste com mount -a.
  • Ajuste rsize=1048576,wsize=1048576 no cliente para transferências LAN de alto throughput; adicione nconnect=4 no 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.

Artigos Relacionados