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.
- 1. Identificar Discos e Partições
- 2. Tabelas de Partições: MBR vs GPT
- 3. Particionar com fdisk e parted
- 4. LVM — Gestão Lógica de Volumes
- 5. Sistemas de Ficheiros: ext4, xfs, btrfs
- 6. Montar e Desmontar Sistemas de Ficheiros
- 7. Montagens Persistentes com /etc/fstab
- 8. Erros Comuns
- 9. Checklist de Verificação
- Artigos Relacionados
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.
/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:
- Confirmar que o disco correcto foi seleccionado com
lsblk— nunca operar no disco do sistema por engano. - Criar a tabela de partições adequada (GPT para discos modernos, MBR apenas para compatibilidade legacy).
- Verificar que as partições foram reconhecidas pelo kernel com
lsblkapóspartprobe. - Formatar com o sistema de ficheiros adequado ao caso de uso (ext4 para geral, xfs para RHEL/ficheiros grandes, btrfs para snapshots/compressão).
- Obter o UUID com
blkide adicionar a entrada ao/etc/fstab. - Testar a montagem com
sudo mount -aantes de reiniciar — se houver erro, corrigir antes do reboot. - Verificar permissões do ponto de montagem (
chownechmodconforme necessário). - Adicionar
nofailàs entradas fstab de discos não-críticos — previne boot failure se o disco estiver ausente.
Artigos Relacionados
- Dia 2: Sistema de Ficheiros Linux — FHS, Mounts e Links — Fundamentos da hierarquia de directórios e links simbólicos, base para compreender montagens.
- Dia 12: LVM em Profundidade — PV, VG, LV, Snapshots — Continuação deste artigo com LVM avançado, snapshots e extensão online.
- Dia 14: Backups e Recuperação — rsync, tar, BorgBackup — Estratégias de backup que dependem de compreender o armazenamento subjacente.
- Dia 10: SSH — Configuração, Chaves e Hardening — Acesso remoto para administrar armazenamento em servidores.
- Expandir a Partição/Filesystem em Linux — Guia prático de expansão de partições existentes no kbase.pt.