Como montar e automatizar partições com fstab corretamente

1. Introdução ao fstab e sua importância no Linux

O arquivo /etc/fstab (File System Table) é um dos pilares da inicialização do Linux. Ele define como e onde os sistemas de arquivos devem ser montados automaticamente durante o boot. Sem ele, cada partição precisaria ser montada manualmente com o comando mount após cada reinicialização — algo inviável em servidores e estações de trabalho produtivas.

A diferença entre montagem manual e automatizada é crucial: enquanto mount /dev/sda1 /mnt funciona apenas na sessão atual, uma entrada no fstab garante que a montagem ocorra sempre que o sistema iniciar. Os cenários de uso incluem discos internos (raiz, home, boot), SSDs, partições de backup, dispositivos removíveis e até sistemas de arquivos remotos como NFS e Samba.

2. Estrutura detalhada de uma linha no fstab

Cada linha do fstab contém seis campos obrigatórios, separados por espaços ou tabulações:

<dispositivo>  <ponto_de_montagem>  <tipo>  <opções>  <dump>  <pass>

Exemplo completo:

UUID=1234-5678  /mnt/dados  ext4  defaults,noatime  0  2

Explicação dos campos:

  1. Dispositivo: Pode ser o caminho do dispositivo (/dev/sda1), UUID ou LABEL. UUID é preferível por ser imutável mesmo se a ordem dos discos mudar.
  2. Ponto de montagem: Diretório onde o sistema de arquivos será acessível (ex: /mnt/backup).
  3. Tipo: Sistema de arquivos (ext4, ntfs, vfat, nfs, cifs).
  4. Opções: defaults (rw, suid, dev, exec, auto, nouser, async) ou combinações como noatime, noexec, nodev, nosuid.
  5. Dump: 0 (não fazer backup) ou 1 (fazer backup com dump). Geralmente 0.
  6. Pass: Ordem de verificação com fsck (0 = ignorar, 1 = raiz, 2 = demais partições).

Identificando UUIDs:

sudo blkid

Exemplo de saída:

/dev/sda1: UUID="a1b2c3d4-..." TYPE="ext4"
/dev/sdb1: UUID="ABCD-1234" TYPE="vfat"

3. Montando partições comuns de forma segura

Partição ext4 (Linux nativo)

UUID=a1b2c3d4-...  /home  ext4  defaults,noatime  0  2

Partição NTFS (Windows)

UUID=...  /mnt/windows  ntfs-3g  defaults,uid=1000,gid=1000,umask=022,fmask=113,dmask=002  0  0
  • uid=1000,gid=1000: Define proprietário como o primeiro usuário
  • umask=022: Permissões 755 para diretórios
  • fmask=113: Permissões 644 para arquivos

Partição FAT32 (dispositivos USB)

UUID=ABCD-1234  /mnt/usb  vfat  defaults,uid=1000,gid=1000,umask=002  0  0

4. Automatizando montagens de dispositivos removíveis e redes

Dispositivos removíveis com nofail

UUID=...  /mnt/externo  ext4  defaults,nofail,x-systemd.automount  0  2
  • nofail: Impede falha no boot se o dispositivo não estiver presente
  • x-systemd.automount: Monta sob demanda (apenas quando acessado)

Compartilhamento NFS

servidor:/export  /mnt/nfs  nfs  defaults,noatime,timeo=30,retrans=3  0  0

Compartilhamento Samba/CIFS (com credenciais seguras)

Crie um arquivo de credenciais /etc/samba/credenciais:

username=usuario
password=senha
domain=dominio

Proteja o arquivo:

sudo chmod 600 /etc/samba/credenciais

Linha no fstab:

//servidor/compartilhamento  /mnt/samba  cifs  credentials=/etc/samba/credenciais,uid=1000,gid=1000,iocharset=utf8,nofail  0  0

5. Gerenciamento de falhas e recuperação

A opção nofail é essencial para dispositivos que podem não estar presentes (USB, HD externo). Sem ela, se o dispositivo não for encontrado, o boot trava com uma mensagem de emergência.

O campo pass controla a ordem do fsck:

  • pass=1: Raiz (/) — verificado primeiro
  • pass=2: Demais partições — verificadas em paralelo depois da raiz
  • pass=0: Ignorar verificação (útil para NTFS, FAT e sistemas remotos)

Diagnóstico de problemas:

# Verificar erros relacionados ao fstab no boot
dmesg | grep fstab

# Logs do systemd-fstab-generator
journalctl -u systemd-fstab-generator

# Testar montagem sem reiniciar
sudo mount -a

6. Boas práticas de segurança e desempenho

Segurança:

  • Evite umask=000 em partições compartilhadas (permite qualquer acesso)
  • Use noexec em partições de dados para prevenir execução de scripts maliciosos:
    text UUID=... /mnt/dados ext4 defaults,noexec,nodev,nosuid 0 2
  • Prefira uid/gid específicos em vez de permissões abertas

Desempenho:

  • noatime: Desabilita atualização do tempo de acesso (reduz escrita em disco)
  • discard: Habilita TRIM para SSDs (libera blocos não utilizados)
  • commit=60: Atrasta a sincronização de metadados (reduz escrita, mas aumenta risco de perda em queda de energia)

Exemplo otimizado para SSD:

UUID=...  /  ext4  defaults,noatime,discard,commit=30  0  1

7. Exemplos práticos e validação da configuração

Exemplo completo de fstab

# /etc/fstab
UUID=raiz-uuid  /  ext4  defaults,noatime,discard  0  1
UUID=home-uuid  /home  ext4  defaults,noatime  0  2
UUID=swap-uuid  none  swap  sw  0  0
UUID=dados-uuid  /mnt/dados  ext4  defaults,noexec,nodev,nosuid  0  2
//servidor/backup  /mnt/backup  cifs  credentials=/etc/samba/credenciais,uid=1000,nofail  0  0
servidor:/export  /mnt/nfs  nfs  defaults,noatime,nofail  0  0

Testar sem reiniciar

# Montar todas as entradas do fstab
sudo mount -a

# Verificar montagens ativas
findmnt --verify

# Verificar árvore de montagem
findmnt

Script de backup do fstab original

#!/bin/bash
# backup_fstab.sh
BACKUP_DIR="/root/backup_fstab"
mkdir -p "$BACKUP_DIR"
DATA=$(date +%Y%m%d_%H%M%S)
cp /etc/fstab "$BACKUP_DIR/fstab.backup.$DATA"
echo "Backup salvo em: $BACKUP_DIR/fstab.backup.$DATA"

Execute antes de qualquer alteração:

sudo chmod +x backup_fstab.sh
sudo ./backup_fstab.sh

8. Solução de problemas comuns

Erro de UUID incorreto

Sintoma: "UUID=... não encontrado" no boot.

Solução: Localize o UUID correto com:

sudo blkid

Edite o fstab e substitua pelo UUID correto.

Permissões negadas em montagens NTFS/CIFS

Sintoma: Acesso negado ao diretório montado.

Solução: Ajuste uid, gid e umask:

# Descobrir seu UID e GID
id usuario

# Exemplo corrigido
UUID=...  /mnt/windows  ntfs-3g  defaults,uid=1000,gid=1000,umask=022  0  0

Se estiver usando SELinux ou AppArmor, verifique as políticas:

# Para SELinux
sudo restorecon -Rv /mnt/ponto_de_montagem

# Para AppArmor
sudo aa-status | grep mount

Montagem duplicada ou conflitante

Sintoma: "mount: /mnt/ponto já montado" ou o sistema monta no local errado.

Solução:

# Verificar montagens ativas
mountpoint /mnt/ponto

# Recarregar configurações do systemd
sudo systemctl daemon-reload

# Remover montagem manual e testar novamente
sudo umount /mnt/ponto
sudo mount -a

Referências