Conteúdos

Rsync: cópias rápidas e inteligentes entre diretórios

Copiar uma pasta inteira parece simples até ela conter milhares de arquivos. Repetir a mesma cópia depois também pode desperdiçar tempo, porque a maior parte dos arquivos já está igual no destino.

O rsync resolve esse problema comparando origem e destino e transferindo apenas o que precisa ser atualizado. Ele se tornou uma ferramenta essencial para meus backups, cópias entre máquinas e publicações de projetos.

O que é o rsync

O rsync é um utilitário de sincronização de arquivos para sistemas Unix e Linux. Ele preserva atributos, verifica diferenças e evita reenviar conteúdo que já está atualizado.

Uma cópia local básica pode ser feita assim:

rsync -avh origem/ destino/

As opções significam, de forma resumida, modo arquivo, saída detalhada e tamanhos legíveis. A barra no final de origem/ também é importante: ela indica que o conteúdo da pasta será copiado, e não necessariamente a pasta como um diretório dentro do destino.

Copiando para um servidor

Como o rsync pode usar SSH como transporte, consigo copiar arquivos para uma máquina remota:

rsync -avh --progress \
  projeto/ \
  usuario@servidor:/srv/projeto/

O primeiro envio pode levar tempo. Nas execuções seguintes, somente arquivos novos ou alterados serão transferidos. Essa diferença faz muita diferença quando trabalho com diretórios grandes ou conexões mais lentas.

Para trazer dados do servidor para o computador local, inverto a ordem:

rsync -avh --progress \
  usuario@servidor:/srv/backup/ \
  ./backup/

Simulando antes de alterar

Antes de uma operação importante, executo com --dry-run:

rsync -avhn --delete origem/ destino/

O rsync mostra o que faria sem alterar os arquivos. Essa etapa é especialmente importante quando uso --delete, uma opção que remove no destino arquivos que não existem mais na origem.

O --delete pode ser útil para manter um espelho, mas não deve ser colocado em um comando sem entender suas consequências. Um backup que apaga imediatamente todas as exclusões da origem pode não proteger contra remoções acidentais.

Preservando o que importa

As opções de arquivo preservam permissões, datas e outros atributos importantes:

rsync -aHAX --info=progress2 origem/ destino/

Nem todo destino suporta os mesmos atributos. Em uma cópia entre sistemas diferentes, escolho as opções compatíveis com o filesystem e com as permissões disponíveis.

Também posso excluir caches, ambientes virtuais e arquivos temporários:

rsync -avh \
  --exclude='.cache/' \
  --exclude='.venv/' \
  projeto/ usuario@servidor:/srv/projeto/

Excluir o que pode ser recriado reduz o volume transferido e deixa a cópia mais fácil de verificar.

Backups e publicações

Uso rsync em dois tipos de tarefa. No backup, ele mantém uma cópia atualizada de diretórios importantes. Na publicação, envia o projeto para o servidor sem precisar transferir tudo a cada alteração.

Em ambos os casos, a ferramenta é simples o bastante para usar manualmente e previsível o bastante para colocar em scripts. Quando automatizo, registro logs, defino caminhos absolutos e valido o resultado.

O rsync não transforma automaticamente uma cópia em backup completo. Ainda preciso pensar em versões anteriores, retenção, armazenamento independente e restauração. Uma sincronização que reflete todas as alterações pode reproduzir um erro em todos os destinos.

Verificando o resultado

Depois da transferência, verifico a saída do comando e comparo os diretórios quando o conteúdo for importante. O --dry-run também ajuda a confirmar se uma segunda execução não encontra alterações inesperadas.

Para cópias muito importantes, posso usar verificações por checksum, lembrando que elas exigem ler o conteúdo dos arquivos e podem consumir mais tempo:

rsync -avhc origem/ destino/

Escolho a profundidade da verificação conforme o tamanho dos dados e o risco da operação.

Minha conclusão

O rsync simplifica uma tarefa que aparece em quase todo ambiente Linux: manter duas cópias alinhadas. Ele economiza banda, reduz o tempo das execuções seguintes e se integra naturalmente ao SSH.

A ferramenta não substitui uma estratégia de backup, mas forma uma excelente base para cópias locais, transferências remotas e publicações. Com --dry-run, exclusões bem definidas e cuidado com --delete, consigo usar o rsync com segurança no dia a dia.