Como fazer backup com restic para Backblaze B2, Wasabi ou Amazon S3: repositório criptografado, agendamento com systemd, retenção e restauração.
Para que serve
O restic é uma ferramenta de backup de linha de comando que criptografa tudo no seu servidor antes de enviar, guarda apenas os blocos que mudaram (deduplicação) e fala direto com armazenamento compatível com S3. É uma boa escolha para mandar para fora do datacenter os arquivos do host Proxmox, de VMs Linux, sites e os dumps de banco gerados pelos outros artigos desta categoria. Este guia mostra como fazer backup com restic: monta um repositório no Backblaze B2, na Wasabi ou no Amazon S3, agenda o backup com systemd e aplica retenção.
Pré-requisitos
- Servidor ou VM com Debian 12/13, Ubuntu 24.04 ou Proxmox VE 8/9, acesso como root.
- Um bucket privado criado no provedor de armazenamento e uma chave de acesso (Access Key/Secret Key, ou Application Key no B2) com permissão apenas nesse bucket.
- O endpoint S3 da região do bucket. No B2 ele aparece nos detalhes do bucket (formato
s3.REGIAO.backblazeb2.com); na Wasabi segue o formatos3.REGIAO.wasabisys.com.
Como configurar o backup com restic passo a passo
-
Instale o restic.
apt update && apt install -y restic restic versionA versão do repositório da distribuição funciona. Se quiser a mais recente (a série 0.19 trouxe compressão zstd mais rápida e índice que carrega mais rápido em repositórios grandes), baixe o binário oficial na página de releases do projeto no GitHub e coloque em
/usr/local/bin. -
Crie o arquivo de senha e o de credenciais. A senha do repositório é a chave da criptografia: sem ela, nada é recuperável.
openssl rand -base64 32 > /root/.restic-senha chmod 600 /root/.restic-senha cat > /root/.restic.env <<'EOF' export AWS_ACCESS_KEY_ID="SUA_ACCESS_KEY" export AWS_SECRET_ACCESS_KEY="SUA_SECRET_KEY" export RESTIC_PASSWORD_FILE="/root/.restic-senha" # Escolha UMA das linhas abaixo: export RESTIC_REPOSITORY="s3:https://s3.us-east-005.backblazeb2.com/meu-bucket/srv01" # export RESTIC_REPOSITORY="s3:https://s3.us-east-1.wasabisys.com/meu-bucket/srv01" # export RESTIC_REPOSITORY="s3:s3.sa-east-1.amazonaws.com/meu-bucket/srv01" EOF chmod 600 /root/.restic.envTroque a região e o nome do bucket pelos seus. No Backblaze, a própria documentação do restic recomenda usar a API compatível com S3 em vez do backend nativo
b2:.Copie o conteúdo de/root/.restic-senhaagora para o cofre de senhas da equipe. Se o servidor for perdido e a senha estava só nele, o backup externo não serve para nada. -
Inicialize o repositório.
source /root/.restic.env restic init -
Crie a lista de exclusões e rode o primeiro backup.
cat > /root/restic-excluir.txt <<'EOF' /proc /sys /dev /run /tmp /var/tmp /var/cache /var/lib/vz/images /var/lib/vz/dump /var/lib/mysql /var/lib/postgresql EOF restic backup /etc /root /home /var/www /srv /var/backups \ --exclude-file=/root/restic-excluir.txt --exclude-caches \ --tag diario --compression autoDiretórios de banco de dados ativos foram excluídos de propósito: copiar os arquivos de um banco em uso gera backup inconsistente. Faça o dump primeiro (veja também os artigos «Backup de MySQL e MariaDB: mariadb-dump, mysqldump, mariadb-backup e XtraBackup» e «Backup de PostgreSQL com pg_dump e pg_basebackup (inclusive incremental no PostgreSQL 17+)») para
/var/backupse deixe o restic levar o dump. Discos de VMs também ficam de fora: para eles use vzdump/PBS (veja também o artigo «Como fazer backup no Proxmox: VMs com vzdump e Proxmox Backup Server»). -
Aplique a retenção. O
forgetmarca quais snapshots manter; o--pruneapaga os dados que ficaram sem uso.restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune -
Agende com systemd. Crie o script
/usr/local/sbin/restic-backup.sh:#!/bin/bash set -euo pipefail source /root/.restic.env restic backup /etc /root /home /var/www /srv /var/backups \ --exclude-file=/root/restic-excluir.txt --exclude-caches --tag diario restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune restic check --read-data-subset=2%chmod 700 /usr/local/sbin/restic-backup.sh cat > /etc/systemd/system/restic-backup.service <<'EOF' [Unit] Description=Backup restic After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/sbin/restic-backup.sh Nice=10 IOSchedulingClass=idle EOF cat > /etc/systemd/system/restic-backup.timer <<'EOF' [Unit] Description=Backup restic diario [Timer] OnCalendar=*-*-* 02:30:00 RandomizedDelaySec=15m Persistent=true [Install] WantedBy=timers.target EOF systemctl daemon-reload systemctl enable --now restic-backup.timerSe os dumps de banco também rodam de madrugada, agende-os para terminar antes das 02:30.
Restaurar arquivos
source /root/.restic.env
restic snapshots
restic ls latest /etc/nginx
restic restore latest --target /root/restauracao --include /etc/nginx
Restaure sempre para um diretório separado e depois copie o que precisar; restaurar direto por cima de / sobrescreve arquivos em uso. Para navegar como se fosse uma pasta, use restic mount /mnt/restic (requer o pacote fuse3).
Como saber se funcionou
systemctl list-timers restic-backup.timermostra a próxima execução;journalctl -u restic-backup.servicemostra o resultado da última.restic snapshotslista um snapshot por dia, com o horário esperado.restic checktermina sem erros. Uma vez por mês, roderestic check --read-data(lê tudo, gera tráfego de download) ou restaure uma pasta inteira e compare comdiff -r.
Problemas comuns
"repository is already locked"
Um backup anterior foi interrompido. Confirme que não há outro restic rodando (pgrep restic) e rode restic unlock.
O espaço no Backblaze B2 não diminui depois do prune
Pela API S3, arquivos apagados no B2 viram versões ocultas e continuam ocupando espaço. Nas configurações do bucket, ajuste as regras de ciclo de vida para manter apenas a última versão.
Cobrança da Wasabi não cai após apagar snapshots
No plano pay-as-you-go a Wasabi cobra no mínimo 90 dias de armazenamento por objeto. Com retenção curta, o prune não reduz a fatura; prefira reter pelo menos 90 dias ou rodar o prune com menos frequência.
Proteção contra ransomware
As credenciais em /root/.restic.env permitem apagar o repositório. Para uma cópia que o servidor não consiga destruir, use um rest-server com --append-only em outro servidor, ou faça um segundo servidor copiar o repositório com restic copy usando credenciais que a produção não conhece.
E o BorgBackup?
O BorgBackup (série 1.4, estável) é igualmente bom em deduplicação e criptografia, mas envia os dados por SSH: o destino precisa ser outro servidor Linux ou um serviço que ofereça Borg por SSH. Ele não fala S3 nativamente. A série 2.0 ainda está em beta e não deve ser usada em produção. Se o seu destino é um bucket S3, fique com o restic; se é outro servidor seu com SSH, os dois atendem.
Perguntas frequentes
O restic criptografa os backups?
Sim. Tudo é criptografado no servidor antes do envio, com a senha do repositório. Sem essa senha, ninguém consegue ler os dados, nem você: guarde-a no cofre de senhas da equipe.
Posso usar o restic com o Backblaze B2?
Sim. Use a API compatível com S3 do B2, como recomenda a documentação do restic, e ajuste o ciclo de vida do bucket para manter apenas a última versão dos arquivos.
Qual a diferença entre restic forget e prune?
O forget só marca quais snapshots manter segundo a retenção; o prune apaga os dados que ficaram sem uso. Use forget --prune para fazer os dois de uma vez.
O restic serve para fazer backup de banco de dados?
Sim, desde que ele leve o dump do banco, e não os arquivos do banco em uso. Gere o dump em /var/backups antes do horário do restic.
Restic ou BorgBackup?
Se o destino é um bucket S3, use o restic. Se é outro servidor seu acessível por SSH, os dois atendem bem.
Leitura complementar
- restic: preparando um repositório (S3, B2, Wasabi, MinIO)
- restic: removendo snapshots e políticas de retenção
- Documentação do BorgBackup
Precisa de ajuda?
Se o backup não estiver rodando ou a restauração falhar, abra um ticket na área do cliente com a saída de journalctl -u restic-backup.service -n 50.
