Backup offsite com rclone para S3 ou Backblaze B2 no Linux

Configure backup offsite criptografado no Linux usando rclone com Backblaze B2 ou Amazon S3. Inclui agendamento via cron, restore e verificação de integridade.

Servidor Linux com dados importantes precisa de backup offsite — em local fisicamente separado da infraestrutura primária, idealmente em outro provedor pra sobreviver a incidentes regionais ou comprometimento da conta. O rclone resolve isso com criptografia ponta-a-ponta opcional, deduplicação por checksum e suporte nativo a S3, Backblaze B2 e mais de 40 outros backends de storage.

Este tutorial mostra como configurar rclone numa VPS Linux (Ubuntu 22.04/24.04 ou Debian 12) pra copiar diretórios pra Backblaze B2 ou Amazon S3, criptografados com chave que nem o provedor de storage consegue ler. Cobrimos a instalação, criação dos remotes, camada crypt, agendamento via cron, verificação de integridade e procedimento de restore.

Tempo estimado: 30-40 minutos pra primeira configuração, incluindo criação da conta no provedor de storage. Backup inicial varia conforme volume de dados e banda.

Pré-requisitos

O que você precisa antes de começar

VPS Linux com acesso sudo, conexão de saída livre nas portas 443 (HTTPS), pelo menos 100 MB livres em /usr/bin pra binário e cache do rclone, e uma conta ativa em Backblaze B2 ou AWS S3. Os comandos abaixo assumem Ubuntu 22.04+ ou Debian 12, mas funcionam em qualquer distribuição com adaptação do gerenciador de pacotes.

Distribuição testada Ubuntu 22.04 / 24.04
Versão mínima rclone 1.65+
Backends cobertos S3, B2
Armazenamento livre ~100 MB

Tenha em mãos as credenciais do provedor escolhido antes de começar:

  • Backblaze B2: Application Key ID + Application Key (criados em “App Keys” no painel B2, com permissões no bucket alvo)
  • Amazon S3: Access Key ID + Secret Access Key (IAM user com policy permitindo s3:PutObject, s3:GetObject, s3:DeleteObject e s3:ListBucket no bucket)

Instalando o rclone

O rclone é distribuído como binário único — instalar via pacote da distribuição costuma trazer versão antiga (1.53 em Ubuntu 22.04, por exemplo) que tem bugs conhecidos no backend B2. Use o instalador oficial pra pegar a release atual.

01

Baixe e execute o instalador oficial:

curl https://rclone.org/install.sh | sudo bash

O script detecta a arquitetura (amd64, arm64), baixa o binário do GitHub, instala em /usr/bin/rclone e gera a página de manual. Saída final imprime a versão instalada — confirme que está acima de 1.65.

02

Verifique a instalação:

rclone version

Output esperado começa com rclone v1.6x.x seguido pelas linhas de OS, arch e Go version. Se aparecer “command not found”, o /usr/bin não está no PATH do shell atual — abra nova sessão ou execute hash -r.

Configurando o remote no Backblaze B2

O B2 é a escolha padrão pra quem está começando: armazenamento custa cerca de USD 6 por TB/mês e o egress é gratuito até 3x o volume armazenado por mês (suficiente pra restores ocasionais sem custo extra).

03

Crie a Application Key no painel B2 com acesso ao bucket que vai receber os backups. Salve o keyID e a applicationKey — o B2 só mostra a applicationKey uma vez. Crie também o bucket de destino (privado, sem encriptação server-side — vamos criptografar do lado cliente).

04

Inicie o configurador interativo do rclone:

rclone config

Selecione n (new remote), nomeie como b2-raw, escolha o tipo 5 (Backblaze B2). Cole o keyID em “account” e a applicationKey em “key”. Confirme com y quando perguntar se quer aceitar os defaults restantes.

05

Teste a conexão listando os buckets:

rclone lsd b2-raw:

Output deve mostrar os buckets da conta, um por linha, com data de criação. Erro 401 unauthorized significa keyID/applicationKey incorretos ou Application Key revogada no painel.

Configurando o remote no Amazon S3 (alternativa)

Se você prefere S3, o procedimento é equivalente — o crypt configurado mais à frente funciona idêntico sobre qualquer backend.

06

Rode rclone config, escolha n, nomeie como s3-raw, tipo 4 (Amazon S3). Em “provider” selecione AWS. Em “env_auth” deixe false pra colar credenciais manualmente. Cole access_key_id e secret_access_key. Em “region” escolha o region do bucket (ex: us-east-1, sa-east-1). Em “storage_class” deixe vazio pra Standard ou escolha STANDARD_IA pra acesso infrequente (mais barato pra backup raramente lido).

Storage class importa muito pro custo

Pra backup que você restaura raramente, STANDARD_IA custa metade do Standard mas cobra retrieval. Pra backup que nunca é lido a não ser em desastre, GLACIER_DEEP_ARCHIVE custa um décimo mas leva 12-48h pra restaurar. Não use Glacier pra backup diário rotativo — a taxa de early deletion (180 dias) anula a economia.

Adicionando a camada crypt

Esta é a parte crítica: o crypt cifra nomes de arquivo e conteúdo com NaCl Secretbox (XSalsa20+Poly1305) antes de enviar pro backend remoto. Sem a senha do crypt, o provedor de storage vê só blocos opacos.

07

Em rclone config, crie outro remote com n, nomeie como b2-crypt (ou s3-crypt), tipo 13 (crypt). Em “remote” digite b2-raw:nome-do-bucket/backups (substitua pelo seu bucket e caminho). Em “filename_encryption” escolha 1 (standard — esconde nomes). Em “directory_name_encryption” escolha true.

08

Quando perguntar pela senha, escolha g (generate random) — gera senha de 1024 bits forte. Copie e guarde a senha gerada num gerenciador de senhas antes de continuar. Sem essa senha, o backup é irrecuperável mesmo com acesso ao bucket.

Perdeu a senha, perdeu o backup

O crypt é simétrico — não há recuperação. Antes de mover dados pra produção, faça um teste de restore num servidor limpo usando só a senha salva. Salve a senha em pelo menos dois lugares físicos diferentes (gerenciador de senhas pessoal + cofre da empresa).

09

Para a “password2” (salt), também use g pra gerar aleatório. Guarde junto com a senha principal. Confirme com y no resumo, depois q pra sair do configurador.

Rodando o primeiro backup

Com os remotes configurados, o backup é uma chamada rclone copy. Diferente do sync, o copy só adiciona ou atualiza arquivos — nunca apaga no destino.

10

Execute o backup inicial de /var/www e /etc:

rclone copy /var/www b2-crypt:var-www \
  --progress \
  --transfers 4 \
  --checkers 8 \
  --bwlimit 50M

O flag --progress mostra ETA e throughput em tempo real. --transfers 4 define quantos arquivos sobem em paralelo. --bwlimit 50M limita a 50 MB/s pra não saturar a rede do servidor (ajuste pra sua banda).

Primeiro backup pode demorar horas

Em link de 100 Mbit/s, transferir 100 GB leva cerca de 2h30 sem overhead. Use tmux ou screen pra não perder o progresso se a sessão SSH cair. Ou rode com nohup ... & redirecionando saída pra arquivo.

Agendando backups diários via cron

Após o backup inicial, agende execuções incrementais — rclone só transfere arquivos novos ou modificados (checa modtime + size, ou checksum com --checksum).

11

Crie um script wrapper em /usr/local/bin/backup-offsite.sh:

sudo tee /usr/local/bin/backup-offsite.sh > /dev/null <<'EOF'
#!/bin/bash
set -euo pipefail

LOG=/var/log/rclone-backup.log
exec >> "$LOG" 2>&1

echo "=== Backup iniciado em $(date -Iseconds) ==="

rclone copy /var/www b2-crypt:var-www \
  --transfers 4 \
  --checkers 8 \
  --bwlimit 50M \
  --log-level INFO

rclone copy /etc b2-crypt:etc \
  --transfers 2 \
  --log-level INFO

echo "=== Backup concluído em $(date -Iseconds) ==="
EOF

sudo chmod +x /usr/local/bin/backup-offsite.sh

O set -euo pipefail faz o script abortar em qualquer erro. O exec >> redireciona stdout e stderr pro log de uma vez.

12

Adicione entrada no crontab do root pra rodar todo dia às 3h da manhã:

sudo crontab -e

Adicione a linha:

0 3 * * * /usr/local/bin/backup-offsite.sh

Salve e saia. O cron lê o crontab automaticamente — não precisa reiniciar serviço.

Verificando integridade

O rclone check compara checksums entre origem e destino. Pro crypt, ele decifra os hashes do remoto e compara com o local — qualquer corrupção em trânsito ou no storage aparece.

13

Rode a verificação:

rclone check /var/www b2-crypt:var-www --one-way

O flag --one-way só verifica que todo arquivo local existe no remoto — útil porque o crypt pode adicionar metadados que confundem checks bidirecionais. Output 0 differences found significa que todo arquivo bate.

Testando o restore

Backup não testado não é backup. Faça restore parcial num diretório temporário pra confirmar que a chain inteira (cifra → upload → download → decifra) está funcional.

14

Restaure um diretório de teste:

mkdir -p /tmp/restore-test
rclone copy b2-crypt:var-www/site-exemplo /tmp/restore-test --progress

Após o download, compare alguns arquivos com diff ou md5sum contra a origem em /var/www/site-exemplo. Se baterem, a chain está íntegra. Apague /tmp/restore-test depois.

Próximos passos

Backup offsite resolve o caso de perda do servidor, mas é só uma camada — combine com snapshots locais frequentes (LVM, Btrfs ou ZFS) pra restore rápido de erros operacionais. Sugestões pra evoluir:

  • Configure Object Lock no S3 ou Application Key write-only no B2 pra mitigar ransomware
  • Adicione monitoramento dos jobs via webhook (envie status do cron pra um endpoint de healthcheck)
  • Implemente rotação de versões com --backup-dir apontando pra pastas por data
  • Documente a senha do crypt num cofre redundante (gerenciador pessoal + cofre da empresa)

Se você está colocando isso em produção, uma VPS Hostini já vem com banda generosa e snapshots regulares no hipervisor — boa base pra combinar com a camada offsite descrita aqui.

Perguntas frequentes

Vale mais a pena usar S3 ou Backblaze B2 pra backup pequeno?

Pra volumes abaixo de 1 TB com restore esporádico, Backblaze B2 sai bem mais barato — armazenamento custa cerca de um quarto do S3 Standard e o egress é gratuito até 3x o volume armazenado por mês. S3 só compensa se você já tem o ecossistema AWS, precisa de classes de armazenamento específicas (Glacier Deep Archive) ou de integração nativa com outros serviços AWS.

O rclone crypt protege contra ransomware no servidor de origem?

Não diretamente. O crypt criptografa os dados em trânsito e no destino, mas se o servidor de origem for comprometido o atacante pode rodar rclone delete ou sync com pasta vazia e destruir o backup. Mitigação: usar Object Lock no S3 (mode COMPLIANCE) ou Application Keys do B2 restritas a write-only (sem deleteFiles), além de versionamento de bucket.

Posso restaurar um arquivo específico sem baixar tudo?

Sim. O rclone com crypt mantém a estrutura de diretórios (com nomes criptografados, mas navegáveis). Use rclone ls remoto-crypt:caminho/ pra listar e rclone copy remoto-crypt:caminho/arquivo.tar.gz /local/ pra baixar só o que precisa. O crypt descriptografa em stream — não precisa baixar o backup inteiro.

Por que o rclone sync é mais perigoso que o copy?

O sync espelha origem em destino — arquivos que sumiram da origem são apagados do destino. Se o disco do servidor falhar e você rodar sync apontando pra uma pasta vazia, perde tudo no remoto. Pra backup incremental seguro use copy (só adiciona/atualiza) ou sync com --backup-dir apontando pra pasta versionada por data.

Como verifico que o backup não está corrompido sem fazer restore completo?

Use rclone check origem: destino: pra comparar checksums (MD5/SHA1 dependendo do backend) entre arquivos locais e remotos. Pra teste end-to-end periódico, monte o remoto-crypt com rclone mount e abra alguns arquivos aleatórios — se descriptografar e ler sem erro, a chain está íntegra.

O rclone consome muita CPU criptografando antes de subir?

Em servidores modernos com AES-NI a sobrecarga é tipicamente 5-15% durante o upload — o gargalo costuma ser a banda de rede, não o crypt. Em VPS de 1 vCPU com upload acima de 100 Mbit/s pode aparecer saturação; nesse caso ajuste --transfers 2 e --checkers 4 pra reduzir paralelismo.

Tópicos:
Próximos passos Cloud Ryzen com NVMe e proteção DDoS sempre ativa.Coloque em produção numa VPS Hostini →
Esse tutorial foi útil?
Falar no WhatsApp