Guia de tecnologias

Btrfs: pool e espelhamento de discos em Linux

7 min read Linux Atualizado 25 Sep 2025
Btrfs: pool e espelhamento em Linux
Btrfs: pool e espelhamento em Linux

pool-de-armazenamento-com-btrfs

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

gerar-btrfs-na-particao

  1. Formate o primeiro disco com Btrfs:
sudo mkfs.btrfs /dev/sdb
  1. Monte temporariamente o ponto inicial:
sudo mount /dev/sdb /mnt
  1. 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
  1. 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
  1. 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).

  1. Monte o filesystem caso não esteja montado:
sudo mount /dev/sdb1 /mnt
  1. 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

pilha-de-hdds-btrfs

Se um disco falhar, siga este runbook de incidentes:

  1. Monte o pool em modo degradado:
sudo mount -o degraded /dev/sdb /mnt
  1. Remova dispositivos ausentes para reparar a árvore de dispositivos:
sudo btrfs device delete missing /mnt
  1. Verifique integridade e erros nos logs do kernel (dmesg) e btrfs:
sudo dmesg | tail -n 50
sudo btrfs scrub start -B -R /mnt
  1. 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
  1. 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-fstab-btrfs

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:

  1. Preparar disco: particione/se necessário e mkfs.btrfs (opcional).
  2. Montar ponto se não estiver montado: sudo mount /dev/sdb /mnt
  3. sudo btrfs device add /dev/sdf /mnt
  4. sudo btrfs filesystem balance start /mnt
  5. Verificar com btrfs filesystem df /mnt

Remoção de disco:

  1. Garantir espaço livre suficiente.
  2. sudo btrfs device delete /dev/sdc /mnt
  3. Aguardar término e verificar estado.

Converter RAID:

  1. Verificar número de dispositivos e espaço.
  2. sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
  3. Monitorar o progresso e logs.

Recuperação após falha:

  1. Montar em modo degradado.
  2. sudo btrfs device delete missing /mnt
  3. Adicionar novo dispositivo e balancear.
  4. 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

Autor
Edição

Materiais semelhantes

Raids Remotas no Pokémon GO: guia completo
Jogos

Raids Remotas no Pokémon GO: guia completo

Instalar Xfinity em casa — guia rápido
Internet

Instalar Xfinity em casa — guia rápido

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

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

Mudar navegador padrão no Windows 11
Windows 11

Mudar navegador padrão no Windows 11

Btrfs: pool e espelhamento em Linux
Linux

Btrfs: pool e espelhamento em Linux

Instalar CyanogenMod 12.1 no Lenovo A2010
Android Custom ROMs

Instalar CyanogenMod 12.1 no Lenovo A2010