02 nov 2026 · infraestrutura, linux · 4 min
Copiar, sincronizar e retomar transferências com rsync
rsync não copia arquivo por arquivo do zero: ele compara origem e destino e transfere só as diferenças. Com --partial ele guarda o que já recebeu e retoma de onde parou. Num teste com arquivo de 96 MB, a transferência foi cortada aos 6,2 MB e concluída na segunda tentativa, com o hash sha256 idêntico ao original. Veja também backup com rsync e chave SSH em vez de senha.
Copiar uma pasta
rsync -a origem/ destino/
A flag -a é o modo arquivo: recursivo, preserva permissões, tempos, links simbólicos e dono quando possível. A barra final importa. origem/ copia o conteúdo para dentro de destino/; origem sem barra cria destino/origem/.
Sincronizar de verdade com –delete
rsync -a --delete origem/ destino/
--delete remove do destino o que não existe mais na origem. É o que transforma uma cópia em sincronização. O risco é inverter origem e destino, então rode o dry-run antes.
Testar antes com –dry-run
rsync -avn --delete origem/ destino/
-n simula a execução e lista o que faria, inclusive exclusões, sem tocar em nada. Saída típica:
deleting extra.txt
./
arquivo.txt
sent 123 bytes received 20 bytes
Se a lista parecer certa, rode o mesmo comando sem o -n.
Retomar com –partial
rsync -a --partial --progress origem/ destino/
Se a transferência for interrompida com Ctrl+C, o arquivo parcial fica no destino. Rodar o mesmo comando de novo completa a partir do ponto em que parou. Para arquivos que crescem (logs), use --append-verify, que confere o trecho já copiado antes de continuar.
No teste, um arquivo de 96 MB foi cortado aos 6,2 MB e concluído na segunda tentativa; o sha256 do destino bateu com o da origem.
Medição da retomada
O arquivo de teste tinha 100.663.296 bytes (96 MiB) de dados aleatórios. A primeira tentativa foi cortada aos 6,2 MiB com limite de banda de 2 MB/s. A segunda tentativa completou a transferência e o sha256 do destino bateu com o da origem: b5d99ebc9e42501f97f61169d4058abe6a89c12032f11a037d9ff3e07bd48e9f. O ganho do --partial aparece quando a origem é remota ou a rede é instável: em vez de recomeçar, rsync aproveita o que já chegou.
Copiar por ssh
rsync -a -e ssh usuario@servidor:/caminho/origem/ ./destino/
rsync -a -e "ssh -p 2222" ./origem/ usuario@servidor:/caminho/destino/
-e define o transporte. Combine com --partial para retomar uma cópia remota interrompida. Para chave específica, use -e "ssh -i ~/.ssh/chave".
Opções que vale conhecer
--exclude='*.tmp'ignora arquivos temporários sem editar a origem.--bwlimit=5000limita a 5 MB/s, útil para não saturar a rede.--info=progress2mostra uma barra única em vez de uma linha por arquivo.--statsimprime totais ao final: bytes enviados, velocidade, arquivos transferidos.-zcomprime durante o transporte; bom para texto, inútil para vídeo ou imagem já compactada.
Como verificar
rsync -avn --delete origem/ destino/
sha256sum origem/arquivo destino/arquivo
O dry-run lista as mudanças sem aplicar. Os hashes batem quando a cópia terminou sem erro.
Se der errado
- Barra final errada:
rsync -a origem destinocriadestino/origem. Correção: useorigem/. --deleteapagou arquivo que você queria: rode o dry-run antes; recupere do backup ou do backup com rsync.Permission deniedpor SSH: chave não autorizada no destino; confira com chave SSH em vez de senha.- Transferência lenta:
--compress(-z) ajuda em texto; em vídeo ou imagem compactada, não.
Comparação rápida
| Ferramenta | Copia só diferenças | Retoma | Remoto |
|---|---|---|---|
| cp | não | não | não |
| scp | não | não | sim (SSH) |
| rsync | sim | sim (--partial) |
sim (-e ssh) |
FAQ
rsync copia arquivos ocultos?
Sim. Com -a, arquivos que começam com ponto entram na cópia.
Preciso de rsync nos dois lados? Para cópia remota, sim: o rsync do destino recebe a conexão e monta o arquivo.
--partial deixa arquivo incompleto no destino?
Até a cópia terminar, sim. Use --partial-dir=.rsync-parcial para esconder o arquivo parcial numa pasta temporária.
rsync criptografa o tráfego?
Quando usado com -e ssh, sim. A cópia local não passa por rede.
rsync funciona entre sistemas de arquivos diferentes? Sim. Ele não depende do sistema de arquivos da origem; basta que ambos os lados consigam ler e escrever normalmente.
Fontes
#!/usr/bin/env bash
# rsync na pratica: copiar, sincronizar e retomar.
# Rode sem argumentos para a demonstracao num diretorio temporario.
set -u
if ! command -v rsync >/dev/null 2>&1; then
echo "rsync nao encontrado; instale o rsync para rodar este roteiro"
exit 0
fi
W=$(mktemp -d)
cd "$W"
echo "=== 1. copia inicial ==="
mkdir -p origem destino
printf 'linha 1\nlinha 2\nlinha 3\n' > origem/arquivo.txt
rsync -a origem/ destino/
echo "destino:"; ls destino
echo "=== 2. sincronizacao com --delete ==="
printf 'linha 1 alterada\nlinha 2\nlinha 3\n' > origem/arquivo.txt
printf 'sobra\n' > destino/extra.txt
rsync -avn --delete origem/ destino/
rsync -a --delete origem/ destino/
echo "apos sync:"; ls destino
echo "=== 3. retomar com --partial ==="
head -c 6291456 /dev/urandom > origem/grande.bin 2>/dev/null || true
if [ -s origem/grande.bin ]; then
timeout 1s rsync -a --partial --progress --bwlimit=2048 origem/grande.bin destino/ 2>/dev/null || true
rsync -a --partial --progress origem/grande.bin destino/ 2>/dev/null || true
cmp origem/grande.bin destino/grande.bin && echo "arquivo completo e identico"
fi
echo "=== 4. receita remota (nao executada) ==="
echo 'rsync -a --partial -e "ssh -i ~/.ssh/chave" usuario@servidor:/dados/ ./local/'
rm -rf "$W"
echo "fim"