A evolução do procfs para o sysfs

O Linux herdou do UNIX a metodologia para permitir que programas se informassem sobre os processos em andamento no sistema diretamente das estruturas armazenadas na memória do kernel —— ou seja, lendo diretamente o /dev/mem e interpretando os dados “nus e crus” contidos ali.
Era assim que o comando ps funcionava inicialmente.
Com o tempo, parte da informação passou a ser disponibilizada através de system calls.
Expor dados do sistema diretamente ao espaço do usuário, via /dev/mem se provou uma metodologia ineficiente e insegura, com o tempo.
Um novo método foi introduzido para facilitar o acesso a aos dados estruturados do sistema para os aplicativos do user-space — que foi a criação do sistema de arquivos /proc.
Com o /proc, as interfaces e as estruturas (diretórios e arquivos) poderiam se manter, mesmo havendo mudanças nas camadas internas do kernel.
Este método é menos frágil que o anterior e aguenta melhor o aumento na escala de trabalho do sistema.
O /proc filesystem foi projetado originalmente para publicar informações de processos e alguns atributos chave de sistema, requisitados por comandos como o ‘ps’, o ‘top’ e o ‘free’, por exemplo.
Sendo mais fácil de usar e obter informações a partir deste meio – tanto pelo lado do kernel quanto do lado do user-space – ele se tornou um verdadeiro depósito de informações de todo o tipo, vindas do sistema.
Além disto, ganhou arquivos com permissão de gravação, a serem usados para ajustar configurações e controlar a operação do kernel ou algum de seus vários subsistemas.
Em resumo, o aumento no uso do /proc para implementar controle de interfaces contribuiu para reduzir sua eficiência.

Isto levou os desenvolvedores a implementar, no kernel 2.6, uma nova metodologia, através do sysfs.
O sysfs ou /sys filesystem já foi projetado para adicionar suporte à estrutura do /proc e prover uma maneira uniforme de expor as informações do sistema e pontos de controle (sistema ajustável e atributos de drivers) para o user-space a partir do kernel.
Agora o framework de drivers, dentro do kernel, cria automaticamente os diretórios sob /sys a cada vez que um driver é registrado, baseado em seu tipo e nos valores contidos nas suas estruturas de dados.
Isto significa que os drivers de um tipo particular terão todos os mesmos elementos exibidos via sysfs.
O Linux vive uma fase de transição. Hoje, muitas informações “legadas” do sistema ainda são acessíveis no /proc. Contudo, todos os novos bus e drivers precisam expor suas informações e pontos de controle via sysfs — é para lá que estamos caminhando.

Referências

http://unix.stackexchange.com/questions/4884/what-is-the-difference-between-procfs-and-sysfs.

Como instalar suporte ao sistema de arquivos ZFS no Ubuntu

O sistema de arquivos ZFS foi projetado originalmente nos laboratórios da Sun Microsystems, bem antes da empresa ser adquirida pela Oracle.
Trata-se de um sistema de arquivos avançado, com um gestor de volumes lógicos.
open zfs logo
Além do Solaris e nos sistemas operacionais derivados, ele roda em várias outras plataformas.
No FreeBSD, o ZFS é o sistema de arquivos padrão.
À medida em que problemas de licenciamento foram sendo resolvidos, tornou-se possível portar o sistema para várias distribuições GNU/Linux, incluindo Debian, Ubuntu etc.

O ZFS possui recursos importantes de proteção contra corrupção de dados, além de compressão, gestão de volumes, integridade de dados, software RAID, cache e muito mais.

Os exemplos deste texto se baseiam em uma instalação Ubuntu 16.04 LTS. Se você deseja obter informações mais específicas sobre instalação do ZFS no Debian, leia este artigo.
Os links do texto e da seção “Referências”, ao final, podem ajudar, caso você deseje aprofundar mais em determinado assunto.

Como instalar o ZFS no Ubuntu 16.04

No exemplo abaixo, vou demonstrar como encontrar softwares relacionados ao ZFS e como instalar o que você precisa.
Como sempre, comece por atualizar os repositórios. Depois faça a busca, com ‘search‘:

sudo apt update
sudo apt search openzfs

O resultado pode ser extenso (e nem tudo serve ao que queremos realizar aqui):

 Sorting...
            Full Text Search...
            libuutil1linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Solaris userland utility library for Linux  

            libuutil1linux-dbg/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Debugging symbols for libuutil1linux

            libzfs2linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem library for Linux            

            libzfslinux-dev/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem development files for Linux 

            libzpool2linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS pool library for Linux
                      
            zfs-dkms/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem kernel modules for Linux

            zfs-doc/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all
              Native OpenZFS filesystem documentation and examples.

            zfs-initramfs/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all

            libzfslinux-dev/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem development files for Linux 

            libzpool2linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS pool library for Linux
                      
            zfs-dkms/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem kernel modules for Linux

            zfs-doc/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all
              Native OpenZFS filesystem documentation and examples.

            zfs-initramfs/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all
              Native OpenZFS root filesystem capabilities for Linux

            zfs-zed/xenial-updates 0.6.5.6-0ubuntu10 amd64
              OpenZFS Event Daemon (zed)

            zfsutils-linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS management utilities for Linux

            zfsutils-linux-dbg/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Debugging symbols for zfsutils-linux

Para fazer a instalação do sistema ZFS básico, basta executar o comando que segue:

sudo apt install zfs

As dependências necessárias, como você já deve saber, serão instaladas automaticamente.
Para verificar se o suporte ao sistema de arquivos se encontra instalado no seu sistema:
use o comando cat:

cat /proc/filesystems | grep zfs
	zfs

Se o seu resultado estiver de acordo com o que se vê acima, então tudo correu bem.

Referências

Como instalar o ZFS no Debian.
Conheça o sistema de arquivos ZFS.

Introdução ao sistema de arquivos BTRFS – parte 2

Este post tem intenção de mostrar, na prática, como lidar com o sistema de arquivos Btrfs, no Linux.
Basicamente, vou cobrir algumas tarefas administrativas, o que inclui criar um sistema de arquivos Btrfs, montá-lo, alterar seu tamanho, usar compressão e auto desfragmentação.
É importante que se diga que o Btrfs, anunciado em 2007, ainda está em fase beta — neste momento, esta é a posição oficial dos desenvolvedores.
Sistema de arquivos Btrfs - logo
Contudo, há grandes empresas que usam o Btrfs em produção, mas ninguém, em sã consciência, abre mão de fazer seus backups. Problemas sempre podem aparecer.

Notas preliminares

Eu venho usando este sistema na minha máquina de trabalho há aproximadamente 6 meses e sem incidentes.
Atualmente, uso o Debian 8.3 “Jessie”, com o kernel 4.3.
Tudo o que descrevo, neste texto, funciona para mim. Não há qualquer garantia de que funcione para você, contudo.
Os comandos, descritos aqui, foram executados em alguns drives USB (vulgo, pendrives…) — o que está longe de ser o ideal para testar um sistema de arquivos tão robusto, mas serve para ilustrar o texto.
Debian 8 GNU/Linux terminal
Usuários Ubuntu, opcionalmente, podem usar o apt-get em vez do aptitude para instalar aplicativos — se isto os fizer sentir mais confortáveis.
Se quiser saber melhor as diferenças entre os dois, leia este artigo.
Outro ponto importante é que a maioria dos comandos, são usados com privilégios administrativos (com todos os perigos que isto implica).
Portanto, não esqueça de usar o ‘sudo’ no início da linha de comando ou logar como ‘root’ (que foi o que eu fiz).
Se você tiver curiosidade, leia Diferenças entre SU e SUDO.

Como instalar o suporte a Btrfs

Se você já instalou o Btrfs, pode pular esta parte.

Uma palavrinha sobre os backports…

Depois que instalei suporte aos backports no Debian, adquiri o hábito de checar se há pacotes mais atuais naqueles repositórios antes de instalar alguma coisa.
No meu caso, não há versão mais atual disponível nos backports, como é possível observar abaixo:

aptitude show btrfs-tools | grep -i vers
Versão: 3.17-1.1

aptitude -t jessie-backports show btrfs-tools | grep -i vers
Versão: 3.17-1.1

Sigamos em frente… 😉

Como ele já está incluído no kernel principal desde a versão 2.6.29-rc1, tudo o que você precisa é instalar as ferramentas para lidar com o sistema de arquivos Btrfs no espaço do usuário ou user space. Veja como:

aptitude update
aptitude install btrfs-tools

Isto é tudo.
Baixar o código fonte e compilá-lo, também é uma opção e pode te dar uma versão bleeding edge, ou seja, a última disponibilizada pelos desenvolvedores — mas vai impor alguns sacrifícios à estabilidade do seu sistema.

Como criar um sistema de arquivos Btrfs

Uma das várias boas notícias, aqui, é que você não precisa usar ferramentas de particionamento, como o fdisk, para preparar o dispositivo antes de formatá-lo com o Btrfs.
O sistema pode ser criado direto, com um único comando:

mkfs.btrfs /dev/sdc

Você pode usar um comando assim, para criar um volume novo até em mídias ainda não formatadas.
Se já houver algum sistema de arquivos (mesmo que seja Btrfs), o utilitário irá avisar:

/dev/sdc appears to contain an existing filesystem (iso9660).
Error: Use the -f option to force overwrite.
See http://btrfs.wiki.kernel.org for more information.

Se você tiver certeza do que está fazendo, pode “forçar” a criação do novo sistema de arquivos no dispositivo:

mkfs.btrfs -f /dev/sdc

Ao formatar a unidade, o mkfs irá aplicar as opções mais adequadas, automaticamente, para o tipo de mídia em questão. Veja o meu resultado, abaixo:

Btrfs v3.17

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
fs created label (null) on /dev/sdc
	nodesize 16384 leafsize 16384 sectorsize 4096 size 7.50GiB

Antes de concluir o tema, acho interessante falar destas duas opções de criação de um sistema de arquivos: --label e --mixed.
Ambas podem ser abreviadas, respectivamente, para ‘-L’ e ‘-M’.
A primeira serve para dar um nome (até 256 caracteres) ao seu volume e a segunda, mistura (mixa) partes de dados e metadados para obter um uso mais eficiente de espaço.
A aplicação deste recurso penaliza a performance em sistemas de arquivos maiores. Por isto, é recomendado apenas em pequenos sistemas de arquivos com 1 GiB de espaço ou menos.
Veja um exemplo de sua aplicação:

mkfs.btrfs --force --mixed --label "Justin Case" /dev/sdc

Para obter informações sobre o sistema de arquivos criado use o seguinte comando:

btrfs filesystem show /dev/sdc

Como montar um sistema de arquivos Btrfs

Se você conectar um dispositivo de armazenamento com um sistema de arquivos Btrfs, o Linux irá montá-lo automaticamente.
As opções, descritas a seguir, podem ser usadas por quem deseja fazer uso de algum recurso no momento da montagem ou configurar o fstab para obter resultados específicos.
A sintaxe do comando para montar uma unidade Btrfs não é muito diferente da usada para outros sistemas de arquivos. Veja um exemplo simples:

mount -t auto /dev/sdc /mnt

Como você pode ver, usei o parâmetro ‘auto’, por que sei que o kernel irá identificar corretamente o sistema de arquivos do dispositivo.
Mas eu o poderia indicar também, como pode ser observado no exemplo abaixo:

mount -t btrfs /dev/sdc /mnt

Ambas opções detectam e automatizam a escolha das opções de montagem mais adequadas para o seu dispositivo.
Veja alguns exemplos de outros parâmetros de montagem que podem ser usados.
Para montar o dispositivo com a compressão ativada, use a opção ‘compress’:

mount -t btrfs -o compress /dev/sdc /mnt

O algoritmo padrão de compressão é o zlib. Mas você pode usar também o LZO.
Entenda a diferença entre os dois e obtenha mais detalhes da aplicação no artigo Como ativar compressão no Btrfs.
Caso o sistema de arquivos já esteja montado, use o parâmetro ‘remount’:

mount -t btrfs -o remount,compress /dev/sdc /mnt

Assim, não será necessário desmontar e montar manualmente.
Se quiser ver as opções de montagem atuais da sua unidade Btrfs, use o mount combinado com o comando grep.

mount | grep btrfs

O meu resultado é o que segue:

/dev/sdc on /mnt type btrfs (rw,relatime,compress=zlib,space_cache,subvolid=5,subvol=/)

Pode ser interessante fazer testes, montando o sistema manualmente.
Quando tudo estiver funcionando do jeito que você quer, inclua estas opções de montagem no arquivo fstab.
Ao usar ‘autodefrag’, na montagem, o sistema irá executar o processo de desfragmentação em background ou nos bastidores, sem atrapalhar o uso da máquina, sempre que detectar alguma gravação aleatória.
Segue um exemplo de uso:

mount -t btrfs -o remount,compress,autodefrag /dev/sdc /mnt

Se você estiver tendo algum problema grave com a sua unidade de armazenamento, pode tentar recuperá-la durante a montagem, com ‘recovery’:

mount -o recovery /dev/sdc /mnt 

Como alterar o tamanho de um volume Btrfs

Não há necessidade de desmontar o volume para alterar o seu tamanho. Esta operação pode ser feita online.
Para reduzir o tamanho da unidade em 5 GiB, use o seguinte comando:

btrfs filesystem resize -5g /mnt

Para aumentar o tamanho em 500 MiB, use o seguinte comando:

btrfs filesystem resize +500m /mnt

Se isto não for possível, o sistema retornará o erro:

Resize '/mnt/' of '+500m'
ERROR: unable to resize '/mnt/' - File too large

Para ver o novo tamanho do volume, use o comando df:

df -h /mnt/
Sist. Arq.      Tam. Usado Disp. Uso% Montado em
/dev/sdc        4,1G   32M  3,3G   1% /mnt

Simples, não é?
Este artigo, dá uma ideia inicial das possibilidades do sistema de arquivos Brtfs e lhe permite começar a explorar toda a sua robustez.
Não esqueça de se aprofundar mais no assunto, lendo os textos linkados.
Divirta-se!

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 BTRFS – parte 1

Neste artigo pretendo descrever algumas das capacidades básicas que descobri ao começar a usar e me familiarizar com o sistema de arquivos Btrfs, no meu laptop de trabalho, rodando o Debian 8.3 “Jessie”, com o kernel Linux 4.3 (instalado via backports).
Desde que você esteja usando um sistema operacional atualizado, todas as informações dadas neste texto são universais.

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 de ter um significado técnico.

Esta é a primeira parte de 2 artigos voltados para iniciantes no sistema de arquivos Btrfs.
Neste, pretendo explorar os aspectos teóricos básicos, que possam ajudar a decidir se a tecnologia dispõe dos recursos que a tornam ideal para você.
Na segunda parte, pretendo introduzir alguns comandos administrativos básicos, voltados a quem deseja iniciar já o uso do sistema.
Sistema de arquivos Btrfs - logo

Alguns dos temas tratados superficialmente aqui, são descritos com mais profundidade nos links, encontrados no decorrer do texto — clique neles.

A proposta e a história do sistema de arquivos Btrfs

Por anos, os sistemas de arquivos da série Ext predominou nas principais distribuições GNU/Linux — passando pelas gerações do Ext2, Ext3 e, mais recentemente, Ext4.
Houve uma evolução significativa no hardware de armazenamento, o que inclui o aumento da capacidade de armazenamento e o surgimento da tecnologia das unidades flash.
Embora o Ext4 ainda esteja evoluindo, não há planos, até o momento, para lançamento de uma versão Ext5.
Se quiser entender melhor as diferenças entre o Ext4 e o Btrfs, clique aqui.
Atualmente, o desenvolvimento caminha na direção de outros sistemas de arquivos, como o ZFS, o Btrfs e o F2FS.
As equipes de desenvolvimento do Btrfs procuram dar respostas às necessidades crescentes de armazenamento de arquivos cada vez maiores, a sistemas “clusterizados” entre outros.
Entre as capacidades avançadas do Btrfs, citam-se:

  • Suporte a sistemas e arquivos grandes.
  • Oferece gestão integrada de múltiplos volumes e subvolumes.
  • Tem funcionalidades de RAID incorporadas.
  • Garante a segurança dos seus dados usando técnicas copy-on-write e de verificação de soma (checksumming).
  • Provê snapshots alteráveis.

Criado por Chris Mason, dentro da Oracle, a proposta inicial estava ligada a uma apresentação de Ohad Rodeh, sobre implementações B-tree que facilitassem o copy-on-write (COW)

Os snapshots têm várias utilidades: se recuperar de remoção acidental de arquivos, reverter um sistema corrompido a um estado em que ele estava bom, mineração de dados, backup eficiente e muito mais.
Clones ou writeable-snapshots são uma extensão do conceito de snapshot, em que ele pode ser alterado para incluir novos dados.
Um clone pode ser usado para criar um ponto de retorno seguro para quem deseja experimentar softwares novos no sistema.

Mason tem experiência prévia com o desenvolvimento do sistema de arquivos ReiserFS — armazenamento baseado em extensão, empacotamento de pequenos arquivos, armazenamento de dados e metadados em estruturas B-tree etc.
O Btrfs foi apresentado à comunidade Linux em 2007. A partir deste momento, os engenheiros da Oracle têm continuado a manter e desenvolver os novos recursos do sistema — em estreita colaboração com outros contribuidores da comunidade Linux, o que inclui engenheiros das distribuições (Red Hat, SuSE etc.) e outras companhias, como Dreamhost, Fujitsu, HP, IBM e Intel.
Atualmente, todas as grandes distribuições Linux dão-lhe suporte.
Chris Mason - Oracle - Btrfs File System

Explorando o Btrfs

A partir do momento em que comecei a fazer uso do Btrfs, na unidade SSD do meu laptop, comecei a descobrir uma série de funcionalidades contidas no sistema, que eu ainda não conhecia.
Algumas destas funcionalidades não se aplicam ao uso em notebooks ou desktop workstations, uma vez que são desenvolvidas para uso em sistemas de armazenamento em servidores de grande porte.
Outras são ótimas opções para se ter a mão em um pequeno computador de trabalho.
Vejamos algumas:

  1. Escalabilidade e gestão de volumes. É importante dizer que o Btrfs é um sistema de arquivos 64-bit, escalável e que pode abranger vários volumes para prover arquivos e sistemas de arquivos até 16 exabytes.
    Incluída a possibilidade de gestão de vários dispositivos de armazenamento subjacentes — similar ao tradicional LVM.
    Por exemplo, o Btrfs permite a um sistema de arquivos abarcar vários dispositivos e representados por um único endereço.
    Os dispositivos do sistema podem ser adicionados ou removidos enquanto este permanece online e disponível.

  2. Metodologia de escrita e acesso. O Btrfs armazena tipos de dados e aponta para informações dentro da unidade em uma estrutura B-tree.
    Diferente de outros sistemas de arquivos, não faz journaling de transações. Como resultado, sua escrita é feita uma única vez — o que remove limitações consequentes do espaço ocupado pelo journal e reduz desgaste causado por gravações repetitivas na mesma seção do disco rígido ou do SSD.
    A técnica copy-on-write garante que blocos e extensões não sejam sobrescritos.
    Atributos estendidos e ACLs limitam o acesso e a manipulação do conteúdo do sistema de arquivos por usuários e aplicações.
  3. Tunables ou possibilidades de ajustes.
    O Btrfs provê ajustes mínimos para proteger o sistema de mau uso ou de erros de configuração.
    Uma das opções interessantes de montagem de uma unidade Btrfs, é -o autodefrag .
    Este parâmetro ativa a auto desfragmentação do volume.
    Outra possibilidade é a desativação do COW, com o uso do parâmetro nocow, que pode ajudar a reduzir fragmentação dos arquivos no sistema — particularmente para arquivos que requeiram acesso sequencial, tais como os produzidos por bancos de dados e mídias para transmissão (streaming media).
    No modo nocow, blocos de arquivos são sobrescritos, tal como em qualquer outro sistema de arquivos tradicional.

