Btrfs: pool e espelhamento de discos em Linux

O que é Btrfs
Btrfs é um sistema de arquivos avançado para Linux que integra recursos normalmente oferecidos por várias ferramentas: snapshots, pooling de dispositivos, perfis de dados (RAID) e mais. Definição curta: sistema de arquivos copy-on-write com suporte nativo a volumes compostos e perfis de dados.
Nota: Muitas funcionalidades do Btrfs já são maduras para uso pessoal e de pequenas infraestruturas. Alguns recursos avançados ainda podem apresentar instabilidade em cenários específicos; avalie antes de usar em produção crítica.
Porque usar Btrfs
- Simplifica o uso de múltiplos discos como um único espaço lógico.
- Suporta perfis de dados e metadados (single, raid0, raid1, raid10, etc.).
- Permite conversão de perfis sem refazer o filesystem do zero.
- Integra bem com snapshots para backups incrementais.
Importante: Btrfs não fornece criptografia por si só. Combine com LUKS se precisar de proteção em repouso.
Exemplo de hardware usado neste guia
Cenário de demonstração: 4 discos para pool
- /dev/sdb — 1 TB
- /dev/sdc — 1 TB
- /dev/sdd — 500 GB
- /dev/sde — 500 GB
Também existe um disco separado (/dev/sda) com boot e SO. Neste guia não mexemos em /dev/sda.
Criando um sistema de arquivos Btrfs
- Formate o primeiro disco com Btrfs:
sudo mkfs.btrfs /dev/sdb
- Monte temporariamente o ponto inicial:
sudo mount /dev/sdb /mnt
- Crie Btrfs nos outros discos (se ainda não tiverem):
sudo mkfs.btrfs /dev/sdc
sudo mkfs.btrfs /dev/sdd
sudo mkfs.btrfs /dev/sde
- Adicione os dispositivos ao pool montado:
sudo btrfs device add /dev/sdc /mnt
sudo btrfs device add /dev/sdd /mnt
sudo btrfs device add /dev/sde /mnt
- Balanceie o sistema de arquivos para distribuir blocos entre os dispositivos:
sudo btrfs filesystem balance /mnt
Alternativa: criar o filesystem já abrangendo todos os discos de uma vez:
sudo mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd /dev/sde
Explicação de perfis de dados e metadados
- -d single: dados gravados em blocos conforme disponível; útil para discos de tamanhos diferentes.
- -d raid0: striping (mais capacidade, sem redundância); requer discos do mesmo tamanho para aproveitamento ideal.
- -d raid1: espelhamento entre dispositivos; protege contra falha de um disco por espelhar blocos.
- -d raid10: combina striping e espelhamento (pares espelhados, depois striping entre pares).
Use -m para escolher o perfil de metadados (ex.: -m raid1).
Regra rápida: se discos têm tamanhos diferentes, use single ou planeje a alocação; RAID1 e RAID10 reduzem a capacidade útil conforme necessidade de espelhos.
Converter perfil RAID de um Btrfs existente
Você pode converter a disposição de dados e metadados sem destruir o conteúdo (desde que haja recursos físicos suficientes).
- Monte o filesystem caso não esteja montado:
sudo mount /dev/sdb1 /mnt
- Converta data e metadados para RAID1 (exemplo):
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
Notas:
- Substitua raid1 por outro perfil permitido.
- A conversão pode falhar se não houver espaço suficiente nos discos restantes.
- -mconvert é opcional se você só quer converter dados.
Falha de disco e recuperação
Se um disco falhar, siga este runbook de incidentes:
- Monte o pool em modo degradado:
sudo mount -o degraded /dev/sdb /mnt
- Remova dispositivos ausentes para reparar a árvore de dispositivos:
sudo btrfs device delete missing /mnt
- Verifique integridade e erros nos logs do kernel (dmesg) e btrfs:
sudo dmesg | tail -n 50
sudo btrfs scrub start -B -R /mnt
- Substitua o disco físico: conecte o novo dispositivo (ex.: /dev/sdf) e adicione ao pool:
sudo btrfs device add /dev/sdf /mnt
sudo btrfs filesystem balance start /mnt
- Quando tudo estiver equilibrado, confirme o estado:
sudo btrfs device stats /mnt
sudo btrfs filesystem df /mnt
Observação: Se não houver RAID (raid1/raid10), os dados que estavam somente no disco falhado são perdidos.
Remover um disco do pool
Para retirar um dispositivo enquanto o filesystem está montado em /mnt:
sudo btrfs device delete /dev/sdc /mnt
O comando reloca dados antes de remover o dispositivo; ele falhará se não houver espaço suficiente nos discos restantes.
Montagem automática via /etc/fstab
Exemplo básico para montagem automática (substitua dispositivos e ponto de montagem conforme seu ambiente):
/dev/sdb /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde 0 0
Opções recomendadas para grandes arrays:
compress-force=zlib,autodefrag,nospace_cache
Opções recomendadas para SSDs:
noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache
Exemplo completo para SSD (uma linha no /etc/fstab):
/dev/sdb /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde,noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache 0 0
Dicas:
- compress=lzo é mais rápido; zlib oferece melhor compressão às custas de CPU.
- discard/trim só deve ser usado com SSDs que suportem TRIM de forma segura.
- space_cache melhora desempenho em arrays grandes.
Testes e critérios de aceitação para um pool Btrfs
Use estes testes antes de colocar o pool em produção:
- Aceitação 1: O pool monta corretamente via fstab após reboot.
- Aceitação 2: btrfs filesystem df mostra capacidade esperada e offsets corretos.
- Aceitação 3: Inserir arquivo grande e verificar compressão e distribuição entre dispositivos.
- Aceitação 4: Simular remoção de um disco (btrfs device delete) e confirmar realocação de dados.
- Aceitação 5: Simular falha (desconectar disco) e executar runbook de recuperação com sucesso.
Playbook rápido para operações comuns
Adição de disco:
- Preparar disco: particione/se necessário e mkfs.btrfs (opcional).
- Montar ponto se não estiver montado: sudo mount /dev/sdb /mnt
- sudo btrfs device add /dev/sdf /mnt
- sudo btrfs filesystem balance start /mnt
- Verificar com btrfs filesystem df /mnt
Remoção de disco:
- Garantir espaço livre suficiente.
- sudo btrfs device delete /dev/sdc /mnt
- Aguardar término e verificar estado.
Converter RAID:
- Verificar número de dispositivos e espaço.
- sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
- Monitorar o progresso e logs.
Recuperação após falha:
- Montar em modo degradado.
- sudo btrfs device delete missing /mnt
- Adicionar novo dispositivo e balancear.
- Verificar integridade e logs.
Checklist por função
Administrador de sistema:
- Confirmar versões do kernel e btrfs-progs compatíveis.
- Planejar topologia de discos e perfil RAID.
- Testar balance e scrub regularmente.
Engenheiro de backup:
- Garantir snapshots frequentes.
- Validar restauração de snapshots.
- Documentar política de retenção e checkpoints.
DevOps:
- Automatizar testes de integridade (scrub) e alertas.
- Incluir checagens pós-reboot para montagem via fstab.
Quando não usar Btrfs e alternativas
Contraexemplos onde Btrfs pode não ser a melhor escolha:
- Storage crítico de alta disponibilidade em que ferramentas comprovadamente estáveis são obrigatórias.
- Situações que exigem criptografia integrada ao próprio filesystem (use LUKS + Btrfs).
Alternativas:
- mdadm + XFS/ext4 para RAID tradicional gerenciado em nível de bloco.
- LVM para gestão de volumes lógicos combinada com ext4/XFS.
- ZFS (OpenZFS) para funcionalidades similares a Btrfs com histórico diferente de maturidade e requisitos de memória.
Escolha segundo o trade-off entre recursos (snapshots, pooling nativo) e maturidade operacional.
Migração e compatibilidade
- Verifique se sua distribuição inclui btrfs-progs atualizados e suporte no kernel.
- Faça backup completo antes de qualquer conversão de perfil.
- Teste a montagem em um ambiente seguro antes de migrar dados de produção.
Segurança e privacidade
- Btrfs não faz criptografia por padrão. Para proteger dados em repouso, use LUKS/dm-crypt antes do Btrfs.
- Mantenha cópias externas (offsite) mesmo com RAID: RAID protege contra falha de hardware, não contra exclusão ou corrupção lógica.
Heurísticas e mental models
- Pool = caixa lógica onde o Btrfs coloca blocos. RAID é o perfil que dita como os blocos são replicados/striped.
- Pense em -d como regra para os dados e -m para metadados; ambos impactam capacidade e redundância.
- Perfis com espelhamento (raid1/raid10) priorizam segurança; raid0 prioriza capacidade/velocidade.
Testes de aceitação/Exemplos práticos
- Criar arquivo de 100 GB e verificar que ele distribui entre 4 discos com balance concluído.
- Desconectar um disco e validar que o sistema monta em degraded e permite remoção.
- Substituir disco defeituoso, adicionar novo e confirmar rebalanceamento.
Resumo
- Btrfs facilita criar pools de armazenamento e aplicar perfis de dados sem camadas extras.
- Planeje o layout e escolha o perfil certo para seu objetivo (capacidade vs redundância).
- Use /etc/fstab com opções otimizadas para desempenho e compressão.
- Tenha procedimentos claros para falhas, remoção e adição de discos.
Obrigado por ler. Se tiver dúvidas sobre um cenário específico (número de discos, tipos de SSD/HDD, uso em servidores), descreva seu caso e eu adapto os comandos e recomendações.
Crédito da imagem: William Hook
Materiais semelhantes

Raids Remotas no Pokémon GO: guia completo

Instalar Xfinity em casa — guia rápido

Instagram não funciona no Windows 11 — soluções

Mudar navegador padrão no Windows 11

Btrfs: pool e espelhamento em Linux
