O BTRFS, criado em 2007, é um dos filesystems mais avançados atualmente disponíveis para uso. Chris Mason, seu principal desenvolvedor, começou a trabalhar no BTRFS enquanto trabalhava na Oracle e continuou o trabalho no projeto mesmo depois de virar funcionário do Facebook. Atualmente o BTRFS é mantido por uma grande comunidade de desenvolvedores incluindo representantes de empresas como Fujitsu, SUSE, Oracle e Facebook.
Uma das funcionalidades mais importantes do BTRFS é a capacidade de gerar snapshots de subvolumes (que por sua vez são diretórios “especiais”). Um snapshot é uma “foto” instantânea de um diretório. A criação de um snapshot é praticamente imediata pois efetivamente não corre nenhum tipo de cópia de dados nesse momento. Isso é possível em virtude de outra funcionalidade importante: o copy-on-write. Com o “COW” os dados só são replicados quando eles efetivamente mudam no subvolume original. Isso quer dizer que quando um dado muda o BTRFS vai manter uma cópia dos blocos originais (prévios à mudança) e o snapshot apontará para essa cópia.
Além dessas funcionalidades o BTRFS ainda é capaz de endereçar até 16-exabytes de dados, possui funcionalidade de RAID e tem a capacidade de crescer/diminuir o filesystem de forma online (adicionando ou removendo novos discos).
Na seção a seguir vamos fazer uma pequena introdução ao BTRFS.
Para essa demonstração vamos usar a distribuição CentOS (3.10.0-514.el7.x86_64) rodando no VirtualBox.
Vamos começar criando um diretório para servir de ponto de montagem para nosso filesystem. A seguir vamos formatar o /dev/sdc como BTRFS e depois montaremos o filesystem.
mkdir /btrfs mkfs.btrfs -f /dev/sdc mount /dev/sdc /btrfs
Agora vamos checar os detalhes do filesystem recém criado:
btrfs filesystem show /btrfs
Agora vamos testar os snapshots. Primeiro precisamos criar um subvolume já que não é possível gerar snapshots de diretórios “normais”:
cd /btrfs btrfs subvolume create testeVol
Em seguida criaremos 2 snapshots em momentos diferentes mostrando como os dados do subvolume se comportam durante o processo:
echo "um" > testeVol/dados.txt btrfs subvolume snapshot testeVol testeVol.snap1 echo "dois" >> testeVol/dados.txt more testeVol/dados.txt btrfs subvolume snapshot testeVol testeVol.snap2 echo "tres" >> testeVol/dados.txt
Vamos agora checar o conteúdo do arquivo datos.txt no subvolume original e nos snaphots que tiramos:
more testeVol/dados.txt more testeVol.snap1/dados.txt more testeVol.snap2/dados.txt
Na sequencia “desistiremos” de um dos snapshots e do próprio subvolume original fazendo o snapshot que sobrou tomar o lugar do subvolume original:
btrfs subvolume delete testeVol btrfs subvolume delete testeVol.snap2 mv testeVol.snap1 testeVol more testeVol/dados.txt
O BTRFS é o filesystem padrão da distribuição SUSE Linux e é oficialmente suportado por outras distribuições como o Oracle Linux.
Em um próximo post vamos abordar outras funcionalidades do BTRFS como as capacidades de RAID via software e também a remoção e adição online de novos discos.