Diferenças entre os sistemas de arquivos Ext4 e Btrfs

O sistema de arquivos Btrfs foi lançado no final de Julho de 2013 — é um sistema de arquivos relativamente novo, escrito do zero e que ainda está provando a que veio.
Surgiu da necessidade dos desenvolvedores de ter um sistema que incluísse pooling, snapshots e checksums, entre outros recursos — presentes também no ZFS.
ext4 vs btrfs

A pronúncia do nome, em inglês, é alvo de uma (bem leve) polêmica.
Pode ser Butter FS, Better FS ou B-Tree FS — sendo que, este último, está mais próximo do nome original.

Diferenças básicas entre o Ext4 e o Btrfs

Já que muitos usuários Linux, que desejam experimentar o novo sistema, vêm do Ext4, faz sentido enumerar alguns pontos que realçam as diferenças entre os dois:

  • O Ext4 ainda é a melhor escolha, no desktop do usuário comum — por ser mais rápido na transferência de arquivos e por ser mais maduro
  • O Btrfs tem vários recursos, que são novidades, tais com o Copy-on-Write, snapshots, checksums extensivos, scrubbing, duplicação dos dados, informações de autocorreção (self-healing) etc.
  • Os recursos de RAID-Z, presentes no ZFS, ainda são experimentais, neste momento, no Btrfs.
  • O Btrfs é fruto de um esforço patrocinado pela Oracle Corporation, Fujitsu e Red Hat — abaixo, há uma relação mais completa.
  • O Ext4 foi desenvolvido por Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts’o, Eric Sandeen, Sam Naghshineh, entre outros.
  • O Btrfs tem suporte no Linux; O Ext4 tem suporte nativo no Linux, no FreeBSD e no Android.

O Btrfs faz parte da nova geração de sistemas de arquivos do Linux, projetada para tirar o máximo dos novos dispositivos e métodos de armazenamento, como as unidades SSD.
Se você está acostumado a usar LVM e RAID para gerenciar os seus dados, o Btrfs está pronto para substituí-los.
O snapshot é um conceito semelhante à captura de telas com o PrtScr.
O recurso consiste em fazer uma cópia em imagem de um subvolume Btrfs em um determinado ponto no tempo — o que é muito mais rápido do que um backup tradicional e não implica em parar o sistema.
Você pode tirar snapshots do seu sistema quando quiser — o mais comum é fazê-lo antes de instalar algum novo programa ou fazer alterações significativas.
Este recurso permite voltar “no tempo”, se algo der errado.

A lista atual de empresas que contribuem para o código do Btrfs, é a seguinte:

  • Facebook
  • Fujitsu
  • Fusion-IO
  • Intel
  • Linux Foundation
  • Netgear
  • Novell/SUSE
  • Oracle
  • Red Hat
  • STRATO AG

Quais são os recursos disponíveis no Btrfs

À medida em que as unidades de armazenamento vão aumentando suas capacidades e os SSD caminham para se tornar padrão de mercado, espera-se que os sistemas de arquivos façam sua escalada para atender às novas demandas que a tecnologia impõe.

No artigo Introdução ao sistema de arquivos Btrfs, explicamos, com maior riqueza de detalhes, os recursos presentes no sistema.

Até o momento, a capacidade do Btrfs, inclui os seguintes itens:

  • Capacidade de armazenamento de arquivos com tamanhos de até 2^64 byte == 16 EiB (Em função do VFS do Linux, o limite prático é 8 EiB)
  • Empacotamento de arquivos pequenos, para fazer uso eficiente do espaço.
  • Diretórios indexados, também para uso eficiente do espaço.
  • Alocação dinâmica de inodes.
  • Um snapshot pode ser alterável (writable) ou não (read-only).
  • Suporte a subvolumes — sistemas de arquivos raiz internos e separados.
  • Checksums sobre dados e metadados (crc32c)
  • Compressão por algoritmos zlib ou LZO.
  • Suporte a dispositivos múltiplos integrados.
  • Recursos de detecção de armazenamento em SSD ou flash — com suporte nativo a TRIM/Discard, com relatório de blocos livres para reuso.
  • Backup incremental eficiente.
  • Processo de limpeza (scrub) em background para encontrar e corrigir erros em arquivos com cópias redundantes.
  • Desfragmentação online.
  • Verificação do sistema de arquivos offline.
  • Conversão local de sistemas de arquivos Ext3 ou Ext4.
  • Dispositivos semente ou semeadores — Em inglês, são chamados seed devices.
    Refere-se a capacidade de criar sistemas de arquivos (apenas de leitura) que funcionam como moldes para criar outros sistemas de arquivos Btrfs.
  • Suporte a quota em subvolumes.
  • Relatórios de mudanças em subvolumes.
  • Espelhamento incremental eficiente de sistemas de arquivos.

