Administração de Sistemas

Backup e recuperação: rsync, tar, Bacula e Restic

• 7 min de leitura

Backup e recuperação: rsync, tar, Bacula e Restic
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.

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

💬 Comentários
Mais em Administração de Sistemas