Dia 11: Armazenamento — Partições, LVM e Sistemas de Ficheiros

O armazenamento é a espinha dorsal de qualquer servidor Linux. Compreender como criar partições, escolher o sistema de ficheiros adequado e configurar montagens persistentes no /etc/fstab distingue um administrador competente de quem apenas copia comandos. Este artigo cobre todo o fluxo: identificar discos, particionar com fdisk e parted, formatar com ext4, xfs ou btrfs, montar manualmente e tornar a montagem persistente via fstab ou systemd mount units.

Nota: Os comandos deste artigo modificam discos e partições. Executar sempre num ambiente de teste (VM ou disco secundário) antes de aplicar em produção. Um erro de partição pode destruir dados irrecuperavelmente.

1. Identificar Discos e Partições

Antes de particionar ou formatar, é necessário saber que discos existem no sistema e como estão organizados. O Linux representa discos como ficheiros de dispositivo em /dev/: discos SATA/NVMe aparecem como /dev/sda, /dev/nvme0n1, e partições como /dev/sda1 ou /dev/nvme0n1p1.

O comando lsblk lista discos e partições em formato de árvore — é a forma mais rápida de visualizar a topologia de armazenamento:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,MODEL

Para informações detalhadas sobre hardware e capacidades, usar blkid (identifica UUIDs e tipos de sistema de ficheiros) e fdisk -l (lista tabelas de partições). O blkid é particularmente importante porque o /etc/fstab usa UUIDs para identificar partições de forma estável (a nomenclatura /dev/sdX pode mudar entre reboots se a ordem de detecção dos discos variar).

sudo blkid
# Output típico:
# /dev/sda1: UUID="a3b1c2d4-..." TYPE="ext4" PARTUUID="..."

O comando df -hT mostra os sistemas de ficheiros actualmente montados, com tipo e uso de espaço. Usar em conjunto com lsblk para ter uma visão completa.

2. Tabelas de Partições: MBR vs GPT

A tabela de partições define como o disco está dividido. Existem dois padrões principais:

Característica MBR (DOS) GPT (UEFI)
Tamanho máximo do disco 2 TiB 8 ZiB
Partições primárias 4 (ou 3 + 1 extendida) 128
Redundância Não (1 cópia na cabeça do disco) Sim (2 cópias, cabeça e cauda)
Boot BIOS (Legacy) UEFI

Em sistemas modernos (2015+), GPT é o padrão. MBR ainda aparece em discos antigos ou em sistemas legacy BIOS. O fdisk suporta ambos os modos, mas parted é mais adequado para discos GPT grandes.

3. Particionar com fdisk e parted

O fdisk é o utilitário interactivo mais comum para criar partições em discos MBR e GPT. Opera com comandos de uma letra — pensar nele como um menu interactivo onde se selecciona o disco, cria-se a partição, define-se o tamanho e guarda-se.

Via fdisk

sudo fdisk /dev/sdb

# Comandos principais dentro do fdisk:
# m   — mostrar ajuda
# g   — criar tabela GPT (nova)
# o   — criar tabela MBR/DOS (legacy)
# n   — nova partição
# p   — partição primária
# 1   — número da partição
# ENTER — aceitar sector inicial (default)
# +20G — tamanho: 20 GiB
# t   — alterar tipo (ex: 8e para LVM, 83 para Linux)
# w   — escrever e sair
# q   — sair sem guardar

O parted é a alternativa não-interactiva, ideal para scripts de provisioning. Cria partições com um único comando:

Via parted

# Criar tabela GPT no disco /dev/sdb
sudo parted /dev/sdb mklabel gpt

# Criar partição de 20 GiB, começando no início do disco
sudo parted -a optimal /dev/sdb mkpart primary ext4 0% 20GiB

# Criar segunda partição com o restante espaço
sudo parted -a optimal /dev/sdb mkpart primary ext4 20GiB 100%

# Verificar resultado
sudo parted /dev/sdb print

A opção -a optimal alinha as partições ao tamanho óptimo do disco, melhorando performance. Após criar partições, o kernel precisa de ser notificado — executar sudo partprobe /dev/sdb para reler a tabela.

4. LVM — Gestão Lógica de Volumes

O LVM (Logical Volume Manager) é uma camada de abstracção que separa o espaço físico do disco daquilo que o sistema operativo vê como volumes. Funciona como um intermédio: em vez de formatar uma partição directamente, agrupa-se espaço de um ou mais discos num “pool” e cria-se volumes lógicos que podem ser redimensionados em quente (sem desmontar). A analogia clássica: o disco físico é um baralho de cartas, o volume group é a pilha onde se juntam vários baralhos, e o logical volume é a mão que se retira dessa pilha — pode-se adicionar ou remover cartas sem baralhar tudo.

LVM tem três camadas: PV (Physical Volume — disco ou partição marcada para LVM), VG (Volume Group — agrupamento de PVs) e LV (Logical Volume — o volume lógico que se formata e monta). O Dia 12 cobre LVM em profundidade; aqui fica o fluxo básico para um disco novo:

# 1. Marcar a partição como Physical Volume
sudo pvcreate /dev/sdb1

# 2. Criar Volume Group "dados_vg" com esse PV
sudo vgcreate dados_vg /dev/sdb1

# 3. Criar Logical Volume "dados_lv" de 15 GiB
sudo lvcreate -L 15G -n dados_lv dados_vg

# 4. Verificar estrutura
sudo pvdisplay
sudo vgdisplay
sudo lvdisplay

# 5. O LV aparece como dispositivo em /dev/mapper/ ou /dev/{vg}/{lv}
ls -l /dev/dados_vg/dados_lv

A vantagem principal do LVM é a flexibilidade: se o dados_lv encher, pode-se estender com lvextend sem desmontar o volume (com ext4) — basta adicionar espaço ao VG e depois estender o LV. O Dia 12 detalha snapshots, thin provisioning e extensão online.

5. Sistemas de Ficheiros: ext4, xfs, btrfs

Após criar a partição ou LV, é necessário formatá-la com um sistema de ficheiros — a estrutura que organiza como os dados são armazenados em blocos. A escolha depende do caso de uso:

Característica ext4 xfs btrfs
Maturidade Muito alta (2008) Alta (SGI IRIX, 1994) Moderada (2009)
Redimensionar Crescer e encolher Só crescer Crescer e encolher
Snapshots Não nativo Não nativo Sim (nativo)
Compressão Não Não Sim (zstd, zlib)
Distribuição padrão Debian, Ubuntu RHEL, Rocky, Alma openSUSE, Fedora
Tamanho máximo 1 EiB 8 EiB 16 EiB

Formatar com ext4

O ext4 é o sistema de ficheiros padrão em Debian/Ubuntu. É robusto, suporta journaling (registo de operações antes de as escrever no disco, permitindo recuperação rápida após falhas) e é a escolha mais segura para servidores gerais.

sudo mke2fs -t ext4 /dev/sdb1
# ou equivalentemente:
sudo mke2fs.ext4 /dev/sdb1

# Com label e opções de reserva reduzida (para dados não-sistema):
sudo mke2fs -t ext4 -L dados -m 0 /dev/sdb1

A opção -m 0 remove o espaço reservado para root (5% por defeito) — adequado para volumes de dados onde não há necessidade de garantir espaço root.

Formatar com xfs

O xfs é o padrão em RHEL/Rocky/Alma. Excelente para ficheiros grandes, alta concorrência e paralelismo. Não suporta encolher — apenas crescer com xfs_growfs.

# Instalar xfsprogs se necessário
# Debian/Ubuntu: sudo apt install xfsprogs
# RHEL/Rocky:    sudo dnf install xfsprogs

sudo mkfs.xfs /dev/sdb1

# Com label:
sudo mkfs.xfs -L dados /dev/sdb1

Formatar com btrfs

O btrfs é o sistema de ficheiros moderno com funcionalidades avançadas nativas: snapshots, compressão transparente, subvolumes, RAID por software e checksums de dados. É a escolha ideal para cenários que exigem snapshots frequentes (backups, rollbacks de sistema) ou compressão automática (log servers, VM images).

# Instalar btrfs-progs se necessário
# Debian/Ubuntu: sudo apt install btrfs-progs
# RHEL/Rocky:    sudo dnf install btrfs-progs

sudo mkfs.btrfs /dev/sdb1

# Com label e compressão activada na montagem:
sudo mkfs.btrfs -L dados /dev/sdb1

A compressão activa-se ao montar, não ao formatar. Usar a opção compress=zstd no fstab para compressão transparente com o algoritmo zstd (melhor rácio compressão/CPU).

6. Montar e Desmontar Sistemas de Ficheiros

Montar (mount) é o acto de ligar um sistema de ficheiros formatado a um directório do sistema — a partir desse momento, os ficheiros escritos nesse directório são armazenados no disco correspondente. Desmontar (umount) é a operação inversa: desligar o sistema de ficheiros do directório, garantindo que todos os dados em cache são gravados no disco.

# Criar ponto de montagem (directório)
sudo mkdir -p /mnt/dados

# Montar a partição ext4
sudo mount /dev/sdb1 /mnt/dados

# Montar com opções específicas (ex: btrfs com compressão)
sudo mount -o compress=zstd /dev/sdb1 /mnt/dados

# Verificar montagem
mount | grep sdb1
df -hT /mnt/dados

# Desmontar
sudo umount /mnt/dados

# Se "target is busy" — forçar sincronização primeiro:
sudo sync
sudo umount /mnt/dados

# Identificar processos que usam o ponto de montagem:
sudo lsof /mnt/dados
# ou
sudo fuser -m /mnt/dados

