Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Documentação do SUSE Linux Enterprise Desktop / Guia de Administração / Tarefas comuns / Recuperação de sistema e gerenciamento de instantâneos com o Snapper
Aplica-se a SUSE Linux Enterprise Desktop 15 SP5

10 Recuperação de sistema e gerenciamento de instantâneos com o Snapper

O Snapper permite criar e gerenciar instantâneos de sistema de arquivos. Os instantâneos de sistema de arquivos permitem manter uma cópia do estado de um sistema de arquivos em um determinado momento. A configuração padrão do Snapper foi projetada para permitir voltar modificações feitas no sistema. No entanto, você pode usá-la também para criar backups em disco dos dados dos usuários. Como base para essa funcionalidade, o Snapper usa o sistema de arquivos Btrfs ou os volumes LVM com aprovisionamento dinâmico com um sistema de arquivos XFS ou Ext4.

O Snapper tem uma interface de linha de comando e uma interface do YaST. O Snapper permite criar e gerenciar instantâneos nos seguintes tipos de sistema de arquivos:

  • Btrfs, um sistema de arquivos de cópia em gravação para Linux que suporta de forma nativa os instantâneos de sistema de arquivos de subvolumes. (Os subvolumes são sistemas de arquivos que podem ser montados separadamente em uma partição física.)

    Também é possível inicializar por meio de instantâneos do Btrfs. Para obter mais informações, consulte a Seção 10.3, “Rollback do sistema por inicialização de instantâneos”.

  • Volumes LVM com aprovisionamento dinâmico formatados com XFS ou Ext4.

Usando o Snapper, é possível executar as seguintes tarefas:

10.1 Configuração padrão

O Snapper no SUSE Linux Enterprise Desktop foi configurado como uma ferramenta para desfazer e recuperar mudanças no sistema. Por padrão, a partição raiz (/) do SUSE Linux Enterprise Desktop é formatada com Btrfs. A captura de instantâneos será automaticamente habilitada se a partição raiz (/) for grande o suficiente (mais do que aproximadamente 16 GB). Por padrão, os instantâneos estão desabilitados em partições que não são /.

Dica
Dica: Habilitando o Snapper no sistema instalado

Se você desabilitou o Snapper durante a instalação, pode habilitá-lo a qualquer momento no futuro. Para fazer isso, crie uma configuração padrão do Snapper para o sistema de arquivos raiz executando:

> sudo snapper -c root create-config /

Em seguida, habilite os tipos diferentes de instantâneo conforme descrito na Seção 10.1.4.1, “Desabilitando/Habilitando instantâneos”.

Em um sistema de arquivos raiz Btrfs, observe que os instantâneos exigem um sistema de arquivos com subvolumes configurados conforme proposto pelo instalador e uma partição de pelo menos 16 GB.

Quando um instantâneo é criado, tanto o instantâneo quanto o original apontam para os mesmos blocos no sistema de arquivos. Por isso, o instantâneo inicialmente não ocupa espaço adicional no disco. Se os dados do sistema de arquivos original forem modificados, os blocos dos dados modificados serão copiados, enquanto os blocos dos dados antigos serão mantidos no instantâneo. Portanto, o instantâneo ocupa a mesma quantidade de espaço que os dados modificados. Ao longo do tempo, a quantidade de espaço alocada por um instantâneo cresce constantemente. Como consequência, a exclusão de arquivos do sistema de arquivos Btrfs que contém instantâneos pode não liberar espaço em disco!

Nota
Nota: Local do instantâneo

Os instantâneos residem sempre na mesma partição ou subvolume no qual foram criados. Não é possível armazenar os instantâneos em uma partição ou um subvolume diferente.

Como resultado, as partições com instantâneos precisam ser maiores do que as partições sem instantâneos. A quantidade exata depende bastante do número de instantâneos mantidos e do volume de modificações de dados. Como uma regra geral, atribua às partições o dobro de espaço do que o de costume. Para evitar que os discos fiquem sem espaço, os instantâneos antigos são limpos automaticamente. Consulte a Seção 10.1.4.4, “Controlando o armazenamento de instantâneos” para obter os detalhes.

10.1.1 Configurações padrão

Discos com mais de 16 GB
  • Arquivo de configuração: /etc/snapper/configs/root

  • USE_SNAPPER=yes

  • TIMELINE_CREATE=no

Discos com menos de 16 GB
  • Arquivo de configuração: não criado

  • USE_SNAPPER=no

  • TIMELINE_CREATE=yes

10.1.2 Tipos de instantâneos

Embora os próprios instantâneos não se diferenciem no sentido técnico, nós os distinguimos entre três tipos, com base nos eventos em que foram acionados:

Instantâneos de linha do tempo

Um único instantâneo é criado a cada hora. Instantâneos antigos são apagados automaticamente. Por padrão, o primeiro instantâneo dos últimos dez dias, meses e anos são mantidos. Usando o método de instalação de OS do YaST (padrão), os instantâneos de linha do tempo são habilitados, exceto para o sistema de arquivos raiz.

Instantâneos de instalação

Sempre que um ou mais pacotes são instalados com o YaST ou o Zypper, um par de instantâneos é criado: um antes do início da instalação (Pré) e outro após o término da instalação (Pós). Se um componente importante do sistema, como o kernel, for instalado, o par de instantâneos será marcado como importante (important=yes). Instantâneos antigos são apagados automaticamente. Por padrão, os dez últimos instantâneos importantes e os dez últimos instantâneos regulares (incluindo os instantâneos de administração) são mantidos. Instantâneos de instalação são habilitados, por padrão.

Instantâneos de administração

Sempre que você administra o sistema com o YaST, um par de instantâneos é criado: um quando algum módulo do YaST é iniciado (Pré) e outro quando o módulo é fechado (Pós). Instantâneos antigos são apagados automaticamente. Por padrão, os dez últimos instantâneos importantes e os dez últimos instantâneos regulares (incluindo os instantâneos de instalação) são mantidos. Instantâneos de administração são habilitados, por padrão.

10.1.3 Diretórios que são excluídos dos instantâneos

Alguns diretórios precisam ser excluídos dos instantâneos por diversos motivos. A seguinte lista mostra todos os diretórios que são excluídos:

/boot/grub2/i386-pc, /boot/grub2/x86_64-efi, /boot/grub2/powerpc-ieee1275, /boot/grub2/s390x-emu

O rollback da configuração do carregador de boot não é suportado. Os diretórios listados acima são específicos da arquitetura. Os dois primeiros diretórios estão presentes nas máquinas AMD64/Intel 64, os dois últimos no IBM POWER e no IBM Z, respectivamente.

/home

Se /home não residir em uma partição separada, ele será excluído para evitar perda de dados nos rollbacks.

/opt

Os produtos de terceiros normalmente são instalados em /opt. Ele é excluído para evitar a desinstalação dos aplicativos nos rollbacks.

/srv

Contém dados de servidores Web e FTP. Ele é excluído para evitar perda de dados nos rollbacks.

/tmp

Todos os diretórios com arquivos temporários e caches são excluídos dos instantâneos.

/usr/local

Esse diretório é usado na instalação manual de softwares. Ele é excluído para evitar a desinstalação das instalações nos rollbacks.

/var

Esse diretório contém muitos arquivos variáveis, incluindo registros, caches temporários, produtos de terceiros em /var/opt e o local padrão para imagens de máquina virtual e bancos de dados. Portanto, o subvolume é criado para excluir todos esses dados variáveis dos instantâneos e tem o recurso Cópia em Gravação desabilitado.

10.1.4 Personalizando a configuração

O SUSE Linux Enterprise Desktop vem com uma configuração padrão lógica, que deve ser suficiente na maioria dos casos de uso. No entanto, todos os aspectos da criação automática e da manutenção de instantâneos podem ser configurados de acordo com as suas necessidades.

10.1.4.1 Desabilitando/Habilitando instantâneos

Cada um dos três tipos de instantâneos (linha do tempo, instalação, administração) pode ser habilitado ou desabilitado de forma independente.

Desabilitando/Habilitando instantâneos de linha do tempo

Habilitar.  snapper -c root set-config "TIMELINE_CREATE=yes"

Desabilitar.  snapper -c root set-config "TIMELINE_CREATE=no"

Usando o método de instalação de OS do YaST (padrão), os instantâneos de linha do tempo são habilitados, exceto para o sistema de arquivos raiz.

Desabilitando/Habilitando instantâneos de instalação

Habilitar: Instale o pacote snapper-zypp-plugin

Desabilitar: Desinstale o pacote snapper-zypp-plugin

Instantâneos de instalação são habilitados, por padrão.

Desabilitando/Habilitando instantâneos de administração

Habilitar: Defina USE_SNAPPER como yes em /etc/sysconfig/yast2.

Desabilitar: Defina USE_SNAPPER como no em /etc/sysconfig/yast2.

Instantâneos de administração são habilitados, por padrão.

10.1.4.2 Controlando instantâneos de instalação

A criação de pares de instantâneos ao instalar pacotes com o YaST ou o Zypper é administrada pelo snapper-zypp-plugin. Um arquivo de configuração XML, /etc/snapper/zypp-plugin.conf, define quando criar instantâneos. Por padrão, o arquivo é parecido com o seguinte:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <snapper-zypp-plugin-conf>
 3  <solvables>
 4   <solvable match="w"1 important="true"2>kernel-*3</solvable>
 5   <solvable match="w" important="true">dracut</solvable>
 6   <solvable match="w" important="true">glibc</solvable>
 7   <solvable match="w" important="true">systemd*</solvable>
 8   <solvable match="w" important="true">udev</solvable>
 9   <solvable match="w">*</solvable>4
10  </solvables>
11 </snapper-zypp-plugin-conf>

1

O atributo de correspondência define se o padrão é um curinga no estilo shell do Unix (w) ou uma expressão regular Python (re).

