Backup e recuperação: rsync, tar, Bacula e Restic
1. Introdução aos Conceitos de Backup e Recuperação
A perda de dados pode ocorrer por falhas de hardware, erros humanos, ataques cibernéticos ou desastres naturais. Uma estratégia robusta de backup é essencial para garantir a continuidade das operações. Dois indicadores críticos norteiam essa estratégia: o RPO (Recovery Point Objective), que define a quantidade máxima de dados que se pode perder (intervalo entre backups), e o RTO (Recovery Time Objective), que estabelece o tempo máximo aceitável para restaurar os sistemas.
Os backups classificam-se em três tipos principais:
- Completo: cópia integral de todos os dados.
- Incremental: copia apenas os dados alterados desde o último backup (completo ou incremental).
- Diferencial: copia os dados alterados desde o último backup completo.
Quanto ao armazenamento, há trade-offs importantes: armazenamento local oferece rapidez, mas vulnerabilidade a desastres físicos; armazenamento remoto (outro datacenter) equilibra custo e segurança; nuvem pública proporciona escalabilidade, mas depende de conectividade e pode gerar custos de egresso. A escolha ideal combina múltiplos destinos seguindo a regra 3-2-1 (três cópias, dois meios diferentes, uma offsite).
2. Backup com rsync: Sincronização Eficiente e Remota
O rsync é uma ferramenta de sincronização que copia apenas as diferenças entre origem e destino, reduzindo drasticamente o tráfego de rede e o tempo de execução.
Sintaxe básica com SSH:
rsync -avz --delete /origem/ usuario@servidor:/destino/
Onde:
- -a: modo archive (preserva permissões, timestamps, etc.)
- -v: verbose
- -z: compressão durante a transferência
- --delete: remove arquivos no destino que não existem mais na origem
Backup incremental com --link-dest:
rsync -avz --link-dest=/backups/completo/ /dados/ /backups/incremental-$(date +%Y%m%d)/
Esse comando cria um backup incremental usando hard links para arquivos inalterados, economizando espaço em disco. Para excluir diretórios específicos, use --exclude:
rsync -avz --exclude='*.log' --exclude='/cache/' /dados/ /backup/
Automação com cron:
# /etc/cron.d/backup-rsync
0 2 * * * root rsync -avz --delete /dados/ servidor:/backup/diario/ >> /var/log/rsync.log 2>&1
0 3 * * 0 root rsync -avz --link-dest=/backup/semanal/ /dados/ /backup/semanal-$(date +%Y%m%d)/
3. Backup com tar: Arquivamento e Compressão Tradicionais
O tar (Tape ARchive) é ideal para criar arquivos compactados e portáteis, preservando metadados do sistema de arquivos.
Criação de backups compactados:
tar -czf backup-completo-$(date +%Y%m%d).tar.gz /pasta/importante/
tar -cjf backup-completo.tar.bz2 /pasta/importante/
tar -cJf backup-completo.tar.xz /pasta/importante/
-c: cria novo arquivo-z: compressão gzip-j: compressão bzip2-J: compressão xz (melhor taxa, mas mais lenta)
Backup diferencial com --newer:
tar -czf backup-diferencial-$(date +%Y%m%d).tar.gz --newer=backup-completo-$(date +%Y%m%d).tar.gz /pasta/
Extração seletiva e preservação de permissões:
tar -xzf backup.tar.gz --directory=/restauracao/ --wildcards '*/documentos/*.pdf'
tar -xpf backup.tar.gz -C /destino/ # -p preserva permissões
Pipeline com SSH e criptografia:
tar czf - /dados/ | openssl enc -aes-256-cbc -salt -pass pass:minhasenha > backup-criptografado.enc
Para restaurar:
openssl enc -d -aes-256-cbc -pass pass:minhasenha -in backup-criptografado.enc | tar xzf - -C /restauracao/
4. Bacula: Solução Empresarial Cliente-Servidor
O Bacula é um sistema de backup corporativo com arquitetura cliente-servidor modular:
- Director: orquestra jobs, schedules e catálogo.
- Storage Daemon (SD): gerencia dispositivos de armazenamento (fitas, discos).
- File Daemon (FD): agente instalado nos clientes.
- Console: interface de administração (CLI, GUI, BWeb).
Configuração básica de um job de backup (exemplo no Director):
Job {
Name = "Backup-WebServer"
Type = Backup
Level = Incremental
Client = web01-fd
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Storage = FileStorage
Pool = Default
Messages = Standard
}
Schedule {
Name = "WeeklyCycle"
Run = Level=Full 1st sun at 23:00
Run = Level=Differential 2nd-5th sun at 23:00
Run = Level=Incremental mon-sat at 23:00
}
Recuperação interativa via console:
bconsole
* restore client=web01-fd fileset="Full Set" where=/tmp/restore/
* restore all
* restore file=/var/www/html/index.html
O Bacula oferece recursos avançados como verificação de integridade pós-backup, suporte a bancos de dados (MySQL, PostgreSQL) via scripts de pré/pós-job, e retenção baseada em pools com rotação automática.
5. Restic: Backup Moderno com Deduplicação e Criptografia
O Restic é uma ferramenta moderna que combina deduplicação, criptografia nativa e suporte a múltiplos backends (local, SFTP, S3, REST, Backblaze B2).
Inicialização de repositório:
restic init --repo /mnt/backup/restic-repo
restic init --repo s3:s3.amazonaws.com/meu-bucket/restic
restic init --repo sftp:usuario@servidor:/backup/restic
Criação de snapshots (backup incremental automático):
restic backup /dados/ --repo /mnt/backup/restic-repo
restic backup /dados/ --repo s3:... --exclude='*.tmp' --exclude='/dados/cache/'
O Restic detecta automaticamente arquivos inalterados via conteúdo (hash) e nome, realizando apenas deduplicação real.
Restauração e gerenciamento de snapshots:
# Listar snapshots
restic snapshots --repo /mnt/backup/restic-repo
# Restaurar snapshot específico
restic restore latest --target /restauracao/ --repo /mnt/backup/restic-repo
# Restaurar arquivo específico
restic restore abc123 --target /tmp/ --include /dados/importante.pdf --repo /mnt/backup/restic-repo
# Política de retenção
restic forget --keep-last 7 --keep-daily 30 --keep-weekly 12 --keep-monthly 12 --prune
O comando forget remove snapshots antigos seguindo políticas configuráveis, e prune libera espaço removendo dados não referenciados.
6. Comparação e Cenários de Uso
rsync vs. tar:
- Use rsync para sincronização contínua entre servidores, backups remotos frequentes e replicação de diretórios.
- Use tar para arquivamento compactado, backups completos para armazenamento de longa duração (fitas, nuvem fria) e transferência de dados com criptografia integrada.
Bacula vs. Restic:
- Bacula é ideal para ambientes corporativos com centenas de servidores, requisitos de catálogo centralizado e políticas complexas de retenção e verificação.
- Restic é mais leve, adequado para equipes pequenas, desenvolvedores e ambientes em nuvem, com foco em simplicidade e segurança.
Combinação de ferramentas:
# rsync + Bacula: Bacula faz backup do repositório rsync
rsync -avz --delete /dados/ /backup-local/rsync/
# Job Bacula: FileSet = /backup-local/rsync/
7. Boas Práticas e Automação de Rotinas
Verificação de integridade:
- Teste de restauração mensal: restic restore latest --target /tmp/teste-restore/ ou bconsole restore ... where=/tmp/teste/
- Script de verificação de checksums: find /backup/ -type f -exec sha256sum {} \; > /var/log/backup-checksums.txt
Logs e notificações:
# systemd service para backup com rsync
[Unit]
Description=Backup diário com rsync
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup-rsync.sh
StandardOutput=journal
StandardError=journal
# Script de notificação por e-mail
#!/bin/bash
if [ $? -eq 0 ]; then
echo "Backup concluído com sucesso em $(date)" | mail -s "Backup OK" admin@exemplo.com
else
echo "Falha no backup em $(date)" | mail -s "FALHA: Backup" admin@exemplo.com
fi
Estratégias de retenção:
- Rotação local com logrotate para logs de backup.
- Limpeza automática via cron: restic forget --keep-daily 7 --keep-weekly 4 --prune executado semanalmente.
- Para Bacula, configurar pools com retenção automática: Pool { Retention = 30 days }.
Referências
- Documentação oficial do rsync — Manual completo com opções, exemplos e boas práticas de sincronização remota.
- GNU tar manual — Referência completa para criação, extração e compressão de arquivos tar.
- Documentação oficial do Bacula — Guia de instalação, configuração de jobs, pools e recuperação.
- Documentação oficial do Restic — Tutorial completo sobre inicialização de repositórios, snapshots e políticas de retenção.
- Artigo técnico: Comparação de ferramentas de backup open source — Análise comparativa de rsync, tar, Bacula, Restic e outras ferramentas.
- Tutorial: Backup automatizado com rsync e cron — Guia prático para automação de backups usando rsync e agendamento cron.
- Guia de recuperação de desastres com Bacula — Artigo da Linux Journal sobre configuração avançada e recuperação com Bacula.