A operação sync antes de umount garante que dados em cache são gravados. Se o sistema recusar desmontar (“target is busy”), significa que algum processo tem ficheiros abertos no ponto de montagem — usar lsof ou fuser para identificar e fechar esses processos.

7. Montagens Persistentes com /etc/fstab

O ficheiro /etc/fstab (file systems table) define montagens que ocorrem automaticamente no boot. Sem ele, as montagens manuais desaparecem após reiniciar. Cada linha tem seis campos separados por espaços ou tabs:

Campo Nome Descrição
1 Dispositivo UUID, label ou /dev/path
2 Ponto de montagem Directório absoluto
3 Tipo ext4, xfs, btrfs, swap, etc.
4 Opções defaults, noatime, compress, etc.
5 Dump 0 (desactivado) ou 1 (backup dump)
6 Fsck order 0 (não verificar), 1 (root), 2 (outros)

Exemplo de entradas para os três sistemas de ficheiros. O UUID obtém-se com sudo blkid /dev/sdb1:

# /etc/fstab — entradas de exemplo

# ext4 com noatime (não actualiza timestamp de leitura — reduz I/O)
UUID=a3b1c2d4-...  /mnt/dados    ext4   defaults,noatime        0 2

# xfs (RHEL/Rocky padrão)
UUID=b4c5d6e7-...  /mnt/app      xfs    defaults                0 0

# btrfs com compressão zstd e subvolumes
UUID=c5d6e7f8-...  /mnt/backup   btrfs  defaults,compress=zstd  0 0

# swap (partição de memória virtual)
UUID=d6e7f8a9-...  none          swap   sw                      0 0

A opção noatime evita escritas ao disco cada vez que um ficheiro é lido (o default atime actualiza o timestamp de acesso em cada leitura, gerando I/O desnecessário). Para servidores com muita leitura, noatime reduz significativamente o desgaste de SSDs.

Atenção: Nunca editar o /etc/fstab sem testar a montagem primeiro. Uma entrada inválida pode impedir o sistema de arrancar. Após editar, executar sudo mount -a — se não houver erros, a configuração está correcta.

Alternativa: systemd mount units

Em sistemas com systemd, pode-se criar mount units em vez de usar o fstab. Um ficheiro /etc/systemd/system/mnt-dados.mount com a configuração de montagem. O nome do ficheiro tem de corresponder ao ponto de montagem (hifens substituem barras). Esta abordagem oferece melhor integração com dependências de boot e journalctl logging.

# /etc/systemd/system/mnt-dados.mount
[Unit]
Description=Montagem de dados em /dev/sdb1

[Mount]
What=/dev/disk/by-uuid/a3b1c2d4-...
Where=/mnt/dados
Type=ext4
Options=defaults,noatime

[Install]
WantedBy=multi-user.target

# Activar:
sudo systemctl daemon-reload
sudo systemctl enable --now mnt-dados.mount

8. Erros Comuns

Problema Causa Solução
mount: unknown filesystem type Faltam as ferramentas do filesystem (xfsprogs, btrfs-progs) Instalar o pacote: apt install xfsprogs ou dnf install xfsprogs
umount: target is busy Processos têm ficheiros abertos no ponto de montagem Usar lsof /mnt/dados para identificar e fechar processos, depois umount
Sistema não arranca após editar fstab Entrada inválida no fstab (UUID errado, tipo errado) Arrancar em recovery mode, comentar a linha problemática, ou adicionar nofail à entrada
Partição não aparece após criar Kernel não reler a tabela de partições Executar sudo partprobe /dev/sdb ou sudo partx -u /dev/sdb
xfs_growfs diz que não há espaço O LV ou partição não foi expandido antes do growfs Primeiro lvextend (LVM) ou redimensionar partição, depois xfs_growfs /mnt/ponto
Permissões erradas após montar O sistema de ficheiros foi criado por root sem ajustar ownership Após montar: sudo chown user:grupo /mnt/dados e ajustar permissões

9. Checklist de Verificação

Antes de considerar um disco configurado e pronto para produção, verificar cada ponto:

  1. Confirmar que o disco correcto foi seleccionado com lsblk — nunca operar no disco do sistema por engano.
  2. Criar a tabela de partições adequada (GPT para discos modernos, MBR apenas para compatibilidade legacy).
  3. Verificar que as partições foram reconhecidas pelo kernel com lsblk após partprobe.
  4. Formatar com o sistema de ficheiros adequado ao caso de uso (ext4 para geral, xfs para RHEL/ficheiros grandes, btrfs para snapshots/compressão).
  5. Obter o UUID com blkid e adicionar a entrada ao /etc/fstab.
  6. Testar a montagem com sudo mount -a antes de reiniciar — se houver erro, corrigir antes do reboot.
  7. Verificar permissões do ponto de montagem (chown e chmod conforme necessário).
  8. Adicionar nofail às entradas fstab de discos não-críticos — previne boot failure se o disco estiver ausente.

Artigos Relacionados