Capítulo 4. Instantâneos/Rollback com o Snapper

Sumário

4.1. Requisitos
4.2. Usando o Snapper para desfazer mudanças no sistema
4.3. Criando e gerenciando instantâneos manualmente
4.4. Limitações
4.5. Perguntas mais frequentes
4.6. Usando o Snapper em volumes LVM com aprovisionamento dinâmico

Resumo

Criar instantâneos do sistema de arquivos com a funcionalidade de fazer rollbacks no Linux era um recurso bastante solicitado no passado. O Snapper, em conjunto com o sistema de arquivos Btrfs ou os volumes LVM com aprovisionamento dinâmico, agora cumpre esse papel.

O Btrfs, um novo sistema de arquivos de gravação de cópia do Linux, suporta instantâneos de sistema de arquivos (uma cópia do estado de um subvolume em determinado ponto no tempo) de subvolumes (um ou mais sistemas de arquivos que podem ser montados separadamente em cada partição física). O Snapper permite gerenciar esses instantâneos. O Snapper vem com uma linha de comando e uma interface do YaST.

Por padrão, o Snapper e o Btrfs no SUSE Linux Enterprise Desktop são configurados para atuar como uma ferramenta de desfazer mudanças no sistema realizadas com o YaST e o zypper. Antes e após a execução de um módulo do YaST ou do zypper, um instantâneo é criado. O Snapper permite comparar os dois instantâneos e dispõe de meios para reverter as diferenças entre ambos. As ferramentas também oferecem backups do sistema criando instantâneos a cada hora dos subvolumes do sistema.

4.1. Requisitos

Como o Btrfs é o único sistema de arquivos no SUSE Linux Enterprise Desktop que suporta instantâneos, ele é necessário em todas as partições ou subvolumes dos quais você deseja criar instantâneos.

4.1.1. Instantâneos e espaço em disco

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!

[Note]Local do instantâneo

Os instantâneos residem sempre na mesma partição ou subvolume do qual foi criado o instantâneo. Não é possível armazenar os instantâneos em uma partição ou um subvolume diferente.

Como resultado, as partições com os instantâneos precisam ser maiores que as partições normais. A quantidade exata depende bastante do número de instantâneos mantidos e da quantidade de modificações de dados. De acordo com a prática, convém usar o dobro do tamanho que seria usado normalmente.

[Tip]Liberando espaço/utilização do disco

Para liberar espaço em uma partição do Btrfs com instantâneos, é preciso apagar instantâneos desnecessários, e não arquivos. Os instantâneos antigos ocupam mais espaço do que os novos.

Como o df não mostra a utilização do disco correta nos sistemas de arquivos Btrfs, você precisa usar o comando btrfs filesystem df PONTO_DE_MONTAGEM. A exibição da quantidade de espaço em disco alocada por um instantâneo não é suportada pelas ferramentas do Btrfs.

O upgrade de um service pack para outro resulta em instantâneos que ocupam muito espaço em disco nos subvolumes do sistema, porque muitos dados são modificados (atualizações de pacotes). É recomendada a exclusão manual desses instantâneos quando eles não são mais necessários.

O Snapper também pode ser usado para criar e gerenciar instantâneos em volumes LVM com aprovisionamento dinâmico formatados com ext3 ou XFS (consulte a Seção 4.6, “Usando o Snapper em volumes LVM com aprovisionamento dinâmico”).

4.2. Usando o Snapper para desfazer mudanças no sistema

O Snapper no SUSE Linux Enterprise Desktop vem pré-configurado para atuar como uma ferramenta que permite desfazer mudanças realizadas pelo zypper e pelo YaST. Para essa finalidade, o Snapper foi configurado para criar um par de instantâneos antes e após cada execução do zypper e do YaST. O Snapper permite também restaurar arquivos do sistema que foram acidentalmente apagados ou modificados. Backups são criados de hora em hora para essa finalidade.

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.

4.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 rollbacks das mudanças do YaST ou do zypper) será instalado automaticamente. Toda vez que você iniciar um módulo do YaST ou uma transação do zypper, serão criados dois instantâneos: um pré-instantâneo para captura do 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 modificações realizadas 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).

Como o Linux é um sistema multitarefa, processos diferentes do YaST ou do zypper podem modificar os dados no período entre o pré e o pós-instantâneo. Se esse for o caso, a reversão completa para o pré-instantâneo vai desfazer também as mudanças realizadas por outros processos. Na maioria dos casos, isso seria indesejado; no entanto, é altamente recomendável para revisar detalhadamente as mudanças entre os dois instantâneos antes de iniciar o rollback. Se houver mudanças de outros processos para manter, selecione os arquivos para voltar.

[Important]Limitações

Você deve conhecer as limitações do Snapper antes de tentar usar seu mecanismo de rollback. Consulte a Seção 4.4, “Limitações” para obter os detalhes.

[Note]Tempo de armazenamento de instantâneos

Por padrão, os últimos 100 instantâneos do YaST e do zypper são mantidos. Se esse número for excedido, o(s) instantâneo(s) mais antigo(s) será(ão) apagado(s).

Procedimento 4.1. Desfazendo mudanças usando o módulo Snapper do YaST

  1. Inicie o módulo Snapper da seção Diversos no YaST ou digitando o comando 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 yast nome_do_módulo na coluna Descrição; os instantâneos do zypper são denominados zypp (zypper).

  4. Clique em Mostrar Mudanças para abrir a lista de arquivos que são diferentes entre os dois instantâneos. A imagem a seguir mostra uma lista dos arquivos que foram modificados após adicionarem o testador do usuário.

  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. As imagens a seguir mostram as mudanças em /etc/passwd após a adição do testador do usuário.

  6. Para restaurar um conjunto de 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.

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

Procedimento 4.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 nome_do_módulo na coluna Descrição; os instantâneos do zypper são denominados zypp (zypper).

    
    ~ # snapper list -t pre-post
         Pre # | Post # | Pre Date                 | Post Date                | Description
         ------+--------+--------------------------+--------------------------+----------------------+
         4     | 5      | Tue Jan 10 14:39:14 2012 | Tue Jan 10 14:39:33 2012 | yast system_settings
         65    | 66     | Thu Jan 12 17:18:10 2012 | Thu Jan 12 17:18:23 2012 | zypp(zypper)
         68    | 69     | Thu Jan 12 17:25:46 2012 | Thu Jan 12 17:27:09 2012 | zypp(zypper)
         73    | 74     | Thu Jan 12 17:32:55 2012 | Thu Jan 12 17:33:13 2012 | yast system_settings
         75    | 76     | Thu Jan 12 17:33:56 2012 | Thu Jan 12 17:34:42 2012 | yast users
         77    | 92     | Thu Jan 12 17:38:36 2012 | Thu Jan 12 23:13:13 2012 | yast snapper
         83    | 84     | Thu Jan 12 22:10:33 2012 | Thu Jan 12 22:10:39 2012 | zypp(zypper)
         85    | 86     | Thu Jan 12 22:16:58 2012 | Thu Jan 12 22:17:09 2012 | zypp(zypper)
         88    | 89     | Thu Jan 12 23:10:42 2012 | Thu Jan 12 23:10:46 2012 | zypp(zypper)
         90    | 91     | Thu Jan 12 23:11:40 2012 | Thu Jan 12 23:11:42 2012 | zypp(zypper)
         108   | 109    | Fri Jan 13 13:01:06 2012 | Fri Jan 13 13:01:10 2012 | zypp(zypper)
         
  2. Obtenha uma lista dos arquivos modificados de um par de instantâneos com snapper status PRÉ..PÓS. 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 -. O exemplo a seguir mostra o par de instantâneos da instalação do pacote ncftp.

    ~ # snapper status 108..109
         +... /usr/bin/ncftp
         +... /usr/bin/ncftpbatch
         +... /usr/bin/ncftpget
         +... /usr/bin/ncftpls
         [...]
         +... /usr/share/man/man1/ncftpspooler.1.gz
         c... /var/cache/zypp/solv/@System/cookie
         c... /var/cache/zypp/solv/@System/solv
         c... /var/lib/rpm/Basenames
         c... /var/lib/rpm/Dirnames
         c... /var/lib/rpm/Filemd5s
         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/Provideversion
         c... /var/lib/rpm/Requirename
         c... /var/lib/rpm/Requireversion
         c... /var/lib/rpm/Sha1header
         c... /var/lib/rpm/Sigmd5
         c... /var/lib/zypp/SoftLocks
  3. Para exibir a diff de determinado arquivo, execute snapper diff PRÉ..PÓS NOMEDOARQUIVO. Se você não especificar NOMEDOARQUIVO, será exibida a diff de todos os arquivos.

    ~ # snapper diff 108..109 /var/lib/zypp/SoftLocks
         --- /.snapshots/108/snapshot/var/lib/zypp/SoftLocks	2012-01-12 23:15:22.408009164 +0100
         +++ /.snapshots/109/snapshot/var/lib/zypp/SoftLocks	2012-01-13 13:01:08.724009131 +0100
         @@ -1,4 +1,2 @@
         -# zypp::SoftLocksFile generated Thu Jan 12 23:10:46 2012
         -#
         -ncftp
         -#
         +# zypp::SoftLocksFile generated Fri Jan 13 13:01:08 2012
         +##
  4. Para restaurar um ou mais arquivos, execute snapper -v undochange PRÉ..PÓS NOMESDOSARQUIVOS. Se você não especificar os NOMESDOSARQUIVOS, todos os arquivos serão restaurados.

    ~ # snapper -v undochange 108..109
         create:0 modify:16 delete:21
         undoing change...
         deleting /usr/share/man/man1/ncftpspooler.1.gz
         deleting /usr/share/man/man1/ncftpput.1.gz
         [...]
         deleting /usr/bin/ncftpls
         deleting /usr/bin/ncftpget
         deleting /usr/bin/ncftpbatch
         deleting /usr/bin/ncftp
         modifying /var/cache/zypp/solv/@System/cookie
         modifying /var/cache/zypp/solv/@System/solv
         modifying /var/lib/rpm/Basenames
         modifying /var/lib/rpm/Dirnames
         modifying /var/lib/rpm/Filemd5s
         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/Provideversion
         modifying /var/lib/rpm/Requirename
         modifying /var/lib/rpm/Requireversion
         modifying /var/lib/rpm/Sha1header
         modifying /var/lib/rpm/Sigmd5
         modifying /var/lib/zypp/SoftLocks
         undoing change done

4.2.2. Usando o Snapper para restaurar arquivos dos backups por hora

Além dos instantâneos do YaST e do zypper, o Snapper cria instantâneos a cada hora da partição do sistema (/). É possível usar os instantâneos do backup para restaurar arquivos apagados ou modificados por engano sem meios de recuperação. Usando o recurso diff do Snapper, é possível também descobrir quais modificações foram feitas em determinado momento.

Os instantâneos do backup por hora são do tipo Single e estão marcados com a descrição timeline. Para restaurar os arquivos desses instantâneos conforme descrito em Procedimento 4.1, “Desfazendo mudanças usando o módulo Snapper do YaST” ou Procedimento 4.2, “Desfazendo mudanças usando o comando snapper.

[Note]Tempo de armazenamento de instantâneos

Por padrão, o primeiro instantâneo dos últimos dez dias, meses e anos são mantidos. Para saber os detalhes, consulte Exemplo 4.1, “Exemplo de configuração de linha do tempo”.

4.2.3. Criando e modificando as configurações do Snapper

O comportamento do Snapper é definido em um arquivo de configuração específico de cada partição ou subvolume Btrfs. Esses arquivos de configuração residem em /etc/snapper/configs/. A configuração padrão instalada com o Snapper do diretório / é chamada root. Ela cria e gerencia os instantâneos do YaST e do zypper e também o instantâneo do backup por hora do /.

É 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.

É 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 sua Configuração Atual ao especificar sua configuração para o snapper com o switch global -c (ex. snapper -c myconfig list).

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

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

1

Nome do arquivo de configuração.

2

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

Esse comando cria um novo arquivo de configuração /etc/snapper/config-templates/www-data com valores padrão razoáveis (obtidos de /etc/snapper/config-templates/default).

[Tip]Padrões de configuração

Os valores padrão de 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:

snapper -c www-data create-config -t my_defaults /srv/www

4.2.3.1. Ajustando o arquivo de configuração

Para ajustar o arquivo de configuração, modifique-o com um editor. Ele inclui os pares de chave/valor no formato de chave=valor. Só é possível mudar o valor.

SUBVOLUME

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

FSTYPE

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

NUMBER_CLEANUP

Define se é para apagar automaticamente os instantâneos antigos quando a quantidade total exceder o número especificado com NUMBER_LIMIT e a duração especificada com NUMBER_MIN_AGE. Valores válidos: yes, no

[Note]Limite e duração

NUMBER_LIMIT e NUMBER_MIN_AGE são sempre avaliados juntos. Os instantâneos são apagados apenas quando ocorrem as duas condições. Para sempre manter determinado número de instantâneos independentemente de sua duração, defina NUMBER_MIN_AGE como 0. Por outro lado, para não manter os instantâneos após certa duração, defina NUMBER_LIMIT como 0.

NUMBER_LIMIT

Define quantos instantâneos manter quando NUMBER_CLEANUP está definido como yes.

NUMBER_MIN_AGE

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

TIMELINE_CREATE

Se definido como yes, serão criados instantâneos de hora em hora. Essa é a única forma de criar automaticamente os instantâneos, embora seja altamente recomendável defini-lo como yes. Valores válidos: yes, no

TIMELINE_CLEANUP

Define se é para apagar automaticamente os instantâneos antigos quando a quantidade exceder o número especificado com as opções TIMELINE_LIMIT_* e a duração especificada com TIMELINE_MIN_AGE. Valores válidos: yes, no

TIMELINE_MIN_AGE

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

TIMELINE_LIMIT_HOURLY, TIMELINE_LIMIT_DAILY, TIMELINE_LIMIT_MONTHLY, TIMELINE_LIMIT_YEARLY

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

Exemplo 4.1. Exemplo de configuração de linha do tempo

TIMELINE_CREATE="yes"
        TIMELINE_CLEANUP="yes"
        TIMELINE_MIN_AGE="1800"
        TIMELINE_LIMIT_HOURLY="10"
        TIMELINE_LIMIT_DAILY="10"
        TIMELINE_LIMIT_MONTHLY="10"
        TIMELINE_LIMIT_YEARLY="10"
        

Este exemplo de configuração habilita os instantâneos por hora, que são limpos automaticamente. TIMELINE_MIN_AGE e TIMELINE_LIMIT_* são sempre 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 para manter

  • De hora em hora: Os últimos dez instantâneos que foram criados.

  • Diariamente: O primeiro instantâneo diário criado é mantido para os últimos dez dias.

  • Mensalmente: O primeiro instantâneo criado no último dia do mês é mantido para os últimos dez meses.

  • Anualmente: O primeiro instantâneo criado no último dia do ano é mantido para os últimos dez anos.

4.2.3.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:

  • um administrador de site na Web deseja criar um instantâneo de /srv/www.

  • um administrador de banco de dados deseja criar um instantâneo dos bancos de dados.

  • um usuário deseja criar um instantâneo de seu diretório pessoal.

Para essas finalidades, é possível criar configurações do Snapper que concedam permissões a usuários ou grupos. Além da mudança nessa configuração, os usuários especificados devem conseguir ler e acessar o diretório .snapshots correspondente.

Procedimento 4.3. Habilitando usuários comuns a usar o Snapper

Observe que todas as etapas deste procedimento devem ser executadas pelo root.

  1. Se não houver um, crie uma configuração do Snapper para a partição ou o subvolume em que o usuário consiga utilizar o Snapper. Consulte a Seção 4.2.3, “Criando e modificando as configurações do Snapper” para obter instruções. Exemplo:

    snapper --config web_data create /srv/www
  2. O arquivo de configuração é criado em /etc/snapper/configs/NOME, em que NOME é 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. Consulte a Seção 4.2.3.1, “Ajustando o arquivo de configuração” para obter os detalhes.

  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, digite:

    ALLOW_USERS="www_admin"
  4. Conceda permissões de leitura e acesso ao diretório de instantâneos CAMINHO/.snapshots. CAMINHO deve ser substituído pelo subvolume especificado na primeira etapa deste procedimento. Exemplo:

    chmod a+rx /srv/www/.snapshots

    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

4.2.4. Desabilitando instantâneos automáticos

Se você configurou a partição raiz com Btrfs durante a instalação, o Snapper criará automaticamente instantâneos do sistema por hora, além de pré e pós-instantâneos para transações do YaST e do zypper. Cada uma dessas tarefas pode ser desabilitada da seguinte forma:

Desabilitando instantâneos por hora

Edite /etc/snapper/configs/root e defina TIMELINE_CREATE como no:

TIMELINE_CREATE="no"
Desabilitando instantâneos do zypper

Desinstale o pacote snapper-zypp-plugin

Desabilitando instantâneos do YaST

Edite /etc/sysconfig/yast2 e defina USE_SNAPPER como no:

USE_SNAPPER="no"

4.3. 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 4.2.3, “Criando e modificando as configurações do Snapper” para obter os detalhes). Você só pode criar instantâneo 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 o menu suspenso Configuração Atual no YaST ou especifique a opção -c na linha de comando (snapper -c MINHACONFIG COMANDO).

4.3.1. Metadados de instantâneos

Cada instantâneo consiste no próprio instantâneo e em alguns 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. Os seguintes metadados estão disponíveis para cada instantâneo:

  • Tipo: Tipo do instantâneo, consulte a Seção 4.3.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: A 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_stuff, user=tux

  • Algoritmo de Limpeza: Algoritmo de limpeza do instantâneo. Consulte a Seção 4.3.1.2, “Algoritmos de limpeza” para obter os detalhes.

4.3.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 tem o seu post correspondente. Por exemplo, 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 tem o seu pre correspondente. Por exemplo, usado para instantâneos automáticos do YaST/zypper.

single

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

4.3.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. A frequência de limpeza é definida na configuração do Snapper para a partição ou o subvolume (consulte a Seção 4.2.3.1, “Ajustando o arquivo de configuração” para obter os detalhes).

number

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

time line

Apaga instantâneos antigos que passaram de certa duração, mas mantém um número de instantâneos por hora, dia, mês e ano.

empty-pre-post

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

4.3.2. Criando instantâneos

A criação do instantâneo é feita executando o comando snapper create ou clicando em Criar no módulo Snapper do YaST. Os exemplos a seguir explicam como criar instantâneos da linha de comando. Eles são fáceis de adotar na hora de usar a interface do YaST.

[Tip]Descrição do instantâneo

Especifique sempre uma descrição significativa para no futuro conseguir identificar sua finalidade. É possível especificar ainda mais informações na opção de dados do usuário.

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

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 arquivo é apagado automaticamente quando atende aos critérios especificados no algoritmo de limpeza de linha do tempo da configuração.

snapper create --type pre--print-number--description "Before the Apache config cleanup"

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.

snapper create --type post--pre-number 30--description "After the Apache config cleanup"

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.

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

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

4.3.3. Modificando os metadados do instantâneo

O Snapper permite modificar a descrição, o algoritmo de limpeza e os dados de 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 na hora de 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.

4.3.4. Apagando instantâneos

Para apagar um instantâneo com o módulo Snapper do YaST, escolha o instantâneo 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 NÚMERO.

[Tip]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.

[Tip]Instantâneos antigos ocupam mais espaço em disco

Se você apagar instantâneos para liberar espaço no disco rígido (consulte a Seção 4.1.1, “Instantâneos e espaço em disco” para obter os detalhes), 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 4.3.1.2, “Algoritmos de limpeza” para obter os detalhes.

4.4. Limitações

Apesar de estarem prontos para produção, o Btrfs e o Snapper estão em constante desenvolvimento. As seguintes limitações existem no momento. Há planos de se resolver estes problemas em versões futuras.

4.4.1. Consistência de dados

Não existe um mecanismo que garanta a consistência dos dados na hora de criar um instantâneo. Sempre que um arquivo é gravado (ex. um banco de dados) ao mesmo tempo que um instantâneo é criado, o resultado é um arquivo danificado ou gravado parcialmente. A restauração desse arquivo causa problemas. Portanto, é altamente recomendável sempre revisar com cuidado a lista de arquivos modificados e suas diffs. Apenas restaure arquivos que realmente tenham que fazer parte da ação que deseja voltar.

4.4.2. Revertendo adições de usuário

Normalmente, /home reside em uma partição separada. Essa partição separada não faz parte da configuração padrão de rollbacks do YaST. Portanto, a partição pessoal do usuário não será apagada durante a reversão de uma adição de usuário com o Snapper. É altamente recomendável usar a ferramenta do YaST Gerenciamento de Usuários e Grupos para remover usuários.

4.4.3. Nenhuma mudança no rollback em /boot e no carregador de boot

No momento, o SUSE Linux Enterprise Desktop não pode ser inicializado de partições Btrfs. Portanto, uma partição separada para /boot é criada durante a instalação ao usar o Btrfs para a partição do sistema. Como /boot não suporta instantâneos, as seguintes restrições se aplicam aos rollbacks do YaST/zypper:

sem rollback de qualquer mudança de configuração no carregador de boot

O único arquivo que pode ser voltado é o arquivo de configuração do carregador de boot em /etc. Os arquivos principais de configuração residem em /boot e não podem ser voltados.

sem rollback completo para instalações do Kernel

O Kernel e seu initrd são instalados na partição /boot, enquanto os módulos ou as fontes do Kernel são instalados em /var/lib e /usr/src, respectivamente. Além disso, cada instalação do Kernel também muda os arquivos de configuração do carregador de boot em /boot. Portanto, sempre que fizer um rollback que envolva desfazer uma instalação do Kernel, você precisará remover manualmente o Kernel e seu initrd de /boot e ajustar a configuração do carregador de boot removendo a entrada de boot do Kernel.

4.5. Perguntas mais frequentes

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

Para alguns diretórios, nós decidimos desabilitar a criação de instantâneo; por exemplo, /var/log, já que a reversão de registros dificulta a pesquisa por problemas. Para excluir um caminho de criação de instantâneo, nós criamos um subvolume para esse caminho. Os pontos de montagem a seguir são excluídos da criação de instantâneo no SUSE Linux Enterprise Desktop:

  • /opt

  • /srv

  • /tmp

  • /var/crash

  • /var/log

  • /var/run

  • /var/spool

  • /var/tmp

Posso inicializar um instantâneo do carregador de boot?

Isso não é possível no momento. O carregador de boot no SUSE Linux Enterprise Desktop não suporta inicialização da partição Btrfs.

4.6. Usando o Snapper em volumes LVM com aprovisionamento dinâmico

Além dos instantâneos em sistemas de arquivos Btrfs, o snapper também suporta a criação de instantâneo em volumes LVM com aprovisionamento dinâmico (instantâneos em volumes LVM comuns não são suportados) formatados com ext3 ou XFS. Para obter mais informações e instruções de configuração, consulte a Seção “LVM Configuration” (Capítulo 12, Advanced Disk Setup, ↑Guia de Implantação).

Para usar o Snapper em um volume LVM com aprovisionamento dinâmico, crie para ele uma configuração do Snapper. No LVM, é necessário especificar o sistema de arquivos com --fstype=lvm(SISTEMADEARQUIVOS). Os dados ext3 e XFS são suportados, portanto ext3 ou xfs são valores válidos para SISTEMADEARQUIVOS. Exemplo:

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 4.2.3.1, “Ajustando o arquivo de configuração”. Agora, é possível usar o Snapper para criar e gerenciar instantâneos, restaurar arquivos e desfazer mudanças, conforme descrito anteriormente.


SUSE Linux Enterprise Desktop Guia de Administração 11 SP3