Como usar rsync para sincronizar arquivos entre servidores
1. Introdução ao rsync e seus fundamentos
O rsync (remote synchronization) é uma ferramenta de código aberto amplamente utilizada para transferir e sincronizar arquivos entre diretórios locais e remotos. Desenvolvido originalmente por Andrew Tridgell e Paul Mackerras, tornou-se o padrão de fato para sincronização eficiente em ambientes Unix/Linux.
Seu principal diferencial é o algoritmo delta: em vez de transferir arquivos inteiros, o rsync divide os arquivos em blocos, calcula checksums e transfere apenas as diferenças. Isso reduz drasticamente o tráfego de rede e o tempo de operação, especialmente em arquivos grandes com pequenas alterações.
Os casos de uso mais comuns incluem:
- Backups incrementais de servidores de produção
- Migrações entre datacenters ou provedores de nuvem
- Deploy de aplicações web e atualizações de código
- Replicação de logs e dados entre clusters
2. Instalação e configuração básica do rsync
O rsync está disponível nos repositórios padrão da maioria das distribuições Linux. Para instalar:
# Debian/Ubuntu
sudo apt update && sudo apt install rsync
# RHEL/CentOS/Fedora
sudo yum install rsync # ou sudo dnf install rsync
# Verificar versão
rsync --version
O rsync depende do SSH para comunicação remota segura. Configure chaves SSH para autenticação sem senha:
# Gerar par de chaves (se ainda não existir)
ssh-keygen -t ed25519 -f ~/.ssh/servidor_rsync
# Copiar chave pública para o servidor remoto
ssh-copy-id -i ~/.ssh/servidor_rsync.pub usuario@servidor-remoto.com
3. Sintaxe essencial e modos de operação
O rsync opera em três modos principais:
Modo local: sincroniza diretórios na mesma máquina.
rsync -av /origem/ /destino/
Modo remoto via SSH: sincroniza com servidor remoto usando shell seguro.
rsync -avz usuario@servidor-remoto.com:/pasta/remota/ ./pasta-local/
Modo daemon: utiliza o protocolo rsync nativo na porta 873 (dois pontos duplos).
rsync -av usuario@servidor::modulo /destino/
A diferença entre dois pontos simples (:) e duplos (::) é fundamental:
- : usa SSH como transporte (recomendado para segurança)
- :: usa o daemon rsync (mais rápido, mas requer configuração adicional)
4. Flags e opções fundamentais para sincronização
As opções mais importantes para sincronização eficiente:
# Sincronização completa com compressão e progresso
rsync -avz --progress /origem/ /destino/
# Sincronização com exclusão de arquivos no destino
rsync -avz --delete /origem/ /destino/
# Simular operação sem executar (dry-run)
rsync -avz --dry-run /origem/ /destino/
# Limitar largura de banda (100 KB/s)
rsync -avz --bwlimit=100 /origem/ /destino/
Explicação das flags:
- -a (archive): modo recursivo que preserva permissões, timestamps, proprietários, grupos e links simbólicos
- -v (verbose): exibe detalhes da transferência
- -z (compressão): comprime dados durante a transferência
- --delete: remove arquivos no destino que não existem na origem
- --dry-run: simula a operação para verificar o que será alterado
5. Sincronização incremental e controle de tráfego
O rsync detecta automaticamente arquivos alterados comparando timestamps e tamanhos. Para forçar verificação por checksum (mais preciso, porém mais lento):
rsync -avzc --checksum /origem/ /destino/
Para excluir arquivos ou diretórios específicos:
rsync -avz --exclude='*.log' --exclude='cache/' /origem/ /destino/
Para incluir apenas padrões específicos:
rsync -avz --include='*.pdf' --include='*/' --exclude='*' /origem/ /destino/
6. Estratégias avançadas de backup e deploy
Backups rotativos com hard links (snapshots eficientes):
#!/bin/bash
DATA=$(date +%Y-%m-%d)
LINK_DEST="/backups/anterior"
DEST="/backups/$DATA"
rsync -avz --link-dest=$LINK_DEST /dados/ $DEST/
Este comando cria um backup completo, mas arquivos inalterados são armazenados como hard links, economizando espaço em disco.
Sincronização bidirecional controlada:
# Atualizar apenas arquivos mais recentes na origem
rsync -avu /origem/ /destino/
# Ignorar arquivos que já existem no destino
rsync -av --ignore-existing /origem/ /destino/
Preservar permissões e ACLs em sistemas de arquivos avançados:
rsync -avAX /origem/ /destino/ # Preserva ACLs e atributos estendidos
7. Automação e monitoramento de sincronizações
Crie scripts shell para sincronizações recorrentes. Exemplo de script completo:
#!/bin/bash
# Script: sync_backup.sh
ORIGEM="/var/www/html"
DESTINO="usuario@backup-server.com:/backups/site"
LOG="/var/log/rsync_backup.log"
EMAIL="admin@exemplo.com"
rsync -avz --delete --bwlimit=500 $ORIGEM $DESTINO > $LOG 2>&1
if [ $? -eq 0 ]; then
echo "Sincronização concluída com sucesso em $(date)" >> $LOG
else
echo "ERRO na sincronização em $(date)" >> $LOG
mail -s "Falha no rsync" $EMAIL < $LOG
fi
Agende com cron (execução diária às 2h):
0 2 * * * /home/admin/sync_backup.sh
Para monitoramento via systemd timer:
# /etc/systemd/system/rsync-backup.service
[Unit]
Description=Rsync Backup Service
[Service]
Type=oneshot
ExecStart=/home/admin/sync_backup.sh
# /etc/systemd/system/rsync-backup.timer
[Unit]
Description=Run rsync backup daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
8. Segurança, boas práticas e solução de problemas
Restrições de segurança recomendadas:
# No servidor remoto, crie um usuário dedicado
sudo useradd -m -s /bin/bash rsyncuser
# Restrinja comandos SSH no arquivo ~/.ssh/authorized_keys
command="rsync --server --sender -vlogDtprze.iLsf . /caminho/permitido",no-port-forwarding,no-X11-forwarding ssh-ed25519 AAA... chave-publica
Controle de permissões durante sincronização:
# Forçar permissões específicas no destino
rsync -avz --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r /origem/ /destino/
# Alterar proprietário (requer root)
rsync -avz --chown=www-data:www-data /origem/ /destino/
Solução de problemas comuns:
| Problema | Causa provável | Solução |
|---|---|---|
Permission denied (publickey) |
Chave SSH não autorizada | Verificar authorized_keys |
rsync: failed to set permissions |
Usuário sem privilégios | Usar --no-perms ou executar como root |
file has vanished |
Arquivo removido durante sincronização | Ignorar com --ignore-errors |
| Conexão lenta | Largura de banda insuficiente | Usar --bwlimit e -z compressão |
Referências
- Documentação Oficial do rsync — Manual completo, FAQ e guias de uso da ferramenta mantida pelo projeto Samba
- Guia Prático do rsync no Linux (DigitalOcean) — Tutorial passo a passo com exemplos reais de sincronização remota
- rsync Man Page — Página de manual completa com todas as opções e flags disponíveis
- Backup Estratégico com rsync (TecMint) — 20 exemplos práticos de comandos rsync para backup e sincronização
- Automação de Backups com rsync e cron (Linuxize) — Tutorial sobre scripts de automação e agendamento de sincronizações
- Segurança em Sincronizações rsync (Cyberciti) — Guia de boas práticas para restringir acesso e proteger transferências
- rsync e Hard Links para Snapshots (ArchWiki) — Documentação avançada sobre backups incrementais com hard links