Snapper uma ferramenta do opensuse que é utilizada para gerenciar os snapshots.


Segue mais um excelente artigo do Bequimão sobre o Snapper uma ferramenta do opensuse que é utilizada para gerenciar os snapshots.


Olá amigos,

Instalei recentemente o openSUSE Leap 42.3 beta com desktop Plasma 5. Agora está lá para testes ...

Notei primeiro uma pequena diferença na configuração do Snapper, ferramenta do openSUSE para gerenciar snapshots no sistema de arquivos btrfs.

Extrato de /etc/snapper/configs/root
...
# limit for number cleanup
NUMBER_MIN_AGE="1800"
NUMBER_LIMIT="2-10"
NUMBER_LIMIT_IMPORTANT="4-10"

Antigamente lá tinha limites fixos de valor 10, o que não era vantajoso para um usuário do desktop comum, mas talvez exigido no ambiente comercial. Isto levava ao sistema de arquivos encher com snapshots, eles aconselhavam usar 40 GiB ou mais para a partição root. Agora esperamos que isto será solucionado de forma dinâmica.

Preparo

Eu não tinha planejado publicar este teste, mas acho o procedimento muito exemplar. Desculpem pois o conteúdo está bastante técnico!

Vamos criar um snapshot somente para leitura do estado atual do subvolume root. Lembrem que o snapper faz snapshots e rollbacks em torno de subvolumes do btrfs, vejam meu artigo Btrfs no openSUSE - Subvolumes misteriosos (1). Fiz tudo no terminal, mas claro que também é possível no YaST sob 'Diversos -> Snapper'.

linux-0kzl:~ # snapper create --description 'Test Snapper Rollback'
linux-0kzl:~ #

Temos agora um novo snapshot com o número 90.


Segue um extrato dos subvolumes montados no meu sistema. O root está montado no Snapshot #1 'first root filesystem'.


Boot do snapshot somente leitura

Em seguida reiniciei o sistema.
Agora a última linha no menu do grub diz:
    'Start bootloader from a read-only snapshot' - 'Bootar de um snapshot somente leitura'
Pressionar [Enter]
    Volta ao menu do grub mas um pouco diferenciado. Uma nova primeira linha agora diz:
    'Bootable snapshot #90'
Pressionar de novo [Enter]
    Mostra uma mensagem 'If ok, run snapper rollback and reboot'
Pressionar de novo [Enter] na segunda linha 'openSUSE Leap 42.3'
    O sistema dá boot. Um pouco demorado, mas vai para a tela de login e se consegue logar no seu usuário.
   
Este procedimento parece muito esquisito. Provavelmente os desenvolvedores não pretendem fazer um fork do grub, mas tem que usar os recursos do grub. O atraso no boot parece que se deve a fato de que o root agora é um sistema somente leitura, que naturalmente não pode funcionar na mesma forma como o boot normal. Vamos ver isto em seguida.   



Até este ponto o sistema não se modificou nada. Se pode fazer um reboot e o sistema volta ao estado anterior. Mas recomendo treinar este procedimento para que não fiquem tensos quando houver a necessidade real.

Como se vê, o novo snapshot está montado como root. Naturalmente se pode escolher qualquer outro snapshot. O maior problema as vezes é escolher o snapshot correto, onde não há problemas.

linux-0kzl:~ # snapper rollback
Creating read-only snapshot of default subvolume. (Snapshot 91.)
Creating read-write snapshot of current subvolume. (Snapshot 92.)
Setting default subvolume to snapshot 92.
linux-0kzl:~ #

O comando # snapper rollback faz o seguinte
- cria um snapshot sómente leitura do estado atual para poder voltar exatamente a ele.
- cria um snapshot (leitura e escrita) do root atual, a escolha no grub.
- define este snapshot como snapshot padrão para montar no próximo boot.

Pessoalmente prefiro todas as instalações no meu sistema multi-boot em partições lógicas do LVM (Logical Volume Manager) por causa da flexibilidade. Nunca notei nada que funcione no LVM diferente das partições primárias. Algumas distros como o Mageia o o Fedora exigem que o grub fosse instalado numa partição separada sem Btrfs, mas o openSUSE não. O manual do Snapper Recovery(3) porém diz: Bootar de um snapshot do LVM não tem suporte - Booting from LVM volume snapshots is not supported. Sempre me admirei qual era a razão desta restrição. Agora sinto a satisfação pois funcionou, porém sem estar documentado no manual.

Reboot final

Dei agora um reboot final e executei os testes seguintes no terminal



Voilá, o resultado que queremos! O novo subvolume criado pelo snapper rollback agora é montado como root, e o subvolume padrão é exatamente este!

Alguns ajustes finais

Excluir o antigo subvolume padrão e o subvolume basico do teste:

linux-0kzl:~ # snapper delete 1 90
linux-0kzl:~ #

Os passos restantes não acho necessários. Faço isto para facilitar o boot pelo grub de instalações diferentes

Recriar o initramfs do kernel atual



Reinstalar o grub



As mensagens 'File descriptor ...' não tem relevância, o importante é só a mensagem final 'No error reported'.

Aproveitem! Bom divertimento com o btrfs!

Bequimão

Referências: