Como usar o rsync para backups eficientes e incrementais
1. Introdução ao rsync e seus princípios fundamentais
O rsync é uma ferramenta de sincronização de arquivos amplamente utilizada em sistemas Unix-like, conhecida por sua eficiência e flexibilidade em operações de backup. Diferentemente de uma cópia comum, que transfere o arquivo inteiro independentemente das alterações, o rsync utiliza um algoritmo de transferência diferencial que identifica e transmite apenas as partes modificadas dos arquivos. Isso resulta em economia significativa de tempo e largura de banda, especialmente em backups recorrentes.
A principal distinção entre os tipos de backup é crucial para entender o valor do rsync. Um backup completo copia todos os dados a cada execução, consumindo muito espaço e tempo. O backup incremental, por sua vez, copia apenas os arquivos alterados desde o último backup completo ou incremental. O rsync combina o melhor dos dois mundos: ele pode criar backups completos visualmente, mas na prática transfere apenas as diferenças, graças ao seu algoritmo inteligente de comparação de blocos.
2. Instalação e sintaxe básica do rsync
O rsync está disponível nativamente na maioria das distribuições Linux. No macOS, pode ser instalado via Homebrew com brew install rsync. Para Windows, as opções incluem WSL (Windows Subsystem for Linux) ou Cygwin.
A estrutura básica do comando é:
rsync [opções] origem destino
Exemplo de sincronização local:
rsync -av /home/usuario/documentos/ /mnt/backup/documentos/
Para sincronização remota via SSH:
rsync -av /home/usuario/documentos/ usuario@servidor:/backup/documentos/
Note a barra no final do diretório de origem: ela indica que o conteúdo do diretório deve ser copiado, não o diretório em si.
3. Opções essenciais para backups eficientes
As opções mais importantes para backups incluem:
-a(archive): modo recursivo que preserva permissões, timestamps, proprietários, grupos e links simbólicos-v(verbose): exibe detalhes do que está sendo copiado-z(compressão): comprime dados durante a transferência, útil para conexões lentas-P: combina--progress(mostra progresso) e--partial(mantém arquivos parcialmente transferidos)
Exemplo prático:
rsync -avzP /origem/ /destino/
Para remover arquivos que não existem mais na origem e excluir diretórios específicos:
rsync -av --delete --exclude='temp/' --exclude='*.log' /origem/ /destino/
A opção --delete é particularmente útil para espelhar diretórios, mas deve ser usada com cautela para evitar perda acidental de dados.
4. Criando backups incrementais com rsync
O verdadeiro poder do rsync para backups incrementais está na opção --link-dest. Esta opção permite criar backups completos visualmente, mas usando hard links para arquivos inalterados, economizando espaço em disco.
Exemplo prático de rotina incremental:
rsync -av --link-dest=/backup/anterior/ /origem/ /backup/$(date +%Y-%m-%d)/
Este comando cria um diretório com a data atual contendo todos os arquivos. Os arquivos inalterados desde o backup anterior são representados por hard links, ocupando espaço mínimo. Apenas os arquivos modificados ou novos consomem espaço adicional.
Para implementar uma rotação automática:
#!/bin/bash
DATA=$(date +%Y-%m-%d)
ULTIMO=$(ls -d /backup/*/ | tail -1)
if [ -z "$ULTIMO" ]; then
rsync -av /origem/ /backup/$DATA/
else
rsync -av --link-dest=$ULTIMO /origem/ /backup/$DATA/
fi
5. Estratégias de automação e scripts de backup
Um script completo para backup incremental diário com rotação de versões pode ser:
#!/bin/bash
BACKUP_DIR="/backup"
ORIGEM="/dados_importantes"
DATA=$(date +%Y-%m-%d)
LOG="/var/log/backup_$DATA.log"
# Encontra o último backup
ULTIMO=$(ls -d $BACKUP_DIR/*/ 2>/dev/null | tail -1)
echo "Iniciando backup em $DATA" >> $LOG
if [ -z "$ULTIMO" ]; then
# Primeiro backup
rsync -avz --delete $ORIGEM/ $BACKUP_DIR/$DATA/ >> $LOG 2>&1
else
# Backup incremental
rsync -avz --delete --link-dest=$ULTIMO $ORIGEM/ $BACKUP_DIR/$DATA/ >> $LOG 2>&1
fi
# Remove backups com mais de 30 dias
find $BACKUP_DIR -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
echo "Backup concluído em $(date)" >> $LOG
Para automatizar com cron no Linux, adicione ao crontab:
0 2 * * * /usr/local/bin/backup_script.sh
Isso executa o backup diariamente às 2h da manhã.
6. Backup remoto com rsync e segurança
Para backups remotos seguros, utilize SSH com autenticação por chave pública:
# Gerar chave SSH (se ainda não tiver)
ssh-keygen -t rsa -b 4096
# Copiar chave pública para o servidor remoto
ssh-copy-id usuario@servidor-remoto.com
# Backup remoto
rsync -avz -e ssh /origem/ usuario@servidor-remoto.com:/backup/
Para ambientes customizados, use --rsh e --rsync-path:
rsync -avz --rsh='ssh -p 2222' --rsync-path='/usr/local/bin/rsync' /origem/ usuario@servidor:/destino/
A criptografia SSH protege os dados em trânsito. Para proteção em repouso, considere criptografar o diretório de backup com ferramentas como encfs ou LUKS.
7. Boas práticas e resolução de problemas comuns
Verificação de integridade:
# Simulação sem alterar nada
rsync -av --dry-run /origem/ /destino/
# Verificação com checksum (mais lenta, mas precisa)
rsync -avc /origem/ /destino/
Lidando com caminhos com espaços:
rsync -av "/pasta com espacos/" "/destino/com espacos/"
Erros comuns e soluções:
- Falha de conexão SSH: Verifique se o serviço SSH está ativo e as portas corretas
- Falta de espaço em disco: Monitore o uso com
df -hantes de backups grandes - Permissões negadas: Use
sudoou ajuste permissões nos diretórios de origem/destino - Conflitos de versão: No macOS, o rsync padrão é antigo; instale a versão atualizada via Homebrew
Para arquivos especiais como dispositivos e FIFOs, use --specials e --devices com cuidado, pois podem exigir privilégios de root.
Referências
- Documentação oficial do rsync — Página oficial com manual completo, exemplos e notas de versão
- Guia prático do rsync no Linux — Tutorial da DigitalOcean cobrindo sintaxe básica e casos de uso comuns
- Backups incrementais com rsync e hard links — Artigo detalhado sobre a técnica de backups incrementais com --link-dest
- Automação de backups com rsync e cron — Guia passo a passo para criar scripts de backup automatizados no Linux
- Segurança em backups remotos com rsync e SSH — Exemplos avançados de uso do rsync com SSH, incluindo autenticação por chave pública