systemdjournalctl: consultar o diário do systemdudev
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). Os instantâneos também são suportados em volumes LVM com aprovisionamento dinâmico formatados com XFS, Ext4 ou Ext3. O Snapper permite criar e gerenciar esses instantâneos. Ele vem com uma linha de comando e uma interface do YaST. Desde o SUSE Linux Enterprise Server 12, também é possível inicializar de instantâneos Btrfs. Consulte a Seção 4.3, “Rollback do sistema por inicialização de instantâneos” para obter mais informações.
Usando o Snapper, é possível executar as seguintes tarefas:
Desfazer mudanças no sistema feitas pelo zypper e pelo YaST. Consulte a Seção 4.2, “Usando o Snapper para desfazer mudanças” para obter os detalhes.
Restaurar arquivos de instantâneos anteriores. Consulte a Seção 4.2.2, “Usando o Snapper para restaurar arquivos” para obter os detalhes.
Fazer rollback do sistema inicializando de um instantâneo. Consulte a Seção 4.3, “Rollback do sistema por inicialização de instantâneos” para obter os detalhes.
Criar manualmente instantâneos de forma simultânea e gerenciar instantâneos existentes. Consulte a Seção 4.5, “Criando e gerenciando instantâneos manualmente” para obter os detalhes.
O Snapper no SUSE Linux Enterprise Desktop foi configurado para atuar como uma “ferramenta para desfazer e recuperar” mudanças no sistema. Por padrão, a partição raiz (/) do SUSE Linux Enterprise Desktop está formatada com Btrfs. A captura de instantâneos será automaticamente habilitada se a partição raiz (/) for grande o suficiente (aproximadamente mais de 8 GB). A criação de instantâneos em partições diferentes de / não está habilitada por padrão.
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!
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 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.
Embora os próprios instantâneos não se diferenciem no sentido técnico, nós os distinguimos em três tipos, com base na ocasião em foram criados:
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. Os instantâneos de linha do tempo estão habilitados por padrão, exceto para a partição raiz.
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.
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.
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/x86_64-efi,
O rollback da configuração do carregador de boot não é suportado.
/home
Se /home não residir em uma partição separada, ele será excluído para evitar perda de dados nos rollbacks.
/opt, /var/opt
Geralmente, produtos de terceiros e complementos 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, /var/tmp, /var/crash
Todos os diretórios com arquivos temporários são excluídos dos instantâneos.
/var/lib/named
Contém dados da zona do servidor DNS. Excluído dos instantâneos para garantir que o servidor de nomes funcione após um rollback.
/var/lib/mailman, /var/spool
Diretórios com e-mails ou filas de e-mails são excluídos para evitar perda de e-mails após um rollback.
/var/lib/pgqsl
Contém dados do PostgreSQL.
/var/log
Localização do Arquivo de Registro. Excluído dos instantâneos para permitir a análise do arquivo de registro após o rollback de um sistema com defeito.
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.
Cada um dos três tipos de instantâneos (linha do tempo, instalação, administração) pode ser habilitado ou desabilitado de forma independente.
Habilitar.
snapper
-c root set-config "TIMELINE_CREATE=yes"
Desabilitar.
snapper
-c root set-config "TIMELINE_CREATE=no"
Os instantâneos de linha do tempo estão habilitados por padrão, exceto para a partição raiz.
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.
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.
A criação de pares de instantâneos ao instalar pacotes com o YaST ou o Zypper é administrada pelo snapper-zypp-plugin. O 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>
O atributo de correspondência define se o padrão é um curinga no estilo shell do Unix ( | |
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. | |
Padrão de correspondência com o nome de um pacote. Com base na configuração do atributo | |
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>
Instantâneos ocupam espaço no disco. Para evitar que os discos fiquem sem espaço e, por essa razão, provoquem interrupções de sistema, os instantâneos antigos são apagados automaticamente. Por padrão, os seguintes instantâneos são mantidos:
o primeiro instantâneo dos últimos dez dias, meses e anos
os últimos dez pares de instantâneos de instalação marcados como importantes
os últimos dez instantâneos de instalação/administração
Consulte a Seção 4.4.1, “Gerenciando configurações existentes” para ver instruções sobre como mudar os valores.
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 a Section “LVM Configuration”, Chapter 12, Advanced Disk Setup, Deployment Guide.
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). ext3, etx4 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.4.1, “Gerenciando configurações existentes”.
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 4.1.1.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.
Ao trabalhar com instantâneos para restaurar dados, é importante saber que há dois cenários fundamentalmente distintos nos quais o Snapper pode atuar:
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.
Ao fazer rollbacks conforme descrito na Seção 4.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 4.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.
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 com defeito ou parcialmente gravado. A restauração desse arquivo causa problemas. Além disso, alguns 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.
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. 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).
Inicie o módulo pela seção no YaST ou digitando yast2 snapper.
Confirme se a está definida como . Esse é sempre o caso, a não ser que você tenha adicionado manualmente configurações personalizadas do Snapper.
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 . Os instantâneos do YaST são denominados zypp(y2base) na ; os instantâneos do Zypper são denominados zypp(zypper).
Clique em para abrir a lista de arquivos que são diferentes entre os dois instantâneos.
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.
Para restaurar um ou mais arquivos, selecione os arquivos ou diretórios relevantes marcando a respectiva caixa de seleção. Clique em e clique em para confirmar a ação.
Para restaurar um único arquivo, ative sua tela de comparação clicando em seu nome. Clique em e clique em para confirmar sua seleção.
snapper #
Obtenha uma lista dos instantâneos do YaST e do Zypper executando o comando snapper list . Os instantâneos do YaST são denominados -t pre-postyast nome_do_módulo na ; os instantâneos do Zypper são denominados zypp(zypper).
root # snapper list -t pre-post
Pre # | Post # | Pre Date | Post Date | Description
------+--------+-------------------------------+-------------------------------+--------------
311 | 312 | Tue 06 May 2014 14:05:46 CEST | Tue 06 May 2014 14:05:52 CEST | zypp(y2base)
340 | 341 | Wed 07 May 2014 16:15:10 CEST | Wed 07 May 2014 16:15:16 CEST | zypp(zypper)
342 | 343 | Wed 07 May 2014 16:20:38 CEST | Wed 07 May 2014 16:20:42 CEST | zypp(y2base)
344 | 345 | Wed 07 May 2014 16:21:23 CEST | Wed 07 May 2014 16:21:24 CEST | zypp(zypper)
346 | 347 | Wed 07 May 2014 16:41:06 CEST | Wed 07 May 2014 16:41:10 CEST | zypp(y2base)
348 | 349 | Wed 07 May 2014 16:44:50 CEST | Wed 07 May 2014 16:44:53 CEST | zypp(y2base)
350 | 351 | Wed 07 May 2014 16:46:27 CEST | Wed 07 May 2014 16:46:38 CEST | zypp(y2base)
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 , os arquivos que foram adicionados são marcados com e os arquivos apagados são marcados com .
root # 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
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.
root # 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
[...]
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.
root # 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 doneNã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 do YaST para remover usuários.
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 determinado momento.
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 para criar instantâneos de linha do tempo automáticos. Consulte a Seção 4.4, “Criando e modificando as configurações do Snapper” para obter instruções.
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 4.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!
Inicie o módulo pela seção no YaST ou digitando yast2 snapper.
Selecione a da qual escolher o instantâneo.
Selecione o instantâneo de linha do tempo do qual restaurar o arquivo e escolha . Os instantâneos de linha do tempo são do tipo , com um valor descritivo de .
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.
Clique em e clique em para confirmar a ação.
snapper #Obtenha a lista de instantâneos de linha do tempo para determinada configuração executando o seguinte comando:
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.
Obtenha a lista de arquivos modificados de determinado instantâneo executando o seguinte comando:
snapper -c CONFIG status SNAPSHOT_ID>..0
Substitua ID_DO_INSTANTÂNEO pelo ID do instantâneo do qual deseja restaurar o(s) arquivo(s).
Se preferir, liste as diferenças entre a versão do arquivo atual e a versão do instantâneo executando
snapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME
Se você não especificar <NOME DE ARQUIVO>, será mostrada a diferença de todos os arquivos.
Para restaurar um ou mais arquivos, execute
snapper -c CONFIG -v undochange
SNAPSHOT_ID..0 FILENAME1 FILENAME2Se você não especificar nomes de arquivos, todos os arquivos mudados serão restaurados.
A versão GRUB 2 incluída no SUSE Linux Enterprise Desktop é capaz de inicializar de instantâneos Btrfs. Juntamente com o recurso de rollback do Snapper, ela permite recuperar um sistema mal configurado. Todos os instantâneos criados pelo Snapper estão disponíveis para inicialização e podem ser selecionados no menu de boot.
Apenas os instantâneos do sistema de arquivos raiz (definido na configuração raiz do Snapper) são inicializáveis.
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.
Ao trabalhar com instantâneos para restaurar dados, é importante saber que há dois cenários fundamentalmente distintos nos quais o Snapper pode atuar:
Ao desfazer mudanças conforme descrito na Seção 4.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.
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.
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 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:
Inicialize o sistema. No menu de boot, escolha (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.
Efetue login no sistema. Verifique com atenção se tudo funciona conforme esperado. Observe que você não poderá 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.
Dependendo se você deseja ou não fazer rollback, escolha a próxima etapa:
Se o sistema estiver em um estado no qual você não deseja fazer rollback, reinicialize para inicializar no estado atual do sistema, escolher um instantâneo diferente ou iniciar o sistema de recuperação.
Para fazer o rollback, execute
sudo snapper rollback
e reinicialize na sequência. Na tela de boot, escolha a entrada de boot padrão para reinicializar no sistema restaurado.
O rollback do sistema completo, restauração do sistema completo exatamente para o mesmo estado em que estava quando o instantâneo foi criado, não é possível.
Os instantâneos do sistema de arquivos raiz não contêm todos os diretórios. Consulte 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.
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.
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.
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 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.
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.
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.
O modo como o Snapper se comporta é definido em um arquivo de configuração específico a cada partição ou subvolume Btrfs. Estes arquivos de configuração residem em /etc/snapper/configs/. A configuração padrão instalada com o Snapper para o diretório / é denominada root. Ela cria e gerencia os instantâneos do YaST e do Zypper, além do instantâneo de 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.
Após a criação de uma configuração, é possível usar o próprio snapper ou o módulo do YaST para restaurar arquivos desses instantâneos. No YaST, você precisa selecionar a 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:
snapper -c www-data1 create-config /srv/www2
Nome do arquivo de configuração. | |
Ponto de montagem da partição ou subvolume |
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 4.4.1, “Gerenciando configurações existentes” para obter instruções de como ajustar os padrões.
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:
snapper -c www-data create-config -t my_defaults /srv/www
O snapper oferece vários subcomandos para gerenciar configurações existentes. É possível listar, mostrar, apagar e modificá-las:
Use o comando snapper list-configs para obter todas as configurações existentes:
root # snapper list-configs
Config | Subvolume
-------+----------
root | /
usr | /usr
local | /local
Use o subcomando snapper para apagar uma configuração. Config deve ser substituído pelo nome da configuração mostrado pelo -c CONFIG delete-configsnapper list-configs.
Use o subcomando snapper para exibir a configuração especificada. Config deve ser substituído pelo nome da configuração mostrado pelo -c CONFIG get-configsnapper list-configs. Consulte a Seção 4.4.1.1, “Dados de configuração” para obter mais informações sobre opções de configuração.
Use o subcomando snapper para modificar uma opção na configuração especificada. Config deve ser substituído pelo nome da configuração mostrado pelo -c CONFIG set-config OPÇÃO=VALORsnapper list-configs. Os valores possíveis para OPÇÃO e VALOR estão listados na Seção 4.4.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:
ALLOW_GROUPS, ALLOW_USERS
Conceder permissões para usar instantâneos a usuários regulares. Consulte a Seção 4.4.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" (sim).
Se definido como yes (sim), os pares de instantâneos pré e pós que forem iguais serão apagados.
O valor padrão é "no" (não).
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".
FSTYPE
Tipo de sistema de arquivos da partição. Não alterar.
O valor padrão é "btrfs".
NUMBER_CLEANUP
Define se é para apagar automaticamente os pares de instantâneos de instalação e administração antigos quando o total de instantâneos exceder o número especificado com NUMBER_LIMIT e a duração especificada com NUMBER_MIN_AGE. Valores válidos: yes, no
O valor padrão é "no".
NUMBER_LIMIT, NUMBER_LIMIT_IMPORTANT e NUMBER_MIN_AGE são sempre avaliados. Os instantâneos são apagados apenas quando ocorrem todas as 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 e NUMBER_LIMIT_IMPORTANT como 0.
NUMBER_LIMIT
Define quantos pares de instantâneos de instalação e administração não marcados como importantes manter se NUMBER_CLEANUP estiver definido como yes. Apenas os instantâneos mais recentes são mantidos.
O valor padrão é "50".
NUMBER_LIMIT_IMPORTANT
Define quantos pares de instantâneos marcados como importantes manter se NUMBER_CLEANUP estiver definido como yes. Apenas os instantâneos mais recentes são mantidos.
O valor padrão é "10".
NUMBER_MIN_AGE
Define a duração mínima, em segundos, do par de instantâneos antes de ser automaticamente apagado.
O valor padrão é "1800".
SUBVOLUME
Ponto de montagem da partição ou do subvolume para o instantâneo. Não alterar.
SYNC_ACL
Se o Snapper for utilizado por usuários regulares (consulte a Seção 4.4.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_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
O valor padrão é "no".
TIMELINE_CREATE
Se definido como yes, serão criados instantâneos por hora. No momento, esta é a única forma de criar instantâneos automaticamente, portanto, é altamente recomendável defini-lo como yes. Valores válidos: yes, no
O valor padrão é "no".
TIMELINE_LIMIT_DAILY, TIMELINE_LIMIT_HOURLY, TIMELINE_LIMIT_MONTHLY, TIMELINE_LIMIT_YEARLY
Número de instantâneos para manter por hora, dia, mês, ano.
O valor padrão de cada entrada é "10".
TIMELINE_CLEANUP="yes" TIMELINE_CREATE="yes" TIMELINE_LIMIT_DAILY="10" TIMELINE_LIMIT_HOURLY="10" TIMELINE_LIMIT_MONTHLY="10" TIMELINE_LIMIT_YEARLY="10" 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_* 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.
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.
TIMELINE_MIN_AGE
Define a duração mínima em segundos do instantâneo antes de ser automaticamente apagado.
O valor padrão é "1800".
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 criar 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. 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.
Observe que todas as etapas deste procedimento devem ser executadas pelo root.
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.4, “Criando e modificando as configurações do Snapper” para obter instruções. Exemplo:
snapper --config web_data create /srv/www
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. Consulte a Seção 4.4.1, “Gerenciando configurações existentes” para obter os detalhes.
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:
snapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"
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
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.4, “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 no YaST ou especifique -c na linha de comando (snapper ).
-c MINHACONFIG COMANDO
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.5.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, 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 4.5.1.2, “Algoritmos de limpeza” para obter os detalhes.
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. Usado para os instantâneos automáticos do YaST/Zypper, por exemplo.
post
Instantâneo de um sistema de arquivos após a modificação. Cada instantâneo post tem o seu pre correspondente. Usado para os instantâneos automáticos do YaST/Zypper, por exemplo.
single
Instantâneo independente. Usado, por exemplo, para os instantâneos automáticos por hora. Esse é o tipo padrão quando se cria instantâneos.
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.4.1, “Gerenciando configurações existentes” para obter os detalhes).
Apaga instantâneos antigos quando determinado número de instantâneos é atingido.
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.
Apaga os pares de pré/pós-instantâneos com diffs vazias.
A criação do instantâneo é feita executando o comando snapper create ou clicando em no módulo do YaST. Os exemplos a seguir explicam como criar instantâneos da linha de comando. Eles são fáceis de adotar ao usar a interface do YaST.
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 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 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"--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 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.
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 ao usar a interface do YaST.
Para modificar um instantâneo na linha de comando, você precisa saber o número dele. Use snapper para exibir todos os instantâneos e seus números.
list
O módulo do YaST já lista todos os instantâneos. Escolha um na lista e clique em .
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.
Para apagar um instantâneo com o módulo do YaST, escolha-o na lista e clique em .
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.
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.
Às vezes, o instantâneo btrfs está presente, mas não o arquivo xml do snapper com os metadados. Portanto, para o snapper, o instantâneo não existe. Você precisa primeiro apagar o subvolume btrfs para poder apagar o diretório NÚMERO_DO_INSTANTÂNEO:
btrfs subvolume delete /.snapshots/SNAPSHOTNUMBER/snapshot
rm -rf /.snapshots/SNAPSHOTNUMBER
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 4.5.1.2, “Algoritmos de limpeza” para obter os detalhes.
/var/log, /tmp e em outros diretórios?
Para alguns diretórios, nós decidimos excluí-los dos instantâneos. Consulte 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.
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.
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. Consulte a Seção 4.1.1.3, “Controlando o armazenamento de instantâneos” para obter os detalhes.
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 dos instantâneos quando eles não são mais necessários. Consulte a Seção 4.5.4, “Apagando instantâneos” para obter os detalhes.
Sim, veja os detalhes na Seção 4.3, “Rollback do sistema por inicialização de instantâneos”.
Consulte a home page do Snapper em http://snapper.io/.