| |

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.

Gostou? Compartilhe.

Posts Similares

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *