Quando você envia o mesmo conjunto de arquivos, rsync
é mais adequado porque enviará apenas diferenças. tar
sempre envia tudo e isso é um desperdício de recursos quando muitos dados já estão lá. O tar + rsync + untar
perde essa vantagem nesse caso, bem como a vantagem de manter as pastas em sincronia com rsync --delete
.
Se você copiar os arquivos pela primeira vez, primeiro empacotando, enviando e descompactando (AFAIK rsync
não recebe entrada canalizada) é incômodo e sempre pior do que apenas rsyncing, porque rsync
não terá para fazer qualquer tarefa mais que tar
de qualquer maneira.
Dica: o rsync versão 3 ou posterior faz uma recursão incremental, o que significa que ele começa a copiar quase imediatamente antes de contar todos os arquivos.
Dica 2: se você usa rsync
over ssh
, você também pode usar tar+ssh
tar -C /src/dir -jcf - ./ | ssh user@server 'tar -C /dest/dir -jxf -'
ou apenas scp
scp -Cr srcdir user@server:destdir
Regra geral, mantenha-a simples.
ATUALIZAÇÃO:
Criei dados de demonstração de 59M
mkdir tmp; cd tmp
for i in {1..5000}; do dd if=/dev/urandom of=file$i count=1 bs=10k; done
e testou várias vezes a transferência de arquivos para um servidor remoto (não no mesmo lan), usando ambos os métodos
time rsync -r tmp server:tmp2
real 0m11.520s
user 0m0.940s
sys 0m0.472s
time (tar cf demo.tar tmp; rsync demo.tar server: ; ssh server 'tar xf demo.tar; rm demo.tar'; rm demo.tar)
real 0m15.026s
user 0m0.944s
sys 0m0.700s
enquanto mantém logs separados dos pacotes de tráfego ssh enviados
wc -l rsync.log rsync+tar.log
36730 rsync.log
37962 rsync+tar.log
74692 total
Nesse caso, não vejo nenhuma vantagem em menos tráfego de rede usando o rsync + tar, que é esperado quando o mtu padrão é 1500 e os arquivos têm tamanho de 10k. O rsync + tar gerava mais tráfego, ficava mais lento por 2-3 segundos e deixava dois arquivos inúteis que precisavam ser limpos.
Eu fiz os mesmos testes em duas máquinas na mesma lan, e o rsync + tar teve tempos muito melhores e muito menos tráfego de rede. Eu assumo a causa de quadros gigantes.
Talvez o rsync + tar seja melhor que apenas o rsync em um conjunto de dados muito maior. Mas francamente eu não acho que valha a pena, você precisa de espaço duplo em cada lado para empacotar e desfazer as malas, e há algumas outras opções, como já mencionei acima.