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 formato s3.REGIAO.wasabisys.com.

Como configurar o backup com restic passo a passo

  1. Instale o restic.

    apt update && apt install -y restic
    restic version

    A 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.

  2. 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.env

    Troque 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-senha agora 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.
  3. Inicialize o repositório.

    source /root/.restic.env
    restic init
  4. 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 auto

    Diretó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/backups e 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»).

  5. Aplique a retenção. O forget marca quais snapshots manter; o --prune apaga os dados que ficaram sem uso.

    restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
  6. 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.timer

    Se 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.timer mostra a próxima execução; journalctl -u restic-backup.service mostra o resultado da última.
  • restic snapshots lista um snapshot por dia, com o horário esperado.
  • restic check termina sem erros. Uma vez por mês, rode restic check --read-data (lê tudo, gera tráfego de download) ou restaure uma pasta inteira e compare com diff -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

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.

Esta resposta lhe foi útil? 1 Usuários acharam útil (1 Votos)

Leia também