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
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.
Ubuntu 22.04 / 24.04 1.65+ S3, B2 ~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.
Baixe e execute o instalador oficial:
curl https://rclone.org/install.sh | sudo bashO 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.
Verifique a instalação:
rclone versionOutput 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).
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).
Inicie o configurador interativo do rclone:
rclone configSelecione 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.
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.
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).
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.
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.
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.
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).
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.
Execute o backup inicial de /var/www e /etc:
rclone copy /var/www b2-crypt:var-www \
--progress \
--transfers 4 \
--checkers 8 \
--bwlimit 50MO 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).
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).
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.shO set -euo pipefail faz o script abortar em qualquer erro. O exec >> redireciona stdout e stderr pro log de uma vez.
Adicione entrada no crontab do root pra rodar todo dia às 3h da manhã:
sudo crontab -eAdicione a linha:
0 3 * * * /usr/local/bin/backup-offsite.shSalve 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.
Rode a verificação:
rclone check /var/www b2-crypt:var-www --one-wayO 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.
Restaure um diretório de teste:
mkdir -p /tmp/restore-test
rclone copy b2-crypt:var-www/site-exemplo /tmp/restore-test --progressApó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-dirapontando 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.