2

Se houver correspondência do padrão especificado e o pacote correspondente estiver marcado como importante (por exemplo, pacotes do kernel), o instantâneo também será marcado como importante.

3

Padrão de correspondência com o nome de um pacote. Com base na configuração do atributo match, caracteres especiais são interpretados como curingas do shell ou expressões regulares. Este padrão corresponde todos os nomes de pacotes que começam com kernel-.

4

Esta linha corresponde todos os pacotes incondicionalmente.

Com este instantâneo de configuração, os pares são criados sempre que um pacote é instalado (linha 9). Quando são instalados pacotes do kernel, dracut, glibc, systemd ou udev marcados como importantes, o par de instantâneos também é marcado como importante (linhas 4 a 8). Todas as regras são avaliadas.

Para desabilitar uma regra, apague-a ou desative-a usando comentários XML. Para impedir que o sistema crie pares de instantâneos para cada pacote de instalação, por exemplo, comente na linha 9:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <snapper-zypp-plugin-conf>
 3  <solvables>
 4   <solvable match="w" important="true">kernel-*</solvable>
 5   <solvable match="w" important="true">dracut</solvable>
 6   <solvable match="w" important="true">glibc</solvable>
 7   <solvable match="w" important="true">systemd*</solvable>
 8   <solvable match="w" important="true">udev</solvable>
 9   <!-- <solvable match="w">*</solvable> -->
10  </solvables>
11 </snapper-zypp-plugin-conf>

10.1.4.3 Criando e montando novos subvolumes

A criação de um novo subvolume abaixo da hierarquia / e sua montagem permanente são suportadas. Esse tipo de subvolume será excluído dos instantâneos. Não o crie dentro de um instantâneo existente, pois você não poderá mais apagar os instantâneos após um rollback.

O SUSE Linux Enterprise Desktop está configurado com o subvolume /@/, que serve como uma raiz independente para subvolumes permanentes, como /opt, /srv, /home etc. Qualquer subvolume novo que você cria e monta permanentemente precisa ser criado nesse sistema de arquivos raiz inicial.

Para isso, execute os comandos a seguir. Neste exemplo, um novo subvolume /usr/important é criado do /dev/sda2.

> sudo mount /dev/sda2 -o subvol=@ /mnt
> sudo btrfs subvolume create /mnt/usr/important
> sudo umount /mnt

A entrada correspondente em /etc/fstab precisa ter a seguinte aparência:

/dev/sda2 /usr/important btrfs subvol=@/usr/important 0 0
Dica
Dica: Desabilitar Cópia em Gravação (COW, Copy-On-Write)

Um subvolume pode conter arquivos que mudam constantemente, como imagens de disco virtualizado, arquivos de banco de dados ou arquivos de registro. Se este for o caso, considere desabilitar o recurso de cópia em gravação para este volume a fim de evitar a duplicação de blocos de disco. Use a opção de montagem nodatacow em /etc/fstab para fazer isso:

/dev/sda2 /usr/important btrfs nodatacow,subvol=@/usr/important 0 0

Como alternativa, para desabilitar a cópia em gravação para arquivos ou diretórios separados, use o comando chattr +C PATH.

10.1.4.4 Controlando o armazenamento de instantâneos

Instantâneos ocupam espaço no disco. Para evitar que os discos fiquem sem espaço e, por essa razão, provoquem interrupções no sistema, os instantâneos antigos são apagados automaticamente. Por padrão, no máximo dez instantâneos de instalação e administração importantes e dez regulares são mantidos. Se esses instantâneos ocuparem mais do que 50% do tamanho do sistema de arquivos raiz, os instantâneos adicionais serão apagados. Sempre é mantido um mínimo de quatro instantâneos importantes e dois regulares.

Consulte a Seção 10.5.1, “Gerenciando configurações existentes” para ver instruções sobre como mudar os valores.

10.1.4.5 Usando o Snapper em volumes LVM com aprovisionamento dinâmico

Além dos instantâneos nos sistemas de arquivos Btrfs, o Snapper também suporta criação de instantâneos em volumes LVM com aprovisionamento dinâmico (instantâneos em volumes LVM regulares não são suportados) formatados com XFS, Ext4 ou Ext3. Para obter mais informações e instruções de configuração de volumes LVM, consulte o Section 6.2, “LVM configuration”.

Para usar o Snapper em um volume LVM com aprovisionamento dinâmico, você precisa criar para ele uma configuração do Snapper. No LVM, é necessário especificar o sistema de arquivos com --fstype=lvm(FILESYSTEM). ext3, etx4 ou xfs são valores válidos para FILESYSTEM. Exemplo:

> sudo snapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm

É possível ajustar essa configuração de acordo com as suas necessidades conforme descrito na Seção 10.5.1, “Gerenciando configurações existentes”.

10.2 Usando o Snapper para desfazer mudanças

O Snapper no SUSE Linux Enterprise Desktop é pré-configurado para atuar como uma ferramenta capaz de desfazer as mudanças feitas pelo zypper e pelo YaST. Para esta finalidade, o Snapper é configurado para criar um par de instantâneos antes e depois de cada execução do zypper e do YaST. O Snapper permite também restaurar arquivos do sistema que foram acidentalmente apagados ou modificados. Os instantâneos de linha do tempo da partição raiz precisam ser habilitados para essa finalidade. Consulte a Seção 10.1.4.1, “Desabilitando/Habilitando instantâneos” para obter detalhes.

Por padrão, os instantâneos automáticos, conforme descrito anteriormente, são configurados para a partição raiz e seus subvolumes. Para disponibilizar os instantâneos para outras partições, como /home, é possível criar configurações personalizadas.

Importante
Importante: Comparação entre desfazer mudanças e rollback

Ao trabalhar com instantâneos para restaurar dados, é importante saber que há dois cenários fundamentalmente distintos nos quais o Snapper pode atuar:

Desfazendo mudanças

Ao desfazer mudanças conforme descrito a seguir, dois instantâneos são comparados, e as mudanças entre eles são desfeitas. O uso deste método também permite selecionar explicitamente os arquivos que devem ser restaurados.

Rollback

Ao fazer rollbacks conforme descrito na Seção 10.3, “Rollback do sistema por inicialização de instantâneos”, o sistema é redefinido para o estado do momento em que o instantâneo foi criado.

Ao desfazer mudanças, é possível também comparar um instantâneo com o sistema atual. Ao restaurar todos os arquivos com base nesta comparação, o resultado será igual a fazer rollback. No entanto, o uso do método descrito na Seção 10.3, “Rollback do sistema por inicialização de instantâneos” para rollbacks deve ser preferencial, pois é mais rápido e permite revisar o sistema antes de fazer rollback.

Atenção
Atenção: Consistência de dados

Não existe nenhum mecanismo que assegure a consistência dos dados ao criar um instantâneo. Sempre que um arquivo (por exemplo, um banco de dados) for gravado enquanto o instantâneo estiver sendo criado, o resultado será um arquivo corrompido ou parcialmente gravado. A restauração desse arquivo causa problemas. Além disso, determinados arquivos do sistema, como /etc/mtab, nunca devem ser restaurados. Portanto, é altamente recomendável sempre revisar com cuidado a lista de arquivos modificados e suas diffs. Restaure apenas arquivos realmente relevantes à ação que deseja reverter.

10.2.1 Desfazendo mudanças do YaST e do Zypper

Se você configurar a partição raiz com o Btrfs durante a instalação, o Snapper (pré-configurado para fazer rollback das mudanças do YaST ou do Zypper) será instalado automaticamente. Sempre que você iniciar um módulo do YaST ou uma transação do Zypper, serão criados dois instantâneos: um pré-instantâneo, que captura o estado do sistema de arquivos antes do início do módulo, e um pós-instantâneo após o término do módulo.

Usando o módulo Snapper do YaST ou a ferramenta de linha de comando snapper, é possível desfazer as mudanças feitas pelo YaST/Zypper restaurando os arquivos do pré-instantâneo. Pela comparação dos dois instantâneos, as ferramentas permitem ver quais arquivos foram modificados. É possível também exibir as diferenças entre as duas versões de um arquivo (diff).

Procedimento 10.1: Desfazendo mudanças usando o módulo Snapper do YaST
  1. Inicie o módulo Snapper pela seção Diversos no YaST ou digitando yast2 snapper.

  2. Confirme se a Configuração Atual está definida como root. Esse é sempre o caso, a não ser que você tenha adicionado manualmente configurações personalizadas do Snapper.

  3. Escolha o par de pré e pós-instantâneos na lista. Ambos os pares de instantâneos do YaST e do Zypper são do tipo Pré e Pós. Os instantâneos do YaST são denominados zypp(y2base) na coluna Descrição. Os instantâneos do Zypper são denominados zypp(zypper).

    Image
  4. Clique em Mostrar Mudanças para abrir a lista de arquivos que são diferentes entre os dois instantâneos.

    Image
  5. Revise a lista de arquivos. Para exibir a diferença (diff) entre a versão pré e pós de um arquivo, selecione-o na lista.

    Image
  6. Para restaurar um ou mais arquivos, selecione os arquivos ou diretórios relevantes marcando a respectiva caixa de seleção. Clique em Restaurar Selecionados e clique em Sim para confirmar a ação.

    Image

    Para restaurar um único arquivo, ative sua tela de comparação clicando em seu nome. Clique em Restaurar a partir do Primeiro e clique em Sim para confirmar sua seleção.

