Antes de começarmos, vamos falar um pouco sobre cada coisa.
Sobre o filesystem
O
BTRFS é um sistema de arquivos já conhecido no mundo
Linux, desenvolvido pela Oracle, é o maior condidato para substituir o ext4, assim como o
wyland está substituindo o x.org. Embora já conhecido e tendo sido criado há muito tempo, algumas distros pouco indicam ele, ao contrário da
openSUSE e o
SUSE Linux Enterprise, que o tem como sistema de arquivos padrão para o diretório raiz há muito tempo. Muitas distros ainda o consideram como experimental, não indicando a instalação com o sistema de arquivos. Nem o Fedora, famoso por ser pioneiro em tecnologias, colocou o BTRFS como padrão durante a instalação, o Anaconda ainda sugere o ext4.
Durante a instalação do openSUSE, ao escolher o BTRFS, é possível vermos os níveis de RAID compatíveis, bem como uma explicação detalhada.
Principais funções
COW (Copy-On-Write) e Snapshot
Suas funções mais conhecidas e faladas como vantagens em relação ao ext4 e outro filesystem, é o
COW (Copy-On-Write) e o recurso de Snapshot. O cow tem como função otimizar a entrada/saída de dados, que tem como objetivo dar maior vida útil aos SSDs e melhorar a velocidade nos HDs. É claro que existe uma grande lista de funções, como o empacotamento mais eficiente, utilizando melhor o espaço. Mas vamos focar nessas duas.
Outra função é a de Snapshots, que consiste em cópias do sistema antes de ter algum problema, dessa forma você poderá recuperar seu sistema sem ter que reinstalar. O conhecido Ponto de Restauração presente em alguns sistemas operacionais. Ao instalar com usando o BTRFS ele gerará muitos subvolumes, algo semelhante aos LVMs, que de certa forma gerenciarão os arquivos e tornarão mais fácil manipular o snapshot.
A manipulação do snapshot é através do Snapper, que na página do openSUSE, é descrito dessa forma:
"Snapper é uma ferramenta para gerenciar snapshots btrfs. Além, de obviamente criar e remover snapshots, ela pode comparar snapshots e reverter diferenças entre eles. Em termos simples, isto permite que usuários visualizem versões antigas de arquivos e revertam as alterações. Snapper está disponível com uma interface de linha de comando e módulo do Yast. Ambos fazem uso da biblioteca C++ libsnapper que também está disponível para outros programas."
Note que os subvolumes não estão ocupando novos espaços. Algo para se esclarecer, é que o Snapshot compacta os arquivos, suportando diversos padrões. Há quem prefira um em detrimento do outro. O padrão utilizado é o zlib.
Caso tenha interesse sobre o BTRFs, em português, tem na wiki:
Btrfs (Português) - ArchWiki
Você pode ver uma comparação entre os tipos de compactação aqui:
Btrfs Zstd Compression Benchmarks On Linux 4.14 - Phoronix (lembrando que o teste não foi feito com o openSUSE, o que certamente poderia ter resultados diferentes, levando em consideração a maturidade do sistema de arquivos na distro).
Administrando um Snapshot
Automaticamente o sistema já criará, mas você pode criar seu próprio snapshot.
# btrfs subvolume snapshot /caminho/do/subvolume /caminho/do/snapshot
Para verificar o uso do btrfs use o comando:
# btrfs filesystem show /
Caso você queira verificar a lista de snapshots criada, veja com o comando:
# snapper list
Se você estiver em dúvida entre as diferenças de uma imagem para outra, poderá usar o comando abaixo, que mostrará as diferenças entre elas:
# snapper diff 71..72
Veja abaixo que existe um sinal de "+", isso informa que são novos arquivos.
Também é possível que você crie um snapshot para uma data específica, usando dessa forma:
# snapper create --description "Snapshot for week 2 2020"
Mas e se dispor de pouco espaço e quiser apagar snapshots antigos? Use o seguinte:
# snapper delete 65
E para deletar todos?
# snapper delete 1-100000
E se quiser modificar alterações feitas entre um e outro?
# snapper undochange 2..3
Vale lembrar que estamos a falar de snapshot para a partição /, automaticamente não é feito o snapshot para a partição /home, mesmo que ela não esteja separada.
No entanto, é possível fazermos manualmente, com o seguinte comando:
# snapper -c home create-config /home
Depois é só listar e verificar, como fizemos acima na partição /.
# snapper -c home list
Crie um com a descrição, para ser fácil de memorizar:
# snapper -c home create --description "antes da pandemia"
Evidentemente que esses passos foram por meio do terminal, mas é possível que você também os faça por meio de interface gráfica. Basta adicionar um plugin para a maravilha chamada
YaST, caso ele já não esteja instalado.
# zypper in yast2-snapper
Para o YaST criar automaticamente, use:
# snapper-zypp-plugin
Caso queira que opções avançadas de uso do snapshot aparaçam no grub, rode o comando:
# grub2-snapper-plugin
Ao acessar o YaST, vá para a guia Instantâneos do Sistema de Arquivos:
Clique aí e abrirá uma janela com os snapshots.
Note que existem duas opções, a root e a home, visto que criamos um snapshot para a /home.
Agora é só acessar qual deseja.
A restauração também é muito simples, na tela de login já irá aparecer a opção:
Basta selecionar a imagem que irá aparecer:
Basta selecionar e já terá recuperado o sistema. Em outras distros você tem um trabalho quase hercúleo comparado à simplicidade do openSUSE. Sem dúvidas até o momento é a melhor integração e desenvolvimento do BTRFS que temos na comunidade Linux.
Por enquanto, é apenas isso. O tutorial se destinou a usuários inciante que ainda não estão familiarizados com o sistema e suas funções, para um usuário avançado isso talvez não faça muito diferencial. Caso tenha mais informações que queira compartilhar para acrescentar ao artigo, deixa aí nos comentários. Informações útil nunca é demais e é sempre bem-vinda.
*Todos os passos foram testados na máquina principal e na virtual.
Até mais, linuxers.