Snapper (Português)

Snapper é uma ferramenta criada por Arvin Schnell, do openSUSE, que ajuda no gerenciamento de snapshots de subvolumes do Btrfs e volumes LVM com provisionamento thin. Ele pode criar e comparar snapshots, reverter entre snapshots e oferecer suporte a linhas de tempo de snapshots automáticos.

Status de tradução: Esse artigo é uma tradução de Snapper. Data da última tradução: 2022-08-02. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Instalação

Instale o pacote snapper. A versão de desenvolvimento snapper-gitAUR também está disponível.

Adicionalmente, interfaces gráficas estão disponíveis com snapper-gui-gitAUR e btrfs-assistantAUR.

Criando uma nova configuração

Antes de criar uma configuração do snapper para um subvolume Btrfs, o subvolume já deve existir. Caso contrário você deve criá-lo antes de gerar uma configuração do snapper.

Para criar uma nova configuração do snapper chamada config para o subvolume Btrfs em /caminho/para/subvolume, execute:

# snapper -c config create-config /caminho/para/subvolume

Isso vai:

  • Criar um arquivo de configuração em com base no modelo padrão de .
  • Criar um subvolume em onde serão armazenados futuros snapshots para esta configuração. O caminho de um snapshot é , onde é o número do snapshot.
  • Adicionar config a SNAPPER_CONFIGS em /etc/conf.d/snapper.

Por exemplo, para criar um arquivo de configuração para o subvolume montado em , execute:

# snapper -c root create-config /

Neste ponto, a configuração está ativa. Se seu daemon cron estiver em execução, o snapper fará #Snapshots automáticos da linha do tempo. Se você não usar um daemon cron, precisará usar o serviço e o timer do systemd. Consulte #Ativar/desativar.

Veja também .

Tirando snapshots

Snapshots automáticos da linha do tempo

Uma linha do tempo de snapshots pode ser criada com um número configurável de snapshots mantidos de hora em hora, diariamente, semanalmente, mensalmente e anualmente. Quando a linha do tempo está habilitada, por padrão, um snapshot é criado uma vez por hora. Uma vez por dia, os snapshots são limpos pelo algoritmo de limpeza da linha do tempo. Consulte as variáveis em para detalhes.

Ativar/desativar

Se você tiver um daemon cron, esse recurso deve iniciar automaticamente. Para desativá-lo, edite o arquivo de configuração correspondente ao subvolume que você não deseja que tenha esse recurso e defina:

TIMELINE_CREATE="no"

Se você não tiver um daemon cron, poderá usar os units fornecidos pelo systemd. Inicie e habilite snapper-timeline.timer para iniciar a linha de tempo automática do snapshot. Além disso, inicie e habilite para limpar periodicamente os snapshots mais antigos.

Definir limites de snapshots

As configuração padrão manterá 10 snapshots por hora, 10 diários, 10 mensais e 10 anuais. Você pode querer mudar isso na configuração, especialmente em subvolumes ocupados como . Consulte #Evitando lentidão.

Aqui está uma seção de exemplo de uma configuração chamada config com apenas 5 snapshots por hora, 7 diários, nenhum mensal e nenhum anual:

Alterar as frequências de snapshot e limpeza

Se você estiver usando os timers fornecidos pelo systemd, você pode editá-los para alterar a frequência de snapshots e limpeza.

Por exemplo, ao editar o snapper-timeline.timer, adicione o seguinte para tornar a frequência a cada cinco minutos, em vez de por hora:

[Timer]
OnCalendar=
OnCalendar=*:0/5

Ao editar , você precisa alterar . Para que as limpezas ocorram a cada hora em vez de todos os dias, adicione:

[Timer]
OnUnitActiveSec=1h

Veja systemd/Timers e systemd#Arquivos drop-in.

Snapshots individuais

Por padrão, o snapper tira snapshots do tipo single, não tendo nenhum relação especial com outros snapshots.

Para tirar um snapshot de um subvolume manualmente, faça:

# snapper -c config create --description desc

O comando acima não usa nenhum algoritmo de limpeza, portanto, o snapshot é armazenado permanentemente ou até ser excluído.

Para definir um algoritmo de limpeza, use o sinalizador -c após e escolha , , , ou . configura o snapper para remover periodicamente snapshots que excederam um número definido no arquivo de configuração. Por exemplo, para criar um snapshot que usa o algoritmo para limpeza, faça:

# snapper -c config create -c number

Veja #Snapshots automáticos da linha do tempo para saber como os snapshots funcionam e veja #Snapshots pré/pós sobre como e funcionam.

Snapshots pré/pós

O outro tipo de snapshots - snapshots pré/pós - devem ser criados como um par, um antes e outro depois de uma alteração significativa (como uma atualização do sistema).

Se a mudança significativa é/pode ser invocada por um único comando, então snapper create --command pode ser usado para invocar o comando e criar automaticamente snapshots pré/pós:

# snapper -c config create --command comando

Alternativamente, os snapshots pré/pós podem ser criados manualmente.

Primeiro crie um snapshot pré:

# snapper -c config create -t pre -p

Anote o número do novo snapshot (é necessário para criar o instantâneo pós).

Agora execute as ações que irão modificar o sistema de arquivos (por exemplo, instalar um novo programa, atualizar, etc.).

Finalmente, crie o snapshot pós, substituindo pelo número do snapshot pré:

# snapper -c config create -t post --pre-number N

Veja também #Envolvendo transações do pacman em snapshots.

Snapshots na inicialização

Para que o snapper tire um snapshot da configuração do , habilite . (Esses snapshots são do tipo single.)

Gerenciando snapshots

Listar configurações

Para listar todas as configurações que foram criadas faça:

# snapper list-configs

Listar snapshots

Para listar os snapshots tirados para uma determinada configuração config, faça:

# snapper -c config list

Excluir um snapshot

Para excluir um snapshot de número faça:

# snapper -c config delete N

Vários snapshots podem ser excluídos de uma só vez. Por exemplo, para excluir os snapshots 65 e 70 da configuração root, faça:

# snapper -c root delete 65 70

Para excluir um intervalo de snapshots, neste exemplo entre os snapshots 65 e 70 da configuração root, faça:

# snapper -c root delete 65-70

Para imediatamente liberar o espaço usado pelo(s) snapshot(s), use --sync:

# snapper -c root delete --sync 65

Acesso para usuários não root

Cada configuração é criada com o usuário root e, por padrão, apenas o root pode vê-la e acessá-la.

Para poder listar os snapshots de uma determinada configuração para um usuário específico, basta alterar o valor de em seu arquivo . Agora você deve ser capaz de executar como um usuário normal.

Eventualmente, você deseja poder navegar no diretório com um usuário, mas o proprietário deste diretório deve permanecer como root. Portanto, você deve alterar o proprietário do grupo por um grupo contendo o usuário de seu interesse, como por exemplo:

# chmod a+rx .snapshots
# chown :users .snapshots

Dicas e truques

Envolvendo transações do pacman em snapshots

Existem alguns pacotes usados para criar snapshots automaticamente em uma transação do pacman:

  • pacupg Script que envolve atualizações de pacotes e do AUR em snapshots Btrfs e fornece uma maneira fácil de revertê-los.
https://github.com/crossroads1112/bin/tree/master/pacupg || pacupgAUR
  • snp Envolve qualquer comando shell em um snapshot pré-pós do snapper, por exemplo snp pacman -Syu.
https://gist.github.com/erikw/5229436 || snpAUR

Backup de partições boot não Btrfs em transações do pacman

Se sua partição estiver em um sistema de arquivos não Btrfs (por exemplo, um ESP), você não poderá fazer backups do snapper com ela. Veja Backup do sistema#Snapshots e partição /boot para copiar a partição de inicialização automaticamente em uma atualização do kernel para sua raiz Btrfs com um hook. Isso também funciona bem junto com .

Backup incremental para unidade externa

Algumas ferramentas podem usar o snapper para automatizar backups. Consulte Backup incremental para unidade externa.

Layout do sistema de arquivos sugerido

Aqui está um layout de sistema de arquivos sugerido para restaurar facilmente o subvolume que está montado na raiz de um snapshot anterior:

Layout do sistema de arquivos
SubvolumePonto de montagem
@/
@home/home
@snapshots/.snapshots
@var_log/var/log
subvolid=5
  |
  ├── @ -|
  |     diretórios contidos:
  |       ├── /usr
  |       ├── /bin
  |       ├── /.snapshots
  |       ├── ...
  |
  ├── @home
  ├── @snapshots
  ├── @var_log
  └── @...

Os subvolumes são montados em qualquer outro diretório que deva ter seu próprio subvolume.

Se você restaurar seu sistema para um snapshot anterior de , esses outros subvolumes não serão afetados. Por exemplo, isso permite que você restaure para um snapshot anterior enquanto mantém seu /home inalterado, devido ao subvolume que está montado em /home.

Esse layout permite que o utilitário snapper tire snapshots regulares de , ao mesmo tempo que facilita a restauração de de um Arch Live CD se ele não inicializar.

Nesse cenário, após a configuração inicial, o snapper não precisa de alterações e funcionará conforme o esperado.

Configuração do snapper e do ponto de montagem

Supõe-se que o subvolume esteja montado na raiz . Também é assumido que não é montado e não existe como pasta, isso pode ser garantido pelos comandos:

# umount /.snapshots
# rm -r /.snapshots

Então crie uma nova configuração para . O Snapper create-config cria automaticamente um subvolume com o subvolume raiz como seu pai, que não é necessário para o layout do sistema de arquivos sugerido e pode ser excluído.

# btrfs subvolume delete /.snapshots

Após excluir o subvolume, recrie o diretório .

# mkdir /.snapshots

Agora monte em . Por exemplo, para um sistema de arquivos localizado em /dev/sda1:

# mount -o subvol=@snapshots /dev/sda1 /.snapshots

Para tornar esta montagem permanente, adicione uma entrada ao seu fstab.

Ou se você tiver uma entrada fstab existente, remonte o subvolume do snapshot:

# mount -a

Dê à pasta a permissão .

Isso fará com que todos os snapshots criados pelo snapper sejam armazenados fora do subvolume , para que possa ser facilmente substituído a qualquer momento sem perder os snapshots do snapper.

Restaurando / para seu snapshot anterior

Para restaurar o usando um dos snapshots do snapper, primeiro inicialize em um USB/CD live do Arch Linux.

Monte o subvolume de nível superior (subvolid=5). Ou seja, omita quaisquer sinalizadores de montagem ou .

Encontre o número do snapshot que você deseja recuperar:

grep -r '<date>' /mnt/@snapshots/*/info.xml

A saída deve se parecer com isso, há uma linha para cada snapshot, para que você possa combinar facilmente o número e a data de cada snapshot.

 /mnt/@snapshots/número/info.xml: <date>2021-07-26 22:00:00</date>

Lembre-se do .

Agora, mova para outro local (por ex. ) para salvar uma cópia do sistema atual. Alternativamente, simplesmente delete usando .

Crie um snapshot de leitura e gravação (read-write) do snapshot somente leitura (read-only) que o snapper tirou:

# btrfs subvolume snapshot /mnt/@snapshots/número/snapshot /mnt/@

Onde é o número do snapshot do snapper que você deseja restaurar.

Se foi usado para a opção de entrada de montagem no fstab, em vez de , altere subvolid no para o novo subvolid.

# btrfs subvolume list /mnt | grep @$ # Verifique o novo subvolid
# grep "/ " /mnt/@/etc/fstab          # Verifique o subvolid antigo
# vim /mnt/@/etc/fstab                # Edite

Altere também a configuração do bootloader, como refind_linux.conf, se ele contiver o subvolid.

Dica: Você também pode usar a ferramenta de reversão automática feita para este layout: snapper-rollbackAUR. Edite o arquivo de configuração em /etc/snapper-rollback.conf para corresponder ao seu sistema.

Excluindo arquivos de snapshots

Se você deseja excluir um arquivo ou pasta específica de snapshots anteriores sem excluir os próprios snapshots, é um script que adiciona essa funcionalidade ao Snapper. Esse script também pode ser usado para manipular snapshots anteriores de várias outras maneiras que o Snapper não suporta atualmente.

Se você deseja remover um arquivo sem usar um script extra, basta fazer com que seu subvolume do snapshot tenha permissões de leitura e escrita, o que você pode fazer com:

# btrfs property set /caminho/para/.snapshots/<num_do_snapshot>/snapshot ro false

Verifique se ro=false:

# btrfs property get /caminho/para/.snapshots/<num_do_snapshot>/snapshot
ro=false

Agora você pode modificar arquivos em normalmente. Você pode usar um loop de shell para trabalhar em seus snapshots em massa.

Evitando lentidão

Manter muitos snapshots por um longo período de tempo em um sistema de arquivos ocupado como , onde muitas atualizações do sistema acontecem ao longo do tempo, pode causar lentidão séria. Você pode evitar isso:

updatedb

Por padrão, (veja mlocale) também indexará o diretório criado pelo snapper, o que pode causar lentidão grave e uso excessivo de memória se você tiver muitos snapshots. Você pode impedir que indexe sobre ele editando:

Desativar grupos de cotas

Há relatos de lentidão significativa causada por grupos de cotas, se, por exemplo, levar muitos minutos para retornar um resultado, essa pode ser a causa. Consulte .

Para determinar se os grupos de cotas estão ou não habilitados, use o seguinte comando:

# btrfs qgroup show /

Os grupos de cotas podem ser desativados com:

# btrfs quota disable /

Contar o número de snapshots

Se a desativação de grupos de cotas não ajudou na lentidão, pode ser útil contar o número de snapshots, isso pode ser feito com:

# btrfs subvolume list -s / | wc -l

Preservando arquivos de log

É recomendado criar um subvolume para /var/log para que os snapshots de o excluam. Dessa forma, se um snapshot de for restaurado, seus arquivos de log também não serão revertidos para o estado anterior. Isso facilita a solução de problemas.

Solução de problemas

Logs do snapper

O Snapper grava todas as atividades em - verifique este arquivo primeiro se achar que algo está errado.

Se você tiver problemas com snapshots de hora em hora/diários/semanais, a causa mais comum para isso até agora foi que o serviço cronie (ou qualquer daemon cron que você está usando) não estava em execução.

Erro de E/S

Se você receber um 'IO Error' ao tentar criar um snapshot, certifique-se de que o diretório .snapshots associado ao subvolume que você está tentando fazer o snapshot é um subvolume por si só.

Outra causa possível é que o diretório .snapshots não tem root como proprietário (Você encontrará Btrfs.cc(openInfosDir):219 - .snapshots must have owner root em ).

Snapshots órfãos causando desperdício de espaço em disco

É possível que os instantâneos sejam 'perdidos', onde ainda existem no disco, mas não são rastreados pelo snapper. Isso pode resultar em uma grande quantidade de espaço em disco desperdiçado e não contabilizado. Para verificar isso, compare a saída de

# snapper -c <config> list

com

# btrfs subvolume list -o <subvolume pai>/.snapshots 

Qualquer subvolume na segunda lista que não esteja presente na primeira é órfão e pode ser excluído manualmente.

Veja também

gollark: Well, if you have any resistor whatsoever in arbitrarily large quantities, plus lots of wire, you can make any resistance ever.
gollark: =tex \lambda \lambda . \lambda \lambda \lambda \lambda \pi \lambda
gollark: Don't be on fire, or something similar.
gollark: I'd like to note that it doesn't work on Linux. Admittedly the game apparently won't, but still.
gollark: As someone on Linux I'm not actually likely to play it anyway for years, so whatever.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.