Esta receita funcionou muito bem para mim:
1. Copiando o primeiro grupo de arquivos, exemplo:
tar c dir/* |gzip - | ssh user@host 'cd /dir/ && tar xz'
No gzip você pode ter diferentes níveis de compressão, onde -1 indica o método de compactação mais rápido (menos compactação) e -9 ou --best indica o método de compactação mais lento (melhor compactação). O nível de compressão padrão é -6 (isto é, inclinado para alta compressão em detrimento da velocidade). - gzip man page.
2. Usando o daemon do rsync
Após os dados terem sido copiados, o trabalho do rsync é mais fácil e usando o daemon do rsync (supondo que você esteja em um ambiente controlado, já que os dados não são criptografados) o desempenho geral é de longe melhor.
Como tive que lidar com muitos arquivos pequenos, desativei a compactação rsync, os processos ficaram ~ 40% mais rápidos sem compactação.
3. Fazendo um cronjob a cada x horas para ter uma versão sempre atualizada no servidor remoto.
0 */03 * * * flock -n /Any_Dir/rsync.lock -c "nice -n 19 rsync --password-file=/rsync.passwd --delete-during -ra /source_dir/ user@rsync_server::ModuleName > /var/log rsync_cgp.log" 2>&1
No meu exemplo, inicio um processo de rsync a cada 3 horas, usando flock para criar um arquivo de bloqueio e cuido para que nenhum segundo job de rsync seja iniciado se o primeiro não for concluído. Além disso, desde que eu não quero martelar o servidor eu modifiquei a prioridade de agendamento do rsync para 19 -final favorável. Por fim, eu redireciono a saída rsync sobrescrevendo o arquivo de log (para mantê-lo em tamanho pequeno). Cuidado : o uso de -v em rsync pode levar a um arquivo de log enorme.
Toda duração do processo de rsync leva de ~ 16 a 30 minutos, dependendo da carga do servidor.