Outros recursos estão em desenvolvimento para o sistema, o que inclui:

  • Checagem offline e mais rápida do sistema de arquivos.
  • Checagem online do sistema de arquivos.
  • Remoção e espelhamento no nível do objeto.
  • Algoritmos de checksum alternativos.
  • Deduplicação in-band (ocorre durante as gravações).
  • Adição de outros algoritmos de compressão: Snappy, LZ4.

Referências

https://help.ubuntu.com/community/btrfs.
https://btrfs.wiki.kernel.org/index.php/Main_Page.
http://www.differencebtw.com/difference-between-btrfs-and-ext4/.

Introdução ao sistema de arquivos ZFS

O atual ZFS é um sistema de arquivos avançado, projetado para dar respostas a uma série de problemas encontrados em outros projetos de sistemas de arquivos.
Nascido nos laboratórios da Sun, o atual desenvolvimento em código aberto do projeto faz parte do OpenZFS Project.
O Z File System ou ZFS tem 3 grandes alvos:

  1. Integridade de dados — Cada informação armazenada inclui um checksum de si mesma.
    Quando dados são gravados, o checksum é calculado e gravado junto.
    O checksum será calculado novamente, a cada leitura. Se os dois resultados não coincidirem, o sistema avisa sobre a presença de erro.
    havendo redundância de dados disponível, o ZFS vai sempre tentar corrigir automaticamente os erros que encontrar.
  2. Checksum algorythm ou algoritmo de soma de verificação é um método usado para verificar a integridade de dados, que tenham trafegado ou sido gravados em alguma mídia.

  3. storage pools — O conceito se refere a um conjunto de dispositivos físicos ou virtuais, reunidos em um pool ou reservatório.
    A este pool, novos dispositivos sempre podem ser adicionados.
    Quando algum espaço é alocado em um pool de armazenamento, este pode ser disponibilizado a todo o sistema de arquivos.
  4. Performance — Um mecanismo de caching múltiplo ajuda a melhorar a performance do sistema.
    O ZFS conta com o ARC, um sistema de leitura de cache, baseado na memória.
    Um segundo nível de leitura de cache, baseado em disco pode ser adicionado, com o L2ARC.
    Por fim, há um sistema de escrita assíncrona em disco, também disponível, chamado ZIL.

Ao final deste texto, há um glossário com termos relacionados ao ZFS. Consulte-o sempre que precisar.

O que diferencia o ZFS de outros sistemas

O ZFS é significativamente diferente de outros sistemas (principalmente anteriores), por que é mais do que apenas um sistema de arquivos.
Com a combinação de papéis entre o gestor de volumes e o sistema de arquivos, o ZFS provê vantagens exclusivas.
Sua arquitetura permite que o sistema de arquivos saiba o que ocorre na camada inferior da estrutura de discos.
Sistemas tradicionais, só poderiam ser criados um em cada disco. Havendo dois discos, dois sistemas de arquivos deveriam ser criados — um para cada.
Em uma configuração RAID, seria possível contornar este problema — apresentando ao sistema de arquivos um único disco lógico, formado pelo espaço somado de vários discos físicos ou virtuais. Neste caso, o sistema “pensa” que está lidando com apenas um único dispositivo de armazenamento.
O ZFS atua em conjunto com o gestor de volumes e permite a criação de vários sistemas de arquivos em um pool de armazenamento.
Uma das maiores vantagens da onisciência do ZFS em relação ao layout físico das mídias de armazenamento é que isto permite aos sistemas de arquivos crescer à medida em que novos dispositivos são adicionados ao pool. O novo espaço se torna disponível a todo o sistema de arquivos.
O ZFS também possui a capacidade de aplicar diferentes propriedades a cada sistema de arquivos que compõe seu ecossistema — o que pode tornar vantajoso ter vários deles, além de datasets, no lugar de trabalhar com um único sistema monolítico.

Requisitos do sistema