Procedimento 10.2: Desfazendo mudanças usando o comando snapper
  1. Obtenha uma lista dos instantâneos do YaST e do Zypper executando o comando snapper list -t pre-post. Os instantâneos do YaST são denominados yast MODULE_NAME na coluna Descrição. Os instantâneos do Zypper são denominados zypp(zypper).

    > sudo snapper list -t pre-post
    Pre # | Post # | Pre Date                      | Post Date                     | Description
    ------+--------+-------------------------------+-------------------------------+--------------
    311   | 312    | Tue 06 May 2018 14:05:46 CEST | Tue 06 May 2018 14:05:52 CEST | zypp(y2base)
    340   | 341    | Wed 07 May 2018 16:15:10 CEST | Wed 07 May 2018 16:15:16 CEST | zypp(zypper)
    342   | 343    | Wed 07 May 2018 16:20:38 CEST | Wed 07 May 2018 16:20:42 CEST | zypp(y2base)
    344   | 345    | Wed 07 May 2018 16:21:23 CEST | Wed 07 May 2018 16:21:24 CEST | zypp(zypper)
    346   | 347    | Wed 07 May 2018 16:41:06 CEST | Wed 07 May 2018 16:41:10 CEST | zypp(y2base)
    348   | 349    | Wed 07 May 2018 16:44:50 CEST | Wed 07 May 2018 16:44:53 CEST | zypp(y2base)
    350   | 351    | Wed 07 May 2018 16:46:27 CEST | Wed 07 May 2018 16:46:38 CEST | zypp(y2base)
  2. Obtenha uma lista dos arquivos modificados de um par de instantâneos com snapper status PRE.POST à esquerda. Os arquivos com mudanças de conteúdo são marcados com c, os arquivos que foram adicionados são marcados com + e os arquivos apagados são marcados com -.

    > sudo snapper status 350..351
    +..... /usr/share/doc/packages/mikachan-fonts
    +..... /usr/share/doc/packages/mikachan-fonts/COPYING
    +..... /usr/share/doc/packages/mikachan-fonts/dl.html
    c..... /usr/share/fonts/truetype/fonts.dir
    c..... /usr/share/fonts/truetype/fonts.scale
    +..... /usr/share/fonts/truetype/みかちゃん-p.ttf
    +..... /usr/share/fonts/truetype/みかちゃん-pb.ttf
    +..... /usr/share/fonts/truetype/みかちゃん-ps.ttf
    +..... /usr/share/fonts/truetype/みかちゃん.ttf
    c..... /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4
    c..... /var/lib/rpm/Basenames
    c..... /var/lib/rpm/Dirnames
    c..... /var/lib/rpm/Group
    c..... /var/lib/rpm/Installtid
    c..... /var/lib/rpm/Name
    c..... /var/lib/rpm/Packages
    c..... /var/lib/rpm/Providename
    c..... /var/lib/rpm/Requirename
    c..... /var/lib/rpm/Sha1header
    c..... /var/lib/rpm/Sigmd5
  3. Para exibir a diff de determinado arquivo, execute snapper diff PRE.POST FILENAME à esquerda. Se você não especificar FILENAME, será exibida a diff de todos os arquivos.

    > sudo snapper diff 350..351 /usr/share/fonts/truetype/fonts.scale
    --- /.snapshots/350/snapshot/usr/share/fonts/truetype/fonts.scale       2014-04-23 15:58:57.000000000 +0200
    +++ /.snapshots/351/snapshot/usr/share/fonts/truetype/fonts.scale       2014-05-07 16:46:31.000000000 +0200
    @@ -1,4 +1,4 @@
    -1174
    +1486
     ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso10646-1
     ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso8859-1
    [...]
  4. Para restaurar um ou mais arquivos, execute snapper -v undochange PRE.POST FILENAMES à esquerda. Se você não especificar FILENAMES, todos os arquivos modificados serão restaurados.

    > sudo snapper -v undochange 350..351
         create:0 modify:13 delete:7
         undoing change...
         deleting /usr/share/doc/packages/mikachan-fonts
         deleting /usr/share/doc/packages/mikachan-fonts/COPYING
         deleting /usr/share/doc/packages/mikachan-fonts/dl.html
         deleting /usr/share/fonts/truetype/みかちゃん-p.ttf
         deleting /usr/share/fonts/truetype/みかちゃん-pb.ttf
         deleting /usr/share/fonts/truetype/みかちゃん-ps.ttf
         deleting /usr/share/fonts/truetype/みかちゃん.ttf
         modifying /usr/share/fonts/truetype/fonts.dir
         modifying /usr/share/fonts/truetype/fonts.scale
         modifying /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4
         modifying /var/lib/rpm/Basenames
         modifying /var/lib/rpm/Dirnames
         modifying /var/lib/rpm/Group
         modifying /var/lib/rpm/Installtid
         modifying /var/lib/rpm/Name
         modifying /var/lib/rpm/Packages
         modifying /var/lib/rpm/Providename
         modifying /var/lib/rpm/Requirename
         modifying /var/lib/rpm/Sha1header
         modifying /var/lib/rpm/Sigmd5
         undoing change done
Atenção
Atenção: Revertendo adições de usuário

Não é recomendado reverter adições de usuário desfazendo mudanças com o Snapper. Como alguns diretórios são excluídos dos instantâneos, os arquivos pertencentes a estes usuários permanecerão no sistema de arquivos. Se for criado um usuário com o mesmo ID de usuário daquele que foi apagado, ele herdará os arquivos. Portanto, é altamente recomendável usar a ferramenta Gerenciamento de Usuários e Grupos do YaST para remover usuários.

10.2.2 Usando o Snapper para restaurar arquivos

Além dos instantâneos de instalação e administração, o Snapper cria instantâneos de linha do tempo. É possível usar os instantâneos de backup para restaurar arquivos que foram apagados acidentalmente ou para restaurar a versão anterior de um arquivo. Usando o recurso diff do Snapper, é possível também descobrir quais modificações foram feitas em um período específico.

A capacidade de restaurar arquivos é interessante principalmente no que diz respeito a dados, que podem residir em subvolumes ou partições dos quais os instantâneos não são criados por padrão. Para restaurar arquivos de diretórios pessoais, por exemplo, crie uma configuração separada do Snapper para /home capturando instantâneos de linha do tempo automáticos. Consulte a Seção 10.5, “Criando e modificando as configurações do Snapper” para obter instruções.

Atenção
Atenção: Comparação entre restaurar arquivos e rollback

Os instantâneos criados do sistema de arquivos raiz (definido pela configuração raiz do Snapper) podem ser usados para fazer rollback do sistema. A forma recomendada de fazer o rollback é inicializar do instantâneo e depois fazer o rollback. Consulte a Seção 10.3, “Rollback do sistema por inicialização de instantâneos” para obter os detalhes.

É possível também fazer rollback restaurando todos os arquivos de um instantâneo do sistema de arquivos raiz, conforme descrito a seguir. No entanto, isso não é recomendado. É possível restaurar arquivos únicos, por exemplo, um arquivo de configuração do diretório /etc, mas não a lista completa de arquivos do instantâneo.

Esta restrição afeta apenas os instantâneos criados do sistema de arquivos raiz.

Procedimento 10.3: Restaurando arquivos usando o módulo Snapper do YaST
  1. Inicie o módulo Snapper pela seção Diversos no YaST ou digitando yast2 snapper.

  2. Selecione a Configuração Atual da qual escolher o instantâneo.

  3. Selecione o instantâneo de linha do tempo do qual restaurar o arquivo e escolha Mostrar Mudanças. Os instantâneos de linha do tempo são do tipo Único, com um valor descritivo de linha do tempo.

  4. Selecione um arquivo na caixa de texto clicando no nome dele. A diferença entre a versão do instantâneo e o sistema atual é exibida. Marque a caixa de seleção para escolher o arquivo para restauração. Faça isso para todos os arquivos que deseja restaurar.

  5. Clique em Restaurar Selecionados e clique em Sim para confirmar a ação.

Procedimento 10.4: Restaurando arquivos usando o comando snapper
  1. Obtenha a lista de instantâneos de linha do tempo para determinada configuração executando o seguinte comando:

    > sudo snapper -c CONFIG list -t single | grep timeline

    CONFIG precisa ser substituído pela configuração existente do Snapper. Use snapper list-configs para exibir uma lista.

  2. Obtenha a lista de arquivos modificados de determinado instantâneo executando o seguinte comando:

    > sudo snapper -c CONFIG status SNAPSHOT_ID..0

    Substitua SNAPSHOT_ID pelo ID do instantâneo do qual deseja restaurar os arquivos.

  3. Se preferir, liste as diferenças entre a versão do arquivo atual e a versão do instantâneo executando

    > sudo snapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME

    Se você não especificar <FILE NAME>, será mostrada a diferença de todos os arquivos.

  4. Para restaurar um ou mais arquivos, execute

    > sudo snapper -c CONFIG -v undochange SNAPSHOT_ID..0 FILENAME1 FILENAME2

    Se você não especificar nomes de arquivos, todos os arquivos mudados serão restaurados.

10.3 Rollback do sistema por inicialização de instantâneos

A versão GRUB 2 incluída no SUSE Linux Enterprise Desktop pode inicializar de instantâneos Btrfs. Juntamente com o recurso de rollback do Snapper, ela permite recuperar um sistema mal configurado. Apenas os instantâneos criados com a configuração padrão do Snapper (root) são inicializáveis.

Importante
Importante: Configuração suportada

A partir do SUSE Linux Enterprise Desktop 15 SP5, os rollbacks de sistema apenas serão suportados se a configuração de subvolume padrão da partição raiz não tiver sido mudada.

Ao inicializar um instantâneo, as partes do sistema de arquivos incluídas no instantâneo são montadas como apenas leitura; todos os outros sistemas de arquivos e partes excluídos dos instantâneos são montados como leitura-gravação e podem ser modificados.

Importante
Importante: Comparação entre desfazer mudanças e rollback

Ao trabalhar com instantâneos para restaurar dados, é importante saber que há dois cenários fundamentalmente distintos nos quais o Snapper pode atuar:

Desfazendo mudanças

Ao desfazer mudanças conforme descrito na Seção 10.2, “Usando o Snapper para desfazer mudanças”, dois instantâneos são comparados e as mudanças entre eles são revertidas. O uso deste método também permite excluir explicitamente os arquivos selecionados para não serem restaurados.

Rollback

Ao fazer rollbacks conforme descrito a seguir, o sistema é redefinido para o estado do momento em que o instantâneo foi criado.

Para fazer rollback de um instantâneo inicializável, os seguintes requisitos devem ser atendidos. Em uma instalação padrão, o sistema é configurado apropriadamente.

Requisitos para rollback de um instantâneo inicializável
  • O sistema de arquivos raiz precisa ser o Btrfs. A inicialização de instantâneos de volume LVM não é suportada.

  • O sistema de arquivos raiz precisa estar em um único dispositivo, uma única partição e um único subvolume. Os diretórios excluídos dos instantâneos, como /srv (consulte Seção 10.1.3, “Diretórios que são excluídos dos instantâneos” para ver a lista completa) podem residir em partições separadas.

  • O sistema precisa ser inicializável pelo carregador de boot instalado.

Para fazer rollback de um instantâneo inicializável, faça o seguinte:

  1. Inicialize o sistema. No menu de boot, escolha Bootable snapshots (Instantâneos inicializáveis) e selecione o instantâneo que deseja inicializar. A lista de instantâneos é classificada por data: o instantâneo mais recente é listado primeiro.

  2. Efetue login no sistema. Verifique com atenção se tudo funciona conforme esperado. Observe que você não pode gravar em nenhum diretório que faça parte do instantâneo. Os dados gravados em outros diretórios não serão perdidos, independentemente do que você faça a seguir.

  3. Dependendo se você deseja ou não fazer rollback, escolha a próxima etapa:

    1. Se o sistema está em um estado no qual você não deseja fazer rollback, reinicialize-o para inicializá-lo no estado atual do sistema. Em seguida, você pode escolher um instantâneo diferente ou iniciar o sistema de recuperação.

    2. Para fazer o rollback, execute

      > sudo snapper rollback

      e reinicialize posteriormente. Na tela de boot, escolha a entrada de boot padrão para reinicializar no sistema restaurado. É criado um instantâneo do status do sistema de arquivos antes do rollback. O subvolume padrão da raiz será substituído por um novo instantâneo de leitura-gravação. Para obter os detalhes, consulte a Seção 10.3.1, “Instantâneos após rollback”.

      Isso é útil para adicionar uma descrição para o instantâneo com a opção -d. Por exemplo:

      New file system root since rollback on DATE TIME
Dica
Dica: Voltando para um estado da instalação específico

Se os instantâneos não forem desabilitados durante a instalação, um instantâneo inicializável inicial será criado ao término da instalação do sistema inicial. É possível voltar para esse estado a qualquer momento inicializando o instantâneo. É possível identificar o instantâneo pela descrição after installation.

Um instantâneo inicializável também é criado ao iniciar o upgrade do sistema para um service pack ou uma nova versão principal (desde que os instantâneos não estejam desabilitados).

10.3.1 Instantâneos após rollback

Antes da execução de um rollback, é criado um instantâneo do sistema de arquivos em execução. A descrição faz referência ao ID do instantâneo que foi restaurado no rollback.

Os instantâneos criados por rollbacks recebem o valor number para o atributo Cleanup. Portanto, os instantâneos de rollback são automaticamente apagados quando o número definido de instantâneos é atingido. Consulte a Seção 10.7, “Limpeza automática de instantâneos” para obter os detalhes. Se o instantâneo contém dados importantes, extraia os dados dele antes que ele seja removido.

10.3.1.1 Exemplo de instantâneo de rollback

Por exemplo, após uma nova instalação, os seguintes instantâneos estarão disponíveis no sistema:

# snapper --iso list
Type   | # |     | Cleanup | Description           | Userdata
-------+---+ ... +---------+-----------------------+--------------
single | 0 |     |         | current               |
single | 1 |     |         | first root filesystem |
single | 2 |     | number  | after installation    | important=yes

Após a execução do comando sudo snapper rollback, o instantâneo 3 será criado com o estado do sistema antes da execução do rollback. O instantâneo 4 é o novo subvolume Btrfs padrão e, portanto, o sistema após uma reinicialização.

# snapper --iso list
Type   | # |     | Cleanup | Description           | Userdata
-------+---+ ... +---------+-----------------------+--------------
single | 0 |     |         | current               |
single | 1 |     | number  | first root filesystem |
single | 2 |     | number  | after installation    | important=yes
single | 3 |     | number  | rollback backup of #1 | important=yes
single | 4 |     |         |                       |

10.3.2 Acessando e identificando entradas de boot de instantâneos

Para inicializar de um instantâneo, reinicialize a máquina e escolha Start Bootloader from a read-only snapshot (Iniciar Carregador de Boot de instantâneo apenas leitura). Aparece uma tela com todos os instantâneos inicializáveis. O instantâneo mais recente é listado primeiro, o mais antigo por último. Use as teclas e para navegar e pressione Enter para ativar o instantâneo selecionado. A ativação de um instantâneo pelo menu de boot não reinicializa a máquina imediatamente; mas, em vez disso, abre o carregador de boot do instantâneo selecionado.

Carregador de boot: instantâneos
Figura 10.1: Carregador de boot: instantâneos
Atenção
Atenção: Falha ao inicializar o Xen de um instantâneo Btrfs usando UEFI

Consulte https://www.suse.com/support/kb/doc/?id=000020602 para obter mais detalhes.

Cada entrada de instantâneo no carregador de boot segue um esquema de nomeação que torna possível identificá-lo facilmente:

[*]1OS2 (KERNEL3,DATE4TTIME5,DESCRIPTION6)

1

Se o instantâneo foi marcado como important, a entrada é marcada com um *.

2

Rótulo do sistema operacional.

4

Data no formato YYYY-MM-DD.

5

Horário no formato HH:MM.

6

Esse campo mostra a descrição do instantâneo. No caso de um instantâneo criado manualmente, trata-se da string criada com a opção --description ou de uma string personalizada (consulte a Dica: Definindo uma descrição personalizada para as entradas de instantâneos do carregador de boot). No caso de um instantâneo criado automaticamente, trata-se da ferramenta que foi chamada, por exemplo, zypp(zypper) ou yast_sw_single. Descrições extensas podem ser truncadas, dependendo do tamanho da tela de boot.

Dica
Dica: Definindo uma descrição personalizada para as entradas de instantâneos do carregador de boot

É possível substituir a string padrão no campo da descrição de um instantâneo por uma string personalizada. Isso é útil, por exemplo, quando uma descrição criada automaticamente não é suficiente, ou quando uma descrição inserida pelo usuário é muito longa. Para definir uma string personalizada STRING para o instantâneo NUMBER, use o seguinte comando:

> sudo snapper modify --userdata "bootloader=STRING" NUMBER

A descrição deve ter no máximo 25 caracteres, tudo o que ultrapassar esse tamanho não poderá ser lido na tela de boot.

10.3.3 Limitações

O rollback do sistema completo, restauração do sistema completo para o estado idêntico ao que ele estava quando o instantâneo foi capturado, não é possível.

10.3.3.1 Diretórios excluídos dos instantâneos

Os instantâneos do sistema de arquivos raiz não contêm todos os diretórios. Consulte Seção 10.1.3, “Diretórios que são excluídos dos instantâneos” para ver os detalhes e motivos. Como consequência geral, os dados desses diretórios não são restaurados, resultando nas seguintes limitações.

Complementos e software de terceiros podem se tornar inutilizáveis após um rollback

Os aplicativos e complementos que instalam dados em subvolumes excluídos do instantâneo, como /opt, poderão não funcionar após o rollback, se outras partes dos dados dos aplicativos também forem instaladas em subvolumes incluídos no instantâneo. Reinstale o aplicativo ou complemento para resolver o problema.

Problemas de acesso a arquivos

Se um aplicativo mudar as permissões e/ou a propriedade do arquivo no meio tempo entre o instantâneo e o sistema atual, o aplicativo talvez não consiga acessar o arquivo. Redefina as permissões e/ou a propriedade dos arquivos afetados após o rollback.

Formatos de dados incompatíveis

Se um serviço ou aplicativo estabelecer um novo formato de dados no meio tempo entre o instantâneo e o sistema atual, o aplicativo talvez não consiga ler os arquivos de dados afetados após o rollback.

Subvolumes com mistura de códigos e dados

Subvolumes como /srv podem incluir uma mistura de códigos e dados. O rollback pode resultar em código não funcional. A instalação de uma versão PHP menos eficiente, por exemplo, pode resultar em scripts PHP com defeito no servidor Web.

Dados do usuário

Se o rollback remover usuários do sistema, os dados de propriedade desses usuários nos diretórios excluídos do instantâneo serão removidos. Se for criado um usuário com o mesmo ID de usuário, ele herdará os arquivos. Use uma ferramenta como find para localizar e remover arquivos órfãos.

10.3.3.2 Nenhum rollback dos dados do carregador de boot

Não é possível fazer rollback do carregador de boot, pois todas as fases do carregador de boot devem se ajustar. Isso não é garantido no caso de rollbacks de /boot.

10.4 Habilitando o Snapper em diretórios pessoais dos usuários

É possível habilitar instantâneos para os diretórios /home dos usuários, o que suporta vários casos de uso:

  • Usuários individuais podem gerenciar seus próprios instantâneos e rollbacks.

  • Usuários do sistema, por exemplo, administradores de banco de dados, sistema e rede, que desejam monitorar cópias de arquivos de configuração, documentação, etc.

  • Compartilhamentos do Samba com diretórios pessoais e back end btrfs.

O diretório de cada usuário é um subvolume Btrfs de /home. É possível configurar isso manualmente (consulte a Seção 10.4.3, “Habilitando manualmente os instantâneos em diretórios pessoais”). Entretanto, o modo mais prático é usar o pam_snapper. O pacote pam_snapper instala o módulo pam_snapper.so e os scripts ajudantes, o que automatiza a criação de usuário e a configuração do Snapper.

O pam_snapper permite a integração com o comando useradd, os PAMs (Pluggable Authentication Modules – Módulos de Autenticação Conectáveis) e o Snapper. Por padrão, ele cria instantâneos no login e logout do usuário e também cria instantâneos com base no tempo, pois determinados usuários permanecem conectados por longos períodos. Você pode mudar os padrões usando os comandos e arquivos de configuração normais do Snapper.

10.4.1 Instalando o pam_snapper e criando usuários

A maneira mais fácil é começar com um novo diretório /home formatado com Btrfs e nenhum usuário existente. Instale o pam_snapper:

# zypper in pam_snapper

Adicione esta linha a /etc/pam.d/common-session:

session optional pam_snapper.so

Use o script /usr/lib/pam_snapper/pam_snapper_useradd.sh para criar um novo usuário e um diretório pessoal. Por padrão, o script executa um dry run. Edite o script para mudar DRYRUN=1 para DRYRUN=0. Agora você pode criar um novo usuário:

# /usr/lib/pam_snapper/pam_snapper_useradd.sh \
username group passwd=password
Create subvolume '/home/username'
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

Os arquivos de /etc/skel serão copiados para o diretório pessoal do usuário na primeira vez que ele efetuar login. Liste suas configurações do Snapper para verificar se a configuração do usuário foi criada:

# snapper list --all
Config: home_username, subvolume: /home/username
Type   | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+---+-------+------+------+---------+-------------+---------
single | 0 |       |      | root |         | current     |

Ao longo do tempo, essa saída será preenchida com uma lista de instantâneos, que o usuário poderá gerenciar com os comandos padrão do Snapper.

10.4.2 Removendo usuários

Remova usuários com o script /usr/lib/pam_snapper/pam_snapper_userdel.sh. Por padrão, ele executa um dry run, portanto edite-o para mudar DRYRUN=1 para DRYRUN=0. Isso remove o usuário, o subvolume pessoal do usuário, a configuração do Snapper e apaga todos os instantâneos.

# /usr/lib/pam_snapper/pam_snapper_userdel.sh username

10.4.3 Habilitando manualmente os instantâneos em diretórios pessoais

Estas são as etapas para a configuração manual dos diretórios pessoais dos usuários com o Snapper. O /home deve ser formatado com Btrfs sem nenhum usuário criado.

# btrfs subvol create /home/username
# snapper -c home_username create-config /home/username
# sed -i -e "s/ALLOW_USERS=\"\"/ALLOW_USERS=\"username\"/g" \
/etc/snapper/configs/home_username
# yast users add username=username home=/home/username password=password
# chown username.group /home/username
# chmod 755 /home/username/.snapshots

10.5 Criando e modificando as configurações do Snapper

O modo como o Snapper se comporta é definido em um arquivo de configuração específico a cada partição ou subvolume Btrfs. Esses arquivos de configuração residem em /etc/snapper/configs/.

Caso o sistema de arquivos raiz seja grande o suficiente (aproximadamente 12 GB), os instantâneos serão habilitados automaticamente no sistema de arquivos raiz / na instalação. A configuração padrão correspondente é denominada root. Ela cria e gerencia os instantâneos do YaST e do Zypper. Consulte a Seção 10.5.1.1, “Dados de configuração” para obter uma lista dos valores padrão.

Nota
Nota: Tamanho mínimo do sistema de arquivos raiz para habilitar instantâneos

Conforme explicado na Seção 10.1, “Configuração padrão”, a habilitação de instantâneos requer espaço livre adicional no sistema de arquivos raiz. A quantidade depende do número de pacotes instalados e de mudanças feitas no volume que está incluído nos instantâneos. A frequência e o número de instantâneos que são armazenados também são considerados.

Há um tamanho mínimo de sistema de arquivos raiz que é necessário para habilitar instantâneos automaticamente durante a instalação. Atualmente, esse tamanho está por volta de 12 GB. Esse valor pode mudar no futuro, dependendo da arquitetura e do tamanho do sistema básico. Ele depende dos valores para as seguintes tags no arquivo /control.xml da mídia de instalação:

<root_base_size>
<btrfs_increase_percentage>

Ele é calculado com a seguinte fórmula: ROOT_BASE_SIZE * (1 + BTRFS_INCREASE_PERCENTAGE/100)

Lembre-se de que esse valor é um tamanho mínimo. Considere usar mais espaço para o sistema de arquivos raiz. Como regra geral, dobre o tamanho que você usa quando não tem instantâneos habilitados.

É possível criar suas próprias configurações para outras partições formatadas com Btrfs ou subvolumes existentes em uma partição Btrfs. No exemplo a seguir, nós definimos uma configuração do Snapper para backup dos dados do servidor Web que residem em uma partição separada formatada por Btrfs montada em /srv/www.

Após a criação de uma configuração, é possível usar o próprio snapper ou o módulo Snapper do YaST para restaurar arquivos desses instantâneos. No YaST, você precisa selecionar a Configuração Atual e especificar a configuração do snapper com o switch global -c (por exemplo, snapper -c myconfig list).

Para criar uma nova configuração do Snapper, execute snapper create-config:

> sudo snapper -c www-data1 create-config /srv/www2

1

Nome do arquivo de configuração.

2

Ponto de montagem da partição ou subvolume Btrfs no qual criar instantâneos.

Este comando cria um novo arquivo de configuração /etc/snapper/configs/www-data com valores padrão lógicos (obtidos de /etc/snapper/config-templates/default). Consulte a Seção 10.5.1, “Gerenciando configurações existentes” para obter instruções de como ajustar os padrões.

Dica
Dica: Padrões de configuração

Os valores padrão para uma nova configuração são obtidos de /etc/snapper/config-templates/default. Para usar seu próprio conjunto de padrões, crie uma cópia desse arquivo no mesmo diretório e ajuste-o de acordo com as suas necessidades. Para usá-lo, especifique a opção -t com o comando create-config:

> sudo snapper -c www-data create-config -t MY_DEFAULTS /srv/www

10.5.1 Gerenciando configurações existentes

O comando snapper oferece vários subcomandos para gerenciar as configurações existentes. É possível listar, mostrar, apagar e modificá-las:

Listando configurações

Use o subcomando snapper list-configs para obter todas as configurações existentes:

> sudo snapper list-configs
Config | Subvolume
-------+----------
root   | /
usr    | /usr
local  | /local
Mostrando uma configuração

Use o subcomando snapper -c CONFIG get-config para exibir a configuração especificada. Substitua CONFIG por um dos nomes de configuração mostrados pelo snapper list-configs. Para obter mais informações sobre as opções de configuração, consulte Seção 10.5.1.1, “Dados de configuração”.

Para exibir a configuração padrão, execute:

> sudo snapper -c root get-config
Modificando uma configuração

Use o subcomando snapper -c CONFIG set-config OPTION=VALUE para modificar uma opção na configuração especificada. Substitua CONFIG por um dos nomes de configuração mostrados pelo snapper list-configs. Os valores possíveis para OPTION e VALUE estão listados na Seção 10.5.1.1, “Dados de configuração”.

Apagando uma configuração

Use o subcomando snapper -c CONFIG delete-config para apagar uma configuração. Substitua CONFIG por um dos nomes de configuração mostrados pelo snapper list-configs.

10.5.1.1 Dados de configuração

Cada configuração possui uma lista das opções que podem ser modificadas por linha de comando. A seguinte lista mostra os detalhes de cada opção. Para mudar um valor, execute snapper -c CONFIG set-config "KEY=VALUE".

ALLOW_GROUPS, ALLOW_USERS

Conceder permissões para usar instantâneos a usuários regulares. Consulte a Seção 10.5.1.2, “Usando o Snapper como usuário comum” para obter mais informações.

O valor padrão é "".

BACKGROUND_COMPARISON

Define se os instantâneos pré e pós devem ser comparados em segundo plano após a criação.

O valor padrão é "yes".

EMPTY_*

Define o algoritmo de limpeza de pares de instantâneos com instantâneos pré e pós idênticos. Consulte a Seção 10.7.3, “Limpando pares de instantâneos que não são diferentes” para obter os detalhes.

FSTYPE

Tipo de sistema de arquivos da partição. Não alterar.

O valor padrão é "btrfs".

NUMBER_*

Define o algoritmo de limpeza para instantâneos de instalação e de administração. Consulte a Seção 10.7.1, “Limpando instantâneos numerados” para obter os detalhes.

QGROUP/SPACE_LIMIT

Adiciona suporte a cotas aos algoritmos de limpeza. Consulte a Seção 10.7.5, “Adicionando suporte a cotas de disco” para obter os detalhes.

SUBVOLUME

Ponto de montagem da partição ou do subvolume para o instantâneo. Não alterar.

O valor padrão é "/".

SYNC_ACL

Se o Snapper for utilizado por usuários regulares (consulte a Seção 10.5.1.2, “Usando o Snapper como usuário comum”), eles deverão ter acesso e ler os arquivos dos diretórios .snapshot. Se SYNC_ACL estiver definido como yes, o Snapper os tornará acessíveis automaticamente usando ACLs para usuários e grupos das entradas ALLOW_USERS ou ALLOW_GROUPS.

O valor padrão é "no".

TIMELINE_CREATE

Se definido como yes, serão criados instantâneos por hora. Valores válidos: yes, no.

O valor padrão é "no".

TIMELINE_CLEANUP/TIMELINE_LIMIT_*

Define o algoritmo de limpeza de instantâneos de linha do tempo. Consulte a Seção 10.7.2, “Limpando instantâneos de linha do tempo” para obter os detalhes.

10.5.1.2 Usando o Snapper como usuário comum

Por padrão, o Snapper só pode ser usado pelo root. No entanto, há casos em que determinados grupos ou usuários precisam criar instantâneos ou desfazer mudanças revertendo um instantâneo:

  • administradores de site na Web que desejam criar instantâneos de /srv/www

  • Usuários que desejam capturar um instantâneo de seu diretório pessoal

Para essas finalidades, você pode criar configurações do Snapper que concedam permissões a usuários e/ou grupos. Os usuários especificados devem conseguir ler e acessar o diretório .snapshots correspondente. A maneira mais fácil de fazer isso é definir a opção SYNC_ACL como yes.

Procedimento 10.5: Habilitando usuários comuns a usar o Snapper

Todas as etapas deste procedimento devem ser executadas pelo root.

  1. Se ainda não existir uma configuração do Snapper, crie uma para a partição ou o subvolume em que o usuário poderá usar o Snapper. Consulte a Seção 10.5, “Criando e modificando as configurações do Snapper” para obter instruções. Exemplo:

    > sudo snapper --config web_data create /srv/www
  2. O arquivo de configuração é criado em /etc/snapper/configs/CONFIG, em que CONFIG é o valor que você especificou com -c/--config na etapa anterior (por exemplo, /etc/snapper/configs/web_data). Ajuste-o de acordo com as suas necessidades. Para obter mais informações, consulte a Seção 10.5.1, “Gerenciando configurações existentes”.

  3. Defina os valores de ALLOW_USERS e ALLOW_GROUPS para conceder permissões a usuários e grupos, respectivamente. Separe várias entradas com Space. Para conceder permissões ao usuário www_admin, por exemplo, execute:

    > sudo snapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"
  4. Agora o(s) usuário(s) e grupo(s) pode(m) utilizar a configuração especificada do Snapper. É possível testá-la com o comando list, por exemplo:

    www_admin:~ > snapper -c web_data list

10.6 Criando e gerenciando instantâneos manualmente

Não é possível apenas criar e gerenciar os instantâneos automaticamente pela configuração do Snapper, você também pode criar pares de instantâneos (antes e após) ou instantâneos únicos manualmente usando a ferramenta de linha de comando ou o módulo do YaST.

Todas as operações do Snapper são executadas de acordo com uma configuração existente (consulte a Seção 10.5, “Criando e modificando as configurações do Snapper” para obter os detalhes). Você só pode criar instantâneos de partições ou volumes em que exista uma configuração. Por padrão, a configuração do sistema (root) é usada. Para criar ou gerenciar instantâneos com sua própria configuração, selecione-a de maneira clara. Use a caixa suspensa Configuração Atual no YaST ou especifique -c na linha de comando (snapper -c MYCONFIG COMMAND).

10.6.1 Metadados de instantâneos

Cada instantâneo consiste no próprio instantâneo e em determinados metadados. Ao criar um instantâneo, você também precisa especificar os metadados. A modificação de um instantâneo também altera seus metadados; não é possível modificar seu conteúdo. Use snapper list para mostrar os instantâneos existentes e seus metadados:

snapper --config home list

Lista os instantâneos da configuração home. Para listar os instantâneos da configuração padrão (raiz), use snapper -c root list ou snapper list.

snapper list -a

Lista os instantâneos de todas as configurações existentes.

snapper list -t pre-post

Lista todos os pares pré-instantâneo e pós-instantâneo da configuração padrão (root).

snapper list -t single

Lista todos os instantâneos do tipo single da configuração padrão (root).

Os seguintes metadados estão disponíveis para cada instantâneo:

  • Tipo: tipo do instantâneo. Consulte a Seção 10.6.1.1, “Tipos de instantâneos” para obter os detalhes. Esses dados não podem ser mudados.

  • Número: número exclusivo do instantâneo. Esses dados não podem ser mudados.

  • Número do Pré: especifica o número do pré-instantâneo correspondente. Apenas para instantâneos do tipo pós. Esses dados não podem ser mudados.

  • Descrição: uma descrição do instantâneo.

  • Dados de usuário: uma descrição estendida que especifica os dados personalizados no formato de uma lista de chave=valor separada por vírgula: reason=testing, project=foo. Este campo também é usado para marcar um instantâneo como importante (important=yes) e listar o usuário que criou o instantâneo (user=tux).

  • Algoritmo de Limpeza: algoritmo de limpeza do instantâneo. Consulte a Seção 10.7, “Limpeza automática de instantâneos” para obter os detalhes.

10.6.1.1 Tipos de instantâneos

O Snapper reconhece três tipos diferentes de instantâneos: pre (pré) post (pós) e single (único). Eles são iguais fisicamente, mas o Snapper trabalha com eles de forma diferente.

pre

Instantâneo de um sistema de arquivos antes da modificação. Cada instantâneo pre corresponde a um instantâneo post. Por exemplo, ele é usado para instantâneos automáticos do YaST/Zypper.

post

Instantâneo de um sistema de arquivos após a modificação. Cada instantâneo post corresponde a um instantâneo pre. Por exemplo, ele é usado para instantâneos automáticos do YaST/Zypper.

single

Instantâneo independente. Por exemplo, ele é usado para os instantâneos automáticos por hora. Esse é o tipo padrão quando se cria instantâneos.

10.6.1.2 Algoritmos de limpeza

O Snapper oferece três algoritmos para limpeza de instantâneos antigos. Os algoritmos são executados em uma tarefa cron diária. É possível definir o número de tipos diferentes de instantâneos para serem mantidos na configuração do Snapper (consulte a Seção 10.5.1, “Gerenciando configurações existentes” para obter detalhes).

number

Apaga instantâneos antigos quando determinado número de instantâneos é atingido.

timeline

Apaga os instantâneos antigos que passaram de uma determinada duração, mas mantém vários instantâneos por hora, dia, mês e ano.

empty-pre-post

Apaga os pares de pré/pós-instantâneos com diffs vazias.

10.6.2 Criando instantâneos

Para criar um instantâneo, execute o snapper create ou clique em Criar no módulo Snapper do YaST. Os exemplos a seguir explicam como criar instantâneos da linha de comando. A interface do YaST para o Snapper não está especificamente descrita aqui, mas oferece uma funcionalidade equivalente.

Dica
Dica: Descrição do instantâneo

Especifique sempre uma descrição significativa para, no futuro, conseguir identificar sua finalidade. Você também pode especificar mais informações pela opção --userdata.

snapper create --from 17 --description "with package2"

Cria um instantâneo independente (tipo único) com base em um instantâneo existente, que é especificado pelo número do instantâneo de snapper list. (Isso se aplica a partir da versão 0.8.4 do Snapper.)

snapper create --description "Snapshot for week 2 2014"

Cria um instantâneo independente (tipo único) na configuração padrão (root) com uma descrição. Como nenhum algoritmo de limpeza foi especificado, o instantâneo nunca será apagado automaticamente.

snapper --config home create --description "Cleanup in ~tux"

Cria um instantâneo independente (tipo único) em uma configuração personalizada chamada home com uma descrição. Como nenhum algoritmo de limpeza foi especificado, o instantâneo nunca será apagado automaticamente.

snapper --config home create --description "Daily data backup" --cleanup-algorithm timeline>

Cria um instantâneo independente (tipo único) em uma configuração personalizada chamada home com uma descrição. O instantâneo é apagado automaticamente quando atende aos critérios especificados para o algoritmo de limpeza de linha do tempo na configuração.

snapper create --type pre --print-number --description "Before the Apache config cleanup" --userdata "important=yes"

Cria um instantâneo do tipo pre e imprime o número do instantâneo. Primeiro comando necessário para criar um par de instantâneos usado para gravar o estado antes e após. O instantâneo é marcado como importante.

snapper create --type post --pre-number 30 --description "After the Apache config cleanup" --userdata "important=yes"

Cria um instantâneo do tipo post ligado a seu par pre de número 30. Segundo comando necessário para criar um par de instantâneos usado para gravar o estado antes e após. O instantâneo é marcado como importante.

snapper create --command COMMAND --description "Before and after COMMAND"

Cria automaticamente um par de instantâneos antes e após a execução do COMMAND. Essa opção só está disponível ao usar o snapper na linha de comando.

10.6.3 Modificando os metadados do instantâneo

O Snapper permite modificar a descrição, o algoritmo de limpeza e os dados do usuário de um instantâneo. Todos os outros metadados não podem ser mudados. Os exemplos a seguir explicam como modificar instantâneos da linha de comando. Eles são fáceis de adotar ao usar a interface do YaST.

Para modificar um instantâneo na linha de comando, você precisa saber o número dele. Use snapper list para exibir todos os instantâneos e seus números.

O módulo Snapper do YaST já lista todos os instantâneos. Escolha um na lista e clique em Modificar.

snapper modify --cleanup-algorithm "timeline" 10

Modifica os metadados do instantâneo 10 na configuração padrão (root). O algoritmo de limpeza é definido como timeline.

snapper --config home modify --description "daily backup" -cleanup-algorithm "timeline" 120

Modifica os metadados do instantâneo 120 na configuração personalizada chamada home. Uma nova descrição é definida e o algoritmo de limpeza fica indefinido.

10.6.4 Apagando instantâneos

Para apagar um instantâneo com o módulo Snapper do YaST, escolha-o na lista e clique em Apagar.

Para apagar um instantâneo com a ferramenta de linha de comando, você precisa saber o número dele. Para saber, execute snapper list. Para apagar um instantâneo, execute snapper delete NUMBER.

Não é permitido apagar o instantâneo do subvolume padrão atual.

Ao apagar instantâneos com o Snapper, o espaço liberado é requerido pelo processo do Btrfs que está sendo executado em segundo plano. Portanto, há um atraso na visibilidade e disponibilidade do espaço livre. Se você precisar que o espaço liberado após apagar um instantâneo fique disponível imediatamente, use a opção --sync com o comando delete (apagar).

