bcachefs: Filesystem Moderno com Snapshots e Erasure Coding

O bcachefs é um sistema de ficheiros Linux moderno que combina compressão, encriptação, snapshots, dispositivos replicados e erasure coding num único filesystem nativo. Desenvolvido por Kent Overstreet, foi incluído no kernel Linux 6.7 — mas, após desentendimentos com o Linus Torvalds, foi marcado como “externally maintained” no 6.17 e removido do kernel mainline a partir do 6.18: desde então distribui-se como módulo externo (DKMS), tal como o ZFS. Continua a oferecer uma alternativa ao ZFS e Btrfs sem as restrições de licenciamento CDDL.

1. Introdução ao bcachefs

O bcachefs evoluiu a partir do bcachefs (block cache), um módulo de cache de bloco introduzido em 2013. Ao longo de uma década, Kent Overstreet transformou-o num filesystem completo com funcionalidades que rivalizam com ZFS e Btrfs: compressão transparente, encriptação nativa, snapshots, dispositivos replicados (RAID) e erasure coding.

Ao contrário do ZFS (licenciado sob CDDL, incompatível com GPL), o bcachefs é licenciado sob GPL, mas desde o kernel 6.18 vive fora do mainline: instala-se como módulo DKMS (os kernels 6.12-6.17 ainda trazem o código, com o 6.17 marcado como “externally maintained”, e o suporte oficial do site cobre o Linux 6.16 e mais recentes).

ℹ Da inclusão no 6.7 à remoção no 6.18

O bcachefs foi incluído no kernel Linux 6.7 e manteve-se no mainline até ao 6.17 (marcado como “externally maintained”). A partir do kernel 6.18 o código foi removido e o projecto distribui-se como módulo DKMS — os kernels recentes só têm bcachefs com o módulo instalado.

As principais funcionalidades incluem: compressão zstd e lz4, encriptação encriptação de filesystem inteiro (ChaCha20/Poly1305), snapshots nativos com subvolumes, dispositivos replicados (RAID-1) com data_replicas, erasure coding Reed-Solomon e verificação de integridade com somas de verificação (CRC32C, CRC64, XXHash).

⚠ Estado experimental

O rótulo experimental foi oficialmente removido com as bcachefs-tools v1.38.6 (Junho de 2026) e o erasure coding saiu do experimental na v1.37. Ainda assim, a remoção do mainline reduziu a cadência de correcções e o suporte das distribuições é desigual — não usar em produção sem backups e sem testar o módulo DKMS no kernel em uso.

O site oficial bcachefs.org e a Arch Wiki são as melhores fontes de documentação actualizada.

2. Formatar e Montar

Para usar bcachefs, é necessário um kernel 6.7 ou superior e o utilitário bcachefs instalado (pacote bcachefs-tools na maioria das distribuições).

Atenção — comandos destrutivos: bcachefs format apaga TODOS os dados do dispositivo de destino sem confirmação e sem possibilidade de recuperação. Nos exemplos com múltiplos dispositivos (--replicas=2, --ec), todos os discos indicados são formatados. Verificar duas vezes o identificador do dispositivo (lsblk) antes de executar — um /dev/sda errado destrói o disco errado.
# Formatar filesystem
sudo bcachefs format /dev/sda1
# Montar
sudo mount -t bcachefs /dev/sda1 /mnt/bcachefs

O comando bcachefs format cria um novo filesystem no dispositivo especificado. Por defeito, cria um filesystem single-device sem compressão nem encriptação. Para automatizar a montagem no arranque, adicionar uma entrada em /etc/fstab com o tipo bcachefs.

Para verificar o estado do filesystem após formatação, usar o comando bcachefs fsck, que verifica a integridade das estruturas internas e somas de verificação.

3. Compressão e Encriptação

O bcachefs suporta compressão transparente com zstd (recomendado) e lz4. A compressão é aplicada por-extent e não afecta ficheiros já escritos. Para activar compressão na formatação:

# Compressão zstd
sudo bcachefs format --compression=zstd /dev/sda1

Para encriptação, o bcachefs usa ChaCha20/Poly1305 (AEAD) com a chave derivada da frase-passe via scrypt — uma construção superior ao AES-XTS típico de camadas de bloco, porque cada extent guarda nonce e MAC próprio, formando uma cadeia de confiança até ao superblock. A encriptação é de filesystem inteiro (definida na formatação, não por disco individual):

# Com encriptação
sudo bcachefs format --encrypted /dev/sda1
sudo bcachefs unlock /dev/sda1

Após format --encrypted, é pedida uma frase-passe. O comando bcachefs unlock desbloqueia o dispositivo antes da montagem. Para automatizar no arranque, usar bcachefs unlock -k session com chaveiro do kernel.

4. Snapshots

O bcachefs suporta snapshots nativos via subvolumes. Um snapshot é uma cópia pontual do estado do filesystem que partilha os dados com o original (copy-on-write). Criar um snapshot é instantâneo e não consome espaço adicional até que os ficheiros sejam modificados.

# Snapshots
sudo bcachefs subvolume create /mnt/bcachefs/snap1

Os subvolumes podem ser montados independentemente, permitindo reversão rápida para um estado anterior. Para listar subvolumes, usar bcachefs subvolume list. Para eliminar um snapshot, usar bcachefs subvolume delete.

Ao contrário do Btrfs, os snapshots do bcachefs são sempre recursivos — um snapshot de um subvolume inclui todos os subvolumes descendentes. Isto simplifica a gestão mas requer atenção ao planeamento da hierarquia de subvolumes.

5. Dispositivos Replicados e Erasure Coding

O bcachefs suporta múltiplos dispositivos com replicação e erasure coding nativos. A replicação (dispositivos replicados) é equivalente ao RAID-1 — cada extent é escrito em N dispositivos simultaneamente. Para configurar replicação com 2 cópias:

# Replicated devices (RAID-1)
sudo bcachefs format --replicas=2 /dev/sda1 /dev/sdb1

O erasure coding é uma alternativa mais eficiente em espaço — em vez de replicar dados inteiros, usa paridade Reed-Solomon para tolerar falhas com menos armazenamento. Activa-se com a opção ec na formatação (ou via bcachefs set-fs-option), e a redundância deriva de data_replicas — 2 equivale a um RAID-5 (1 paridade), 3 a um RAID-6 (2 paridades). A opção --durability é outra funcionalidade: indica que um dispositivo (ex.: um array RAID de hardware) já conta como N réplicas:

# Erasure coding (data_replicas=2 → paridade simples, tipo RAID-5)
sudo bcachefs format --ec --data_replicas=2 /dev/sda1 /dev/sdb1 /dev/sdc1

Com --ec --data_replicas=2 em 3 dispositivos, o bcachefs escreve dados e paridade (P+Q) em stripes distribuídos, tolerando a falha de 1 dispositivo com overhead próximo de 50% em vez dos 100% da replicação tripla (--replicas=3). Nota: a documentação oficial marca o erasure coding como ainda em desenvolvimento (--erasure_code: DO NOT USE YET na man page) — para produção, replicação com data_replicas=2 continua a ser a opção conservadora.

Para verificar o estado e integridade do filesystem, o comando bcachefs fsck verifica somas de verificação, estruturas B-tree e consistência dos dados:

# Verificar estado
sudo bcachefs fsck /dev/sda1

6. bcachefs vs ZFS vs Btrfs

A tabela seguinte compara as três principais opções de filesystems avançados no Linux. Cada um tem vantagens e desvantagens consoante o cenário de utilização.

Funcionalidade bcachefs ZFS Btrfs
Licença GPL (mainline) CDDL (externo) GPL (mainline)
Compressão zstd, lz4 zstd, lz4, gzip zstd, lz4, zlib
Encriptação nativa Sim (ChaCha20/Poly1305) Sim (nativo 2.2+) Não (fscrypt)
Snapshots Sim (recursivos) Sim (hierárquicos) Sim (por subvolume)
Erasure coding Sim (nativo) Sim (RAID-Z) Limitado
Maturidade Já não experimental (v1.38.6, jun/2026) — mas fora do mainline desde o 6.18 Produção Estável (parcial)
Adicionar dispositivos Online Online (vdevs) Online

O bcachefs destaca-se pela combinação de licenciamento GPL, erasure coding nativo e encriptação integrada. O ZFS continua a ser a opção mais madura para produção, mas exige módulos externos fora da árvore do kernel. O Btrfs é estável para casos de uso simples (single-device, snapshots), mas o suporte RAID-5/6 ainda tem advertências.

7. Erros Comuns e Lista de Verificação

Erros frequentes ao trabalhar com bcachefs e como evitá-los. Seguir a lista de verificação antes de usar em qualquer cenário que não seja experimental.

Erro Causa Solução
Kernel não suporta bcachefs Kernel < 6.7 ou kernel sem bcachefs Actualizar o kernel, ou instalar o módulo bcachefs via DKMS (necessário em kernels 6.18+)
mount: unknown filesystem type bcachefs-tools não instalado Instalar bcachefs-tools
Device não desbloqueia no arranque Passphrase não no chaveiro Configurar chaveiro ou initramfs
fsck encontra erros Shutdown incorrecto / erro Correr fsck –repair e reportar erro
Espaço não libertado após eliminar Snapshots retêm dados Eliminar snapshots antigos

✓ Lista de Verificação

✓ Kernel com bcachefs (6.7-6.17 no mainline, ou módulo DKMS no 6.16/6.18+)
bcachefs-tools instalado e acessível
Backup de dados antes de formatar
Passphrase de encriptação guardada em local seguro
Snapshots planeados antes de criar subvolumes
Dispositivos redundantes para dados críticos
fsck executado após formatação inicial
Teste de recuperabilidade (simular falha de dispositivo)