Integridade de dados

O Btrfs tem recursos nativos para garantir a integridade de dados no volume.
Veja alguns:

  • Configurações redundantes. Suporta espelhamento de dispositivos e configurações RAID para aumentar chances de sobrevivência de dados e facilitar a recuperação de informações destruídas.
    Por padrão, ele espelha os metadados por entre 2 dispositivos e distribui os dados entre todos os dispositivos sob a camada do sistema de arquivos.
    Mesmo dentro de uma única unidade de armazenamento, os metadados são duplicados
  • Verificação de somas. Gera checksums para dados e metadados para preservá-los de corrompimento.
    Os checksums são verificados a cada leitura de blocos de dados do volume.
    Havendo detecção de erros, o sistema tenta obter ou criar uma cópia boa do bloco defeituoso de algum outro dispositivo espelho.
    Se encontrar uma cópia boa, ela será usada e o bloco ruim corrigido.
  • Isolamento de falhas e algoritmos de verificação de somas. O Btrfs provê isolamento de falhas através do armazenamento separado dos metadados dos dados dos usuários.
    Adicionalmente, provê proteção através dos CRCs.
    Os CRCs são armazenados em um B-tree, separado dos dados — para oferecer isolamento de possíveis falhas.
  • Tempo de reconstrução. Mason chama a atenção para o fato de que o Btrfs só reconstrói os blocos ativamente usados pelo sistema de arquivos.
    À medida em que a capacidade de armazenamento dos drives aumenta, esta característica constitui uma vantagem considerável sobre sistemas de arquivos tradicionais e mecanismos RAID de proteção.
    Nas abordagens tradicionais, o tempo de reconstrução de unidades de alta capacidade de armazenamento pode ser medido em dias — e durante este processo, a proteção do sistema estará suspensa.
  • Encriptação. Não há funcionalidade de criptografia embutida ainda.
    Um sistema de arquivos Btrfs pode ser criado sobre um subsistema de encriptação de discos dm_crypt e sob uma camada LUKS (Linux Unified Key Setup) — que dá suporte a uma boa variedade de padrões de criptografia.
    Esta configuração, contudo, desabilita algumas das capacidades e vantagens do sistema — tais como suporte avançado a dispositivos de bloco raw e detecção de unidades SSD.

Otimização de espaço

O Btrfs suporta algoritmos de compressão, já na montagem de um dispositivo — ou seja, após a criação de um volume ou subvolume, você pode ativar facilmente a compressão de dados a qualquer momento.
Este assunto é discutido com mais profundidade no artigo Como ativar a compressão de dados no Btrfs.
No atual estágio de desenvolvimento, o sistema tem suporte aos algoritmos de compressão LZO e zlib.
Se um arquivo não consegue atingir taxas de compressão decentes, ele é marcado como “não comprimível” e gravado sem o uso do recurso.
Existe a opção de montagem force-compression que, tal como o nome indica, aplica o recurso arbitrariamente.

Aprimoramento do desempenho

O Btrfs tem funcionalidades e suporte a dispositivos projetados para melhorar o desempenho do sistema de arquivos. Conheça algumas:

  1. Suporte a unidades de estado sólido (SSDs). As memórias flash, tais como os cartões de memória que usamos nos smartphones e nas câmeras (além dos pendrives USB), têm baixo custo de aquisição.
    São dispositivos não voláteis, cujo conteúdo pode ser alterado eletricamente.
    O uso de drives SSD tem aumentado em desktop workstations, notebooks e servidores. Tudo indica que este movimento se intensificará.
    Dispositivos de armazenamento, com tecnologia flash têm desempenho muito superior a dos drives mecânicos.
    O Btrfs é SSD-aware, ou seja, reconhece nativamente o ambiente flash, evita otimizações de busca desnecessárias e envia gravações agressivamente aos clusters — mesmo que sejam de arquivos não relacionados ao contexto.
    Este comportamento resulta em largas operações de escrita e taxas de transferência mais altas.
  2. Desfragmentação online. Ao longo dos anos, temos notado que unidades que experimentam grande rotatividade de arquivos, sofrem com uma crescente fragmentação, o que resulta em desempenho inferior ao que estão capacitadas a oferecer.
    O Btrfs tem a opção de montagem autodefrag, que habilita o helper de auto desfragmentação.
    Quando um bloco é copiado e gravado no disco, o helper marca os fragmentos e realiza o trabalho de desfragmentação em uma thread, executada em segundo plano.
    Esta capacidade pode beneficiar significantemente sistemas com cargas de trabalho de pequenos bancos de dados, caching de navegadores etc.

Como o Btrfs lida com subvolumes, snapshots e dispositivos seed

A característica de ser copy-on-write faz do Btrfs um sistema de arquivos capaz de prover recursos que facilitam replicação, migração, backup e restauração de informações.

  1. Subvolumes. Ponto fulcral da concepção do Btrfs, os subvolumes, são chamados B-trees. É onde se guardam arquivos e diretórios.
    Opcionalmente, os subvolumes podem ter quotas e são montados como se fossem discos.
  2. Snapshots. Na essência, são clones de um subvolume.
    Se deixada inalterada, uma snapshot representa uma cópia fiel do estado do subvolume no momento em que foi criada.
    Do que foi dito no parágrafo anterior, entenda-se que é possível alterar uma snapshot, de forma que são como clones que evoluem em relação a seus subvolumes.
    Pode ser criada quase instantaneamente e, virtualmente, não consome espaço adicional no disco, inicialmente — uma vez que se constitui de pequena quantidade de metadados.
    Este recurso é útil em várias situações — como manter cópias de versões anteriores de uma hierarquia de arquivos ou movê-las para outros sistemas, como cópias de segurança.
    Arquivos individuais podem também ser clonados com o comando cp -reflink, que tem o mesmo efeito sobre arquivos que os snapshots têm sobre volumes.
  3. Seed devices ou dispositivos semente. Este tipo de dispositivo provê uma fundação (não alterável) para criar ou constituir múltiplos outros sistemas de arquivos.
    Em outras palavras, um dispositivo pode ser usado como um sistema de arquivos template (um CD, contendo uma imagem, por exemplo).
    A partir deste dispositivo novos sistemas de arquivos, em outros dispositivos, podem ser criados (usando o copy-on-write).
    Este processo pode ser considerado uma outra forma de clonagem.
  4. Backup e recuperação de cópias de segurança. Não há suporte incorporado ao Btrfs para criar cópias de segurança.
    Neste caso, a melhor prática é criar um snapshot de um volume e usar utilitários tradicionais de backup.
    Para ajudar há o recurso btrfs subvolume find-new, que identifica os arquivos que sofreram alguma mudança em um dado subvolume.
    Testes mostram que ele é mais eficiente que varrer todo o sistema de arquivos com o comando find -mtime, para destacar arquivos modificados.
  5. Ferramenta de conversão de sistemas de arquivos Ext. Há suporte à conversão local de sistemas de arquivos Ext3 e Ext4.
    Os metadados originais dos sistemas antigos são mantidos em um snapshot, de forma que a conversão possa ser revertida, se necessário.
    Obviamente, se o sistema tiver passado por muitas alterações as possibilidades de reversão são limitadas.
    Quando tiver certeza de que não vai voltar atrás na conversão de um sistema Ext para Btrfs, remover o snapshot ajuda liberar espaço em disco.

Referências

https://wiki.debian.org/Btrfs.
https://btrfs.wiki.kernel.org/index.php/Glossary.
http://www.oracle.com/technetwork/articles/servers-storage-admin/gettingstarted-btrfs-1695246.html.