Dica
Dica: Apagando pares de instantâneos

Ao apagar um instantâneo pre, sempre apague seu post correspondente (e vice-versa).

snapper delete 65

Apaga o instantâneo 65 na configuração padrão (root).

snapper -c home delete 89 90

Apaga os instantâneos 89 e 90 na configuração personalizada chamada home.

snapper delete --sync 23

Apaga o instantâneo 23 da configuração padrão (root) e torna o espaço liberado disponível imediatamente.

Dica
Dica: Apagar instantâneos não referenciados

Às vezes, o instantâneo do Btrfs está presente, mas o arquivo XML que contém os metadados do Snapper está ausente. Nesse caso, o instantâneo não fica visível para o Snapper e precisa se apagado manualmente:

btrfs subvolume delete /.snapshots/SNAPSHOTNUMBER/snapshot
rm -rf /.snapshots/SNAPSHOTNUMBER
Dica
Dica: Instantâneos antigos ocupam mais espaço em disco

Se você apagar instantâneos para liberar espaço no disco rígido, apague primeiro os instantâneos antigos. Quanto mais antigo for o instantâneo, mais espaço em disco ele ocupa.

Os instantâneos também são automaticamente apagados por uma tarefa cron diária. Consulte a Seção 10.6.1.2, “Algoritmos de limpeza” para obter os detalhes.

10.7 Limpeza automática de instantâneos

Os instantâneos ocupam espaço em disco e, ao longo do tempo, a quantidade de espaço em disco ocupado pelos instantâneos pode ficar grande. Para evitar que os discos fiquem sem espaço, o Snapper oferece algoritmos para apagar automaticamente os instantâneos antigos. Esses algoritmos diferenciam entre instantâneos de linha do tempo e numerados (pares de instantâneos de administração e instalação). Você pode especificar quantos instantâneos de cada tipo devem ser mantidos.

Além disso, você pode especificar uma cota de espaço em disco definindo a quantidade máxima de espaço em disco que os instantâneos podem ocupar. Também é possível apagar automaticamente pares de instantâneos pré e pós que não são diferentes.

Um algoritmo de limpeza está sempre associado a uma única configuração do Snapper, portanto, talvez seja necessário definir algoritmos para cada configuração. Para impedir que determinados instantâneos sejam automaticamente apagados, consulte Um instantâneo pode ser protegido contra exclusão? .

A configuração padrão (root) é definida para limpar instantâneos numerados e esvaziar os pares pré-instantâneo e pós-instantâneo. O suporte a cotas está habilitado, os instantâneos não podem ocupar mais do que 50% do espaço em disco disponível da partição raiz. Por padrão, os instantâneos de linha do tempo estão desabilitados, portanto, o algoritmo de limpeza de linha do tempo também está desabilitado.

10.7.1 Limpando instantâneos numerados

A limpeza de instantâneos numerados, pares de instantâneos de administração e de instalação, é controlada pelos seguintes parâmetros de uma configuração do Snapper.

NUMBER_CLEANUP

Habilita ou desabilita a limpeza de pares de instantâneos de instalação e admin. Se habilitado, os pares de instantâneos são apagados quando o número total de instantâneos exceder o número especificado com NUMBER_LIMIT e/ou NUMBER_LIMIT_IMPORTANT e uma duração especificada com NUMBER_MIN_AGE. Valores válidos: yes (habilitar), no (desabilitar).

O valor padrão é "yes".

Exemplo de comando para mudar ou definir:

> sudo snapper -c CONFIG set-config "NUMBER_CLEANUP=no"
NUMBER_LIMIT/NUMBER_LIMIT_IMPORTANT

Define quantos pares de instantâneos de instalação e administração regulares e/ou importantes devem ser mantidos. Ignorado se NUMBER_CLEANUP for definido como "no".

O valor padrão é "2-10" para NUMBER_LIMIT e "4-10" para NUMBER_LIMIT_IMPORTANT. Os algoritmos de limpeza apagam os instantâneos acima do valor máximo especificado, sem levar em consideração o espaço do instantâneo e do sistema de arquivos. Os algoritmos também apagam os instantâneos acima do valor mínimo até que os limites do instantâneo e do sistema de arquivos sejam atingidos.

Exemplo de comando para mudar ou definir:

> sudo snapper -c CONFIG set-config "NUMBER_LIMIT=10"
Importante
Importante: Comparação entre valores de faixa e constantes

Se o suporte a cotas estiver habilitado (consulte a Seção 10.7.5, “Adicionando suporte a cotas de disco”), o limite deverá ser especificado como uma faixa de mínimo-máximo, por exemplo, 2-10. Se o suporte a cotas estiver desabilitado, um valor constante, como 10, deverá ser informado; do contrário, haverá falha na limpeza com um erro.

NUMBER_MIN_AGE

Define a duração mínima em segundos do instantâneo antes de ser automaticamente apagado. Os instantâneos mais novos do que o valor especificado aqui não serão apagados, independentemente de quantos existirem.

O valor padrão é "1800".

Exemplo de comando para mudar ou definir:

> sudo snapper -c CONFIG set-config "NUMBER_MIN_AGE=864000"
Nota
Nota: Limite e duração

NUMBER_LIMIT, NUMBER_LIMIT_IMPORTANT e NUMBER_MIN_AGE sempre são avaliados. Os instantâneos são apagados apenas quando ocorrem todas as condições.

Para manter sempre o número de instantâneos definido com NUMBER_LIMIT*, independentemente da duração deles, defina NUMBER_MIN_AGE como 0.

O exemplo a seguir mostra uma configuração para manter os 10 últimos instantâneos importantes e regulares, independentemente da data em que foram criados:

NUMBER_CLEANUP=yes
NUMBER_LIMIT_IMPORTANT=10
NUMBER_LIMIT=10
NUMBER_MIN_AGE=0

Se você não quiser manter os instantâneos além de uma determinada duração, defina NUMBER_LIMIT* como 0 e insira a duração com NUMBER_MIN_AGE.

O exemplo a seguir mostra uma configuração para manter apenas instantâneos com menos de dez dias:

NUMBER_CLEANUP=yes
NUMBER_LIMIT_IMPORTANT=0
NUMBER_LIMIT=0
NUMBER_MIN_AGE=864000

10.7.2 Limpando instantâneos de linha do tempo

A limpeza de instantâneos de linha do tempo é controlada pelos seguintes parâmetros de uma configuração do Snapper.

TIMELINE_CLEANUP

Habilita ou desabilita a limpeza de instantâneos de linha do tempo. Se habilitado, os instantâneos serão apagados quando o número total exceder o número especificado com TIMELINE_LIMIT_* e a duração especificada com TIMELINE_MIN_AGE. Valores válidos: yes, no.

O valor padrão é "yes".

Exemplo de comando para mudar ou definir:

> sudo snapper -c CONFIG set-config "TIMELINE_CLEANUP=yes"
TIMELINE_LIMIT_DAILY, TIMELINE_LIMIT_HOURLY, TIMELINE_LIMIT_MONTHLY, TIMELINE_LIMIT_WEEKLY, TIMELINE_LIMIT_YEARLY

Número de instantâneos para manter por hora, dia, mês, semana e ano.

O valor padrão de cada entrada é "10", exceto para TIMELINE_LIMIT_WEEKLY que, por padrão, está definido como "0".

TIMELINE_MIN_AGE

Define a duração mínima em segundos do instantâneo antes de ser automaticamente apagado.

O valor padrão é "1800".

Exemplo 10.1: Exemplo de configuração de linha do tempo
TIMELINE_CLEANUP="yes"
TIMELINE_CREATE="yes"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_HOURLY="24"
TIMELINE_LIMIT_MONTHLY="12"
TIMELINE_LIMIT_WEEKLY="4"
TIMELINE_LIMIT_YEARLY="2"
TIMELINE_MIN_AGE="1800"

Este exemplo de configuração habilita os instantâneos por hora, que são limpos automaticamente. TIMELINE_MIN_AGE e TIMELINE_LIMIT_* sempre são avaliados juntos. Neste exemplo, a duração mínima de um instantâneo, antes de ser apagado, está definida como 30 minutos (1800 segundos). Como nós criamos instantâneos por hora, isso garante que apenas os instantâneos mais recentes sejam mantidos. Se TIMELINE_LIMIT_DAILY não estiver definido como zero, significa que o primeiro instantâneo do dia também será mantido.

Instantâneos que devem ser mantidos
  • Horário: os últimos 24 instantâneos que foram capturados.

  • Diariamente: o primeiro instantâneo diário que foi capturado é mantido para os últimos sete dias.

  • Mensal: o primeiro instantâneo capturado no último dia do mês é mantido para os últimos 20 meses.

  • Semanalmente: o primeiro instantâneo capturado no último dia da semana é mantido para as últimas quatro semanas.

  • Anualmente: o primeiro instantâneo capturado no último dia do ano é mantido para os últimos dois anos.

10.7.3 Limpando pares de instantâneos que não são diferentes

Conforme explicado em Seção 10.1.2, “Tipos de instantâneos”, sempre que você executar um módulo do YaST ou o Zypper, um pré-instantâneo é criado na inicialização, e um pós-instantâneo é criado durante o encerramento. Se você não fez nenhuma mudança, não haverá diferença entre os instantâneos pré e pós. Esses tipos de pares de instantâneos vazios podem ser automaticamente apagados ao definir os seguintes parâmetros em uma configuração do Snapper:

EMPTY_PRE_POST_CLEANUP

Se definido como yes (sim), os pares de instantâneos pré e pós que forem iguais serão apagados.

O valor padrão é "yes".

EMPTY_PRE_POST_MIN_AGE

Define a duração mínima, em segundos, do par de instantâneos pré e pós iguais antes de ser automaticamente apagado.

O valor padrão é "1800".

10.7.4 Limpando instantâneos criados manualmente

O Snapper não oferece algoritmos de limpeza personalizados para instantâneos criados manualmente. No entanto, você pode atribuir o algoritmo de limpeza de número ou linha do tempo a um instantâneo criado manualmente. Se você fizer isso, o instantâneo ingressará na fila de limpeza do algoritmo especificado. Você pode especificar um algoritmo de limpeza ao criar um instantâneo ou modificar um instantâneo existente:

snapper create --description "Test" --cleanup-algorithm number

Cria um instantâneo independente (tipo único) para a configuração padrão (raiz) e atribui o algoritmo de limpeza number.

snapper modify --cleanup-algorithm "timeline" 25

Modifica o instantâneo com o número 25 e atribui o algoritmo de limpeza timeline.

10.7.5 Adicionando suporte a cotas de disco

Além dos algoritmos de limpeza de número e/ou linha do tempo descritos anteriormente, o Snapper suporta cotas. Você pode definir a porcentagem de espaço disponível que os instantâneos podem ocupar. Esse valor percentual é sempre aplicado ao subvolume Btrfs definido na respectiva configuração do Snapper.

As cotas do Btrfs são aplicadas aos subvolumes, e não aos usuários. Você pode aplicar as cotas de espaço em disco a usuários e grupos (por exemplo, com o comando quota), além de usar as cotas do Btrfs.

Se o Snapper foi habilitado durante a instalação, o suporte a cotas é automaticamente habilitado. Se você habilitar manualmente o Snapper em algum momento futuro, poderá habilitar o suporte a cotas executando snapper setup-quota. Isso exige uma configuração válida (consulte a Seção 10.5, “Criando e modificando as configurações do Snapper” para obter mais informações).

O suporte a cotas é controlado pelos seguintes parâmetros de uma configuração do Snapper.

QGROUP

O grupo de cotas Btrfs usado pelo Snapper. Se não foi definido, execute snapper setup-quota. Se já foi definido, apenas mude se você estiver familiarizado com man 8 btrfs-qgroup. Esse valor é definido com snapper setup-quota e não deve ser mudado.

SPACE_LIMIT

Limite de espaço que os instantâneos podem ocupar em frações de 1 (100%). Os valores válidos são de 0 a 1 (0,1 = 10%, 0,2 = 20%, etc.).

As seguintes diretrizes e limitações são aplicadas:

  • As cotas apenas são ativadas adicionalmente a um algoritmo de limpeza de número e/ou linha do tempo existente. Se nenhum algoritmo de limpeza estiver ativo, as restrições de cotas não serão aplicadas.

  • Com o suporte a cotas habilitado, o Snapper executa duas limpezas, se necessário. A primeira execução aplica-se às regras especificadas para os instantâneos de número e linha do tempo. Apenas se a cota for excedida após essa execução, as regras específicas da cota serão aplicadas em uma segunda execução.

  • Mesmo se o suporte a cotas estiver habilitado, o Snapper sempre manterá o número de instantâneos especificado com os valores NUMBER_LIMIT* e TIMELINE_LIMIT*, até quando a cota for excedida. Portanto, é recomendável especificar valores de faixa (MIN-MAX) para NUMBER_LIMIT* e TIMELINE_LIMIT* para garantir que a cota seja aplicada.

    Por exemplo, se for definido NUMBER_LIMIT=5-20, o Snapper executará uma primeira limpeza e reduzirá o número de instantâneos numerados regulares para 20. Se esses 20 instantâneos excederem a cota, o Snapper apagará os mais antigos em uma segunda execução até que a cota seja atendida. Um mínimo de cinco instantâneos é sempre mantido, independentemente da quantidade de espaço que ocupam.

10.8 Mostrando o espaço em disco exclusivo usado pelos instantâneos

Os instantâneos compartilham dados para uso eficiente do espaço de armazenamento, portanto, o uso de comandos comuns como du e df não medirá o espaço em disco usado com precisão. Para liberar espaço em disco no Btrfs com as cotas habilitadas, você precisa saber quanto espaço em disco exclusivo é usado por cada instantâneo, em vez do espaço compartilhado. A partir do Snapper 0.6, o espaço em disco usado é relatado para cada instantâneo na coluna Used Space:

# snapper--iso list
  # | Type   | Pre # | Date                | User | Used Space | Cleanup | Description           | Userdata     
----+--------+-------+---------------------+------+------------+---------+-----------------------+--------------
 0  | single |       |                     | root |            |         | current               |              
 1* | single |       | 2019-07-22 13:08:38 | root |  16.00 KiB |         | first root filesystem |              
 2  | single |       | 2019-07-22 14:21:05 | root |  14.23 MiB | number  | after installation    | important=yes
 3  | pre    |       | 2019-07-22 14:26:03 | root | 144.00 KiB | number  | zypp(zypper)          | important=no 
 4  | post   |     3 | 2019-07-22 14:26:04 | root | 112.00 KiB | number  |                       | important=no 
 5  | pre    |       | 2019-07-23 08:19:36 | root | 128.00 KiB | number  | zypp(zypper)          | important=no 
 6  | post   |     5 | 2019-07-23 08:19:43 | root |  80.00 KiB | number  |                       | important=no 
 7  | pre    |       | 2019-07-23 08:20:50 | root | 256.00 KiB | number  | yast sw_single        |              
 8  | pre    |       | 2019-07-23 08:23:22 | root | 112.00 KiB | number  | zypp(ruby.ruby2.5)    | important=no 
 9  | post   |     8 | 2019-07-23 08:23:35 | root |  64.00 KiB | number  |                       | important=no 
10  | post   |     7 | 2019-07-23 08:24:05 | root |  16.00 KiB | number  |                       |

O comando btrfs apresenta outra exibição do espaço usado pelos instantâneos:

# btrfs qgroup show -p /
qgroupid         rfer         excl parent  
--------         ----         ---- ------  
0/5          16.00KiB     16.00KiB ---     
[...]    
0/272         3.09GiB     14.23MiB 1/0     
0/273         3.11GiB    144.00KiB 1/0     
0/274         3.11GiB    112.00KiB 1/0     
0/275         3.11GiB    128.00KiB 1/0     
0/276         3.11GiB     80.00KiB 1/0     
0/277         3.11GiB    256.00KiB 1/0     
0/278         3.11GiB    112.00KiB 1/0     
0/279         3.12GiB     64.00KiB 1/0     
0/280         3.12GiB     16.00KiB 1/0     
1/0           3.33GiB    222.95MiB ---

A coluna qgroupid exibe o número de identificação de cada subvolume, atribuindo uma combinação de nível/ID do qgroup.

A coluna rfer exibe o volume total de dados mencionados no subvolume.

A coluna excl exibe os dados exclusivos em cada subvolume.

A coluna parent mostra o qgroup pai dos subvolumes.

O item final 1/0 mostra os totais para o qgroup pai. No exemplo acima, 222,95 MiB serão liberados se todos os subvolumes forem removidos. Execute o comando a seguir para ver os instantâneos que estão associados a cada subvolume:

# btrfs subvolume list -st /
ID	gen	top level	path	
--	---	---------	----	
267	298	266		@/.snapshots/1/snapshot
272	159	266		@/.snapshots/2/snapshot
273	170	266		@/.snapshots/3/snapshot
274	171	266		@/.snapshots/4/snapshot
275	287	266		@/.snapshots/5/snapshot
276	288	266		@/.snapshots/6/snapshot
277	292	266		@/.snapshots/7/snapshot
278	296	266		@/.snapshots/8/snapshot
279	297	266		@/.snapshots/9/snapshot
280	298	266		@/.snapshots/10/snapshot

Um upgrade de um pacote de serviço para outro resulta em instantâneos que ocupam muito espaço em disco nos subvolumes do sistema. É recomendada a exclusão manual dos instantâneos quando eles não são mais necessários. Consulte a Seção 10.6.4, “Apagando instantâneos” para obter os detalhes.

10.9 Perguntas freqüentes

P: Por que o Snapper nunca mostra as mudanças em /var/log, /tmp e outros diretórios?

Para determinados diretórios, decidimos excluí-los dos instantâneos. Consulte a Seção 10.1.3, “Diretórios que são excluídos dos instantâneos” para ver a lista e os motivos. Para excluir um caminho dos instantâneos, nós criamos um subvolume para esse caminho.

P: Posso inicializar um instantâneo do carregador de boot?

Sim, veja os detalhes na Seção 10.3, “Rollback do sistema por inicialização de instantâneos”.

P: Um instantâneo pode ser protegido contra exclusão?

Atualmente, o Snapper não oferece meios para evitar que um instantâneo seja apagado manualmente. No entanto, você pode impedir que os instantâneos sejam automaticamente apagados por algoritmos de limpeza. Os instantâneos criados manualmente (consulte a Seção 10.6.2, “Criando instantâneos”) não têm algoritmo de limpeza atribuído, a menos que você especifique um com --cleanup-algorithm. Os instantâneos criados automaticamente sempre têm o algoritmo number ou timeline atribuído. Para remover esse tipo de atribuição de um ou mais instantâneos, faça o seguinte:

  1. Liste todos os instantâneos disponíveis:

    > sudo snapper list -a
  2. Memorize o número dos instantâneos que você não deseja que sejam apagados.

  3. Execute o seguinte comando e substitua os marcadores de número pelos números que você memorizou:

    > sudo snapper modify --cleanup-algorithm "" #1 #2 #n
  4. Verifique o resultado executando snapper list -a novamente. Agora, a entrada na coluna Cleanup deve estar vazia para os instantâneos que você modificou.

P: Onde encontro mais informações sobre o Snapper?

Consulte a home page do Snapper em http://snapper.io/.