Backup com restic + rclone
Vamos configurar uma solução de backup utilizando restic e rclone.
Restic é uma ferramenta de backup super bacana, que tem como principais recursos a encriptação - o que significa que mesmo que seu backup caia nas mãos erradas, somente com a sua senha será possível decriptá-lo. Além disso, ele é eficiente: a cada backup, somente os dados que realmente mudaram precisam ser armazenados - arquivos que não mudaram, não precisam ser reenviados.
Instalando as ferramentas
Vamos antes de mais nada, certificar que temos as 3 ferramentas para esse tutorial instaladas:
- Ubuntu
- Windows
restic
: uma ferramenta de backup rápida e segurarclone
: uma ferramenta de linha de comando para gerenciamento de arquivos na nuvem.libsecret-tools
: uma ferramenta para armazenar e recuperar senhas.
Se você está utilizando Ubuntu, basta rodar esse comando:
sudo apt install restic rclone libsecret-tools
Serão utilizadas as mesmas ferramentas para Windows, Restic e Rclone.
Microsoft-Credentialmanager
: Este é o sistema integrado do Windows para gerenciar credenciais de usuário, incluindo senhas de rede e informações de login para diversos serviços. Ele oferece um ambiente seguro para armazenar credenciais de forma criptografada, acessível somente através da sua conta de usuário no Windows.
Criando a API Key
Acesse a lista de api keys e crie uma caso ainda não tenha, ou escolha uma API key apropriada.
Você vai precisar do id e do secret nos próximos passos.
Configurando o rclone
Siga as instruções disponíveis para configurar um remote no rclone.
Para esse tutorial, vamos assumir que foi configurado um remote chamado mgc
. Certifique-se de que ele está funcionando rodando o seguinte comando:
rclone lsd mgc:
Isso deve listar os buckets que você tem, se já tiver algum criado. Caso ainda não tenha nenhum bucket, não vai aparecer nada, mas se nenhuma mensagem de erro aparecer, está tudo certo.
Caso ainda não tenha criado um via o console web, vamos agora criar o bucket que vai armazenar o nosso backup. Por exemplo:
rclone mkdir mgc:meu-bucket-de-backup
Troque o meu-bucket-de-backup
por um nome que você achar apropriado. O comando acima não exibe nenhum output, mas é possível usar o comando lsd
mostrado anteriormente para verificar que o bucket foi criado.
O nome do bucket precisa respeitar as regras de nomes de buckets, então escolha um que seja bem diferente, uma vez que a API de object storage não permite nomes duplicados. As chances de alguém já ter escolhido backup
são grandes.
Nota: embora seja possível utilizar o restic diretamente com a API S3, sem precisar do rclone, estamos escolhendo utilizá-lo pois assim, não é necessário configurar variáveis de ambiente com as API keys, o que pode causar problemas com outras ferramentas em casos de uso mais complexos.
Configurando o Secret Manager
O próximo passo é definirmos uma senha para nosso repositório. Para não precisarmos digitar a senha a cada backup realizado, vamos configurar o gnome Keyring para salvar a senha para nós.
Armazene a senha no gnome Keyring com o seguinte comando:
- Ubuntu
- Windows
secret-tool store --label='Password for: restic - Backups done right!' type password application net.restic.restic
E na sequência, informe a senha.
Agora, vamos configurar o restic para utilizar o gnome keyring. Fazemos isso exportando uma variável:
export RESTIC_PASSWORD_COMMAND="secret-tool lookup type password application net.restic.restic"
Pronto, agora o restic está pronto para ser utilizado. Lembre-se de salvar essas variáveis de ambiente no arquivo de configuração do seu shell ou profile.
Configurando a senha com o Gerenciador de Credenciais do Windows:
Abra o Gerenciador de Credenciais do Windows:
Pressione Windows + R, digite control /name Microsoft.CredentialManager e pressione Enter.
Adicione uma nova credencial genérica:
Clique em "Adicionar uma credencial genérica".
No campo "Nome do Internet ou da rede", insira restic-password.
No campo "Nome do usuário", deixe em branco.
No campo "Senha", insira a senha que você deseja usar para o restic.
Clique em "OK" para salvar.
Configure o restic para usar o Gerenciador de Credenciais do Windows:
$env:RESTIC_PASSWORD_COMMAND="powershell.exe -Command { (Get-Credential -Credential restic-password).Password | ConvertTo-SecureString -AsPlainText -Force }"
Certifique-se de salvar essas variáveis de ambiente no arquivo de configuração do seu perfil do PowerShell. Para editar o perfil do PowerShell, execute o seguinte comando:
notepad $PROFILE
Adicione as linhas abaixo ao arquivo que abrir:
$env:RESTIC_PASSWORD_COMMAND="powershell.exe -Command { (Get-Credential -Credential restic-password).Password | ConvertTo-SecureString -AsPlainText -Force }"
Salve e feche o arquivo.
Configurando o Restic
Agora que o secret manager está configurado, vamos configurar o restic.
Embora seja possível utilizar o restic informando os parâmetros de algumas maneiras diferentes, estamos escolhendo um caminho para que a sua execução seja o mais simples possível. Com isso, vamos configurar duas variáveis de ambiente específicas, para que não precisemos ficar informando o repositório (termo utilizado pelo restic - que no fundo é o nosso bucket), nem a senha do repositório a cada backup executado.
A variável é composta em 3 partes:
- rclone: estamos indicando para o restic que queremos usar um backend configurado com o rclone.
- mgc: esse é o nome do remote que configuramos no rclone no passo anterior.
- meu-bucket-de-backup: Esse é o nome do bucket que será utilizado para armazenar os dados.
Configurando as variáveis de ambiente
- Ubuntu
- Windows
No Linux, execute os comandos:
export RESTIC_REPOSITORY="rclone:mgc:meu-bucket-de-backup"
export RESTIC_PASSWORD_COMMAND="secret-tool lookup type password application net.restic.restic"
No Windows, execute os comandos no PowerShell:
$env:RESTIC_REPOSITORY="rclone:mgc:meu-bucket-de-backup"
$env:RESTIC_PASSWORD_COMMAND="powershell.exe -Command { (Get-Credential -Credential restic-password).Password | ConvertTo-SecureString -AsPlainText -Force }"
Pronto, agora o restic está pronto para ser utilizado.
Criando um novo repositório
Esse talvez seja o passo mais simples até agora. Basta rodar o seguinte comando:
restic init
Rapidinho ele vai terminar e exibir uma mensagem similar a essa:
created restic repository 5192661248 at rclone:mgc:meu-bucket-de-backup
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
Pronto. Era isso. Agora, vamos partir para nosso primeiro backup.
Fazendo o primeiro backup
Se chegamos até aqui, é porque você realmente tem algum dado importante que quer fazer backup. Para esse exemplo, vamos fazer o backup da nossa pasta de documentos. Note que em cada computador, a pasta pode ter um nome diferente, então certifique-se de digitar o nome correto no comando a seguir:
- Ubuntu
- Windows
No Linux:
restic backup ~/Documents
No Windows:
restic backup C:\Users\<SEU-USUARIO>\Documents
Agora o restic vai fazer a mágica dele, enquanto ele está processando os dados e fazendo o upload, o progresso será exibido. Algo parecido com isso:
repository 51926612 opened (version 2, compression level auto)
no parent snapshot found, will read all files
[0:00] 0 index files loaded
[0:03] 0.67% 73 files 115.854 MiB, total 42004 files 16.911 GiB, 0 errors ETA 1:12:34
[Alguns momentos depois - Imagem do bob esponja]
Note que nesse exemplo, o diretório tem 16GB de dados para serem processados, e é exibido uma estimativa de que irá demorar pouco mais de uma hora para terminar o backup (ETA
), mas não se preocupe, esse tempo provavelmente vai ser menor. Nesse caso, levou 27 minutos:
Files: 42004 new, 0 changed, 0 unmodified
Dirs: 9004 new, 0 changed, 0 unmodified
Added to the repository: 15.382 GiB (10.470 GiB stored)
processed 42004 files, 16.911 GiB in 27:56
snapshot d33c4cbc saved
Note que apesar do diretório ter praticamente 17GiB de dados, somente 10 GiB foram adicionados ao repositório. Isso é por que o restic faz compactação e de-duplicação de arquivos. Se por acaso tiver arquivos repetidos, eles não são armazenados duas vezes.
Fazendo um segundo backup
Sei que acabamos de fazer um backup, então não faz sentido fazer um novamente exatamente nesse instante, mas por curiosidade, vamos fazer mesmo assim.
- Ubuntu
- Windows
restic backup ~/Documents
restic backup C:\Users\<SEU-USUARIO>\Documents
Opa. Dessa vez foi bem mais rápido (assumindo que você não jogou um monte de arquivo novo no diretório)
repository 51926612 opened (version 2, compression level auto)
using parent snapshot d33c4cbc
[0:00] 66.67% 2 / 3 index files loaded
Files: 0 new, 0 changed, 42004 unmodified
Dirs: 0 new, 0 changed, 9004 unmodified
Added to the repository: 0 B (0 B stored)
processed 42004 files, 16.911 GiB in 0:02
snapshot 57a760c7 saved
E aqui vemos uma das coisas mais legais do restic. Arquivos que não foram modificados, não precisam ser enviados novamente: eles já estão salvos no backup.
Restaurando
Nenhum backup é backup de verdade, se não conseguirmos restaurar quando necessário.
Vamos agora ensaiar um cenário de desastre e precisamos recuperar todo o nosso diretório que foi feito o backup.
Primeiro, vamos ver todos os snapshots criados:
restic snapshots
Se você executou tudo conforme indicado até agora, terá 2 snapshots. Algo similar a isso:
repository 51926612 opened (version 2, compression level auto)
ID Time Host Tags Paths
-----------------------------------------------------------------------------
d33c4cbc 2024-05-17 11:10:44 stoqws-16 /home/romaia/Documents
57a760c7 2024-05-17 13:31:40 stoqws-16 /home/romaia/Documents
-----------------------------------------------------------------------------
2 snapshots
Nessa listagem, temos o id do snapshot (que utilizaremos para restaurar), a hora em que foi feito o backup, o hostname do computador onde esse backup foi feito, tags (que não inserimos nenhuma) e o diretório que foi salvo nesse snapshot.
Note por essa listagem, que é possível, em um mesmo repositório, fazer backups de diretórios e computadores diferentes.
Para restaurarmos, então, vamos executar:
restic restore --target /tmp/documentos-restaurados 57a760c7
Isso vai criar o diretório /tmp/documentos-restaurados e restaurar todos os arquivos presentes no snapshot informado (57a760c7).
Caso precise restaurar apenas um ou alguns poucos arquivos, é possível também criar um "ponto de montagem" do seu backup: é como se você espetasse um pendrive com o backup no computador.
Primeiro, crie um diretório que é onde o sistema de arquivos será montado:
mkdir /tmp/restic-mount
restic mount /tmp/restic-mount
Pronto. A ferramenta ficará em execução, mas em um outro terminal ou navegador de arquivos, é possível navegar pelos snapshots e arquivos, e com isso, copiar o arquivo que precisar restaurar.
Quando concluir, basta voltar no terminal que rodou o restic mount e apertar Ctrl + C.
Este guia detalhado abrange desde a instalação das ferramentas necessárias até a configuração de backups periódicos, oferecendo soluções tanto para ambientes Ubuntu quanto Windows. Seguindo os passos aqui apresentados, você será capaz de implementar uma robusta estratégia de backup usando restic e rclone, garantindo a segurança e a disponibilidade dos seus dados importantes. Lembre-se sempre de testar os procedimentos de restauração periodicamente para garantir que tudo está funcionando como esperado.
Nesse ponto que chegamos, já podemos fazer nosso backup sempre que acharmos necessário, mas uma boa prática pode ser realizar o backup periodicamente.
Configurando um backup periódico
- Ubuntu
- Windows
Uma maneira muito simples de fazer isso, é utilizando o crontab.
Em um terminal, basta digitar:
crontab -e
Isso vai abrir um editor para configurarmos um cron job que será executado com o nosso usuário. (Dica: você pode alterar o editor que é aberto exportando uma variável EDITOR
com o seu editor de preferência)
Um ponto importante do crontab, é que as variáveis de ambiente definidas no seu terminal não estarão presentes ao executar o job, então vamos precisar defini-las no crontab também.
RESTIC_REPOSITORY="rclone:mgc:meu-bucket-de-backup"
RESTIC_PASSWORD_COMMAND="secret-tool lookup type password application net.restic.restic"
0 13 * * * run-one restic backup ~/Documents
O exemplo acima configura o backup para ser feito todo dia as 13 horas. São poucas as pessoas que sabem a especificação de um cronjob de cabeça, então se precisar de ajuda para definir a periodicidade, um bom site é o crontab.guru
Nesse exemplo, utilizamos o run-one
para garantir que, caso o nosso backup leve mais tempo do que 24 horas para concluir, quando chegar o horário da próxima execução, ele não vai iniciar novamente, uma vez que o processo anterior ainda está rodando. Embora seja pouco provável que isso aconteça, é sempre uma boa prática utilizar o run-one
em cronjobs, especialmente quando a frequência de execução for mais rápida.
Vamos utilizar o Task Scheduler do Windows para configurar um backup periódico com restic e rclone.
Abra o Task Scheduler.
Pressione Windows + R, digite taskschd.msc e pressione Enter.
Crie uma nova tarefa básica.
No painel de ações à direita, clique em Create Basic Task....
Dê um nome para a tarefa, como Backup Restic, e clique em Next.
Configure a periodicidade desejada.
Escolha a frequência com que deseja executar o backup (diariamente, semanalmente, etc.) e clique em Next.
Configure os detalhes de acordo com a sua escolha e clique em Next.
No campo de ação, configure para executar o PowerShell com o seguinte comando:
Selecione Start a Program e clique em Next.
No campo Program/script, digite PowerShell.exe.
No campo Add arguments (optional), digite o comando abaixo ajustando os valores das variáveis de ambiente e caminhos conforme necessário:
-Command "$env:RESTIC_REPOSITORY='rclone:mgc:meu-bucket-de-backup'; $env:RESTIC_PASSWORD_COMMAND='PowerShell.exe -Command { (Get-Credential -Credential restic-password).Password | ConvertTo-SecureString -AsPlainText -Force }'; restic backup C:\Users\<SEU-USUARIO>\Documents"
Confirme as configurações e finalize.
Revise as configurações na tela de resumo e clique em Finish.
Para garantir que a tarefa agendada funcione corretamente, você pode testar executando-a manualmente:
No Task Scheduler, encontre a tarefa que você criou na lista Task Scheduler Library.
Clique com o botão direito na tarefa e selecione Run.
Pronto! Agora você tem um backup periódico configurado.