Por ter sido originalmente projetados para o sistema UNIX da Sun, Solaris, o ZFS foi considerado por muito tempo como um sistema de arquivos moldado para grandes servidores e para companhias em condições (financeiras) de manter os melhores e mais poderosos hardwares disponíveis no mercado — portanto, fora da realidade dos pequenos PCs.
O fato é que depois de ter sido portado para inúmeras outras plataformas de código aberto (BSD, Illumos e Linux — sob a tutela da organização OpenZFS), estes requerimentos caíram.
Além disto, os sistemas dos PCs também se tornaram mais robustos, o que contribuiu para que a tecnologia se tornasse mais acessível.
logo oficial openzfs
Atualmente, os requisitos de sistema de hardware são:

  • memória ECC — que não é obrigatório, mas é fortemente recomendado.
  • de 8 a 16 GB de espaço em disco, pelo menos, para obter melhor performance.
    É possível usar o ZFS em espaços menores (e eu uso). Contudo, para usufruir de recursos avançados de deduplicação, por exemplo, vai ser necessário ter mais espaço de armazenamento.
  • Como limitação, se você pretende inicializar o sistema de um dataset ZFS, não é possível criar um root pool com mais discos físicos do que é suportado pelo seu hardware (BIOS).
    Este limite é, usualmente, 8 discos.
    Alguns softwares de virtualização, como o VirtualBox, pode lidar apenas com 4.

Diante disto, é seguro afirmar que qualquer máquina atual atende, com folga, os pré-requisitos para instalar e usar o ZFS.
Além disto, recomenda-se usar o kernel Linux mais atual possível, em um sistema 64 bit.

Como instalar suporte ao ZFS no Linux

A implementação prática do suporte via FUSE, no Debian, é abordada no artigo Como implementar suporte ao sistema de arquivos ZFS no Debian.

Terminologia do ZFS

Se você está estudando o assunto, ou deseja entender melhor alguns termos usados neste artigo, segue um pequeno glossário do tema.

  • boot environment — se refere ao ambiente inicializável — Oracle Solaris, GNU/Linux etc. — que consiste de um sistema raíz ZFS e, eventualmente, outros sistemas de arquivos montados embaixo dele.
    Um único boot environment pode estar ativo a cada vez.
  • checksum — um hash de 256-bit de dados em um bloco do sistema (system block).
    A capacidade do checksum varia do simples e rápido fletcher4 a hashes criptograficamente robustos, tais como o SHA256.

    O Fletcher checksum é um algoritmo desenvolvido por John G. Fletcher nos laboratórios da Lawrence Livermore, nos anos 70.
    O algoritmo oferece propriedades de detecção de erros como o mínimo de esforço computacional.

  • clone — é um sistema de arquivos, cujo conteúdo é idêntico ao de um snapshot.
  • dataset — Nome genérico dado a um dos seguintes componentes de um sistema de arquivos ZFS:
    1. clone
    2. sistema de arquivos
    3. snapshot
    4. volume

    Cada dataset é identificado por um nome único em um espaço de nomes ZFS (ZFS namespace), de acordo com o seguinte formato:
    pool/path[@snapshot] em ‘pool’ é o nome do pool de armazenamento que contém o dataset e ‘path’ é o caminho ou endereço do componente.
    O nome entre colchetes se refere a um componente opcional que identifica o snapshot do dataset.

  • mirror — é um dispositivo virtual que armazena cópias de dados idênticas em dois ou mais discos.
    Se qualquer um dos discos dentro de um mirror (espelho) falhar, outro disco pode prover os mesmos dados.
  • pool — se refere a um grupo lógico de dispositivos dentro de um layout de armazenamento.
    O espaço em disco para acomodar os datasets (componentes de um sistema ZFS) é alocado em um pool.
    Em uma tradução livre, o termo storage pool quer dizer tanque de armazenagem ou reservatório de armazenamento.
  • RAID-Z — é um dispositivo virtual que armazena dados e paridades em múltiplos discos.
  • resilvering — é o processo de copiar dados de um dispositivo a outro.
    Por exemplo, se um dispositivo espelho (mirror) for retirado ou substituído, os dados de um outro espelho atualizado são copiados para dentro do novo dispositivo que for colocado no lugar.
  • snapshot — uma cópia apenas-para-leitura (read-only copy) de um sistema de arquivos ou de um volume, em um determinado ponto no tempo.
  • dispositivo virtual — é um dispositivo lógico dentro de um pool, que pode ser um dispositivo físico, um arquivo ou uma coletânea de dispositivos.
  • volume — é um componente ZFS (dataset) que representa um dispositivo de bloco. Um dispositivo usado para swap, por exemplo, é um volume ZFS.

Referências

https://elias.praciano.com/2016/01/como-instalar-suporte-ao-sistema-de-arquivos-zfs-no-debian/
https://docs.oracle.com/cd/E23824_01/html/821-1448/ftyue.html#scrolltoc
https://www.freebsd.org/doc/handbook/zfs.html
http://zfsonlinux.org/faq.html