Restic no Linux: backup criptografado e deduplicado
O rsync e o tar fazem o backup chegar ao destino, mas não protegem o conteúdo se o disco de destino for comprometido, e não eliminam blocos repetidos entre execuções. O restic resolve os dois problemas: cada snapshot é criptografado com AES-256 antes de sair do servidor e a deduplicação por blocos guarda só o que mudou, mesmo em arquivos grandes. A versão estável atual é a 0.19.1, lançada em julho de 2026.
Por que trocar rsync/tar por restic
Três diferenças justificam a migração:
- Criptografia nativa — a chave fica só no servidor de origem; quem tiver acesso ao destino (S3, SFTP, disco externo) não lê nada sem ela.
- Deduplicação por conteúdo — o restic quebra os arquivos em blocos e só envia blocos novos. Um servidor de 200GB com 2% de mudança diária gera snapshots de poucos megabytes, não de gigabytes.
- Snapshots consistentes — cada execução vira um ponto de restauração navegável, sem precisar manter cópias completas separadas por data.
Instalando o restic
O binário é estático — não precisa de dependência de runtime. Em Debian/Ubuntu recentes já está nos repositórios:
sudo apt update && sudo apt install restic
Para garantir a versão mais recente (o pacote das distros costuma atrasar), baixe o binário direto do projeto:
cd /tmp curl -L -o restic.bz2 https://github.com/restic/restic/releases/latest/download/restic_linux_amd64.bz2 bunzip2 restic.bz2 chmod +x restic sudo mv restic /usr/local/bin/restic restic version
Passo a passo: repositório, primeiro backup e agendamento
1. Inicializar o repositório
O repositório é onde os snapshots ficam guardados. Pode ser uma pasta local, um servidor SFTP ou um bucket S3/Backblaze B2 — o comando de inicialização é o mesmo, só muda a URL. Exemplo com disco local montado em /mnt/backup:
export RESTIC_REPOSITORY=/mnt/backup/restic-repo export RESTIC_PASSWORD='defina-uma-senha-forte-aqui' restic init
Guarde essa senha fora do servidor. Sem ela, os dados no repositório são irrecuperáveis — é a mesma criptografia que protege contra acesso indevido que também bloqueia você se perder a chave.
2. Rodar o primeiro backup
restic backup /etc /home /var/www --exclude='*.log' --exclude='/var/www/*/cache'
Cada execução seguinte só envia o que mudou desde o snapshot anterior, mas o restic sempre trata o resultado como um backup completo e navegável — não existe a distinção entre “full” e “incremental” que existe no rsync com --link-dest.
3. Agendar com systemd timer
Cron funciona, mas o systemd timer registra o resultado no journal e reexecuta automaticamente se o servidor estava desligado no horário previsto. Crie o serviço:
sudo tee /etc/systemd/system/restic-backup.service > /dev/null <<'EOF' [Unit] Description=Backup restic [Service] Type=oneshot Environment=RESTIC_REPOSITORY=/mnt/backup/restic-repo Environment=RESTIC_PASSWORD_FILE=/etc/restic/senha ExecStart=/usr/local/bin/restic backup /etc /home /var/www --exclude='*.log' EOF
Guarde a senha em arquivo com permissão restrita em vez de deixá-la na unit:
sudo mkdir -p /etc/restic echo 'defina-uma-senha-forte-aqui' | sudo tee /etc/restic/senha sudo chmod 600 /etc/restic/senha
E o timer, disparando toda madrugada às 3h:
sudo tee /etc/systemd/system/restic-backup.timer > /dev/null <<'EOF' [Unit] Description=Timer do backup restic [Timer] OnCalendar=*-*-* 03:00:00 Persistent=true [Install] WantedBy=timers.target EOF sudo systemctl daemon-reload sudo systemctl enable --now restic-backup.timer
Persistent=true é o que faz o timer rodar o backup atrasado se o servidor estiver desligado ou reiniciando às 3h — sem essa linha, aquele dia simplesmente fica sem backup.
4. Definir a política de retenção
Sem limpeza, o repositório cresce para sempre. O comando forget marca snapshots antigos para remoção conforme uma política, e --prune libera o espaço de fato:
restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune
Essa política mantém os últimos 14 dias completos, um snapshot por semana até 8 semanas e um por mês até 12 meses — cobertura para recuperação de erro operacional recente e para auditoria de médio prazo, sem acumular centenas de snapshots redundantes. Rode o forget --prune fora da janela do backup diário: durante o prune o repositório fica bloqueado para escrita.
5. Testar a restauração
Backup que nunca foi restaurado é uma suposição, não uma garantia. Liste os snapshots e restaure um arquivo específico para validar:
restic snapshots restic restore latest --target /tmp/restore-teste --include /etc/nginx/nginx.conf
Faça esse teste depois de configurar o agendamento e repita periodicamente — é o único jeito de descobrir um repositório corrompido antes do dia em que ele for realmente necessário.
Enviando para armazenamento remoto
Manter o repositório só no mesmo servidor derrota o propósito do backup: um disco que falha leva os dados originais e a cópia junto. O restic fala nativamente com vários backends remotos, bastando trocar a variável RESTIC_REPOSITORY:
# SFTP export RESTIC_REPOSITORY=sftp:usuario@servidor-remoto:/backups/restic # S3 ou compatível (Backblaze B2, MinIO, Wasabi) export RESTIC_REPOSITORY=s3:s3.us-east-1.amazonaws.com/nome-do-bucket export AWS_ACCESS_KEY_ID=sua-access-key export AWS_SECRET_ACCESS_KEY=sua-secret-key
A prática recomendada é manter dois repositórios — um local para restauração rápida, outro remoto para sobreviver a incêndio, roubo ou ransomware no servidor de origem. O comando backup é idêntico nos dois casos; só muda para qual RESTIC_REPOSITORY ele aponta.
Perguntas frequentes
Restic substitui um backup de banco de dados dedicado?
Não. Para bancos como PostgreSQL ou MySQL, gere primeiro um dump consistente (pg_dump, mysqldump) e inclua o arquivo do dump no backup do restic — copiar os arquivos de dados do banco “a frio” pode gerar um snapshot inconsistente.
Dá para verificar a integridade do repositório sem restaurar tudo?
Sim, com restic check. Ele confere a estrutura dos dados e, com a flag --read-data, também os blocos de conteúdo — mais lento, mas detecta corrupção silenciosa no armazenamento de destino.
Qual a diferença entre restic e Borg Backup?
Os dois fazem deduplicação e criptografia. O restic tem mais backends remotos nativos (S3, B2, Azure, GCS, SFTP) sem precisar de camada extra; o Borg exige SSH ou FUSE para a maioria dos destinos remotos.
Um snapshot corrompido compromete os outros?
Não diretamente — cada snapshot referencia blocos no repositório, e blocos ainda usados por outros snapshots continuam íntegros. Mas um repositório com corrupção estrutural pode afetar o acesso a vários snapshots; por isso o check periódico importa.
Restic funciona em Windows?
Sim, o binário é multiplataforma. Este guia usa systemd por ser Linux, mas os comandos init, backup, forget e restore são idênticos em qualquer sistema.
Conclusão
Restic troca a complexidade de scripts caseiros com rsync --link-dest por um formato de snapshot único, criptografado e deduplicado — e ainda fala nativamente com S3, B2 e SFTP sem gambiarra. Comece com um repositório local para validar o fluxo, agende com systemd timer, defina a política de forget --prune e, antes de confiar nele em produção, force uma restauração de teste. É o passo que separa um backup de uma cópia de arquivo que ninguém nunca abriu.