Quando você envia o mesmo conjunto de arquivos, rsync
é mais adequado porque envia 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 sincronizadas rsync --delete
.
Se você copiar os arquivos pela primeira vez, primeiro empacotando, enviando e enviando, a descompactação (o AFAIK rsync
não aceita entrada canalizada) é complicada e sempre pior do que apenas sincronizar, porque rsync
não precisará executar mais nenhuma tarefa tar
.
Dica: o rsync versão 3 ou posterior realiza recursão incremental, o que significa que ele começa a copiar quase imediatamente antes de contar todos os arquivos.
Dica 2: se você usar rsync
mais ssh
, também poderá usartar+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-o simples.
ATUALIZAR:
Criei dados de demonstração de 59 milhões
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 na mesma LAN), usando os dois 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
mantendo registros 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, o que é esperado quando o mtu padrão é 1500 e enquanto os arquivos têm tamanho de 10k. O rsync + tar gerou mais tráfego, ficou mais lento por 2-3 segundos e deixou dois arquivos de lixo que precisavam ser limpos.
Fiz os mesmos testes em duas máquinas na mesma LAN e o rsync + tar fez tempos muito melhores e muito menos tráfego de rede. Eu assumo a causa dos quadros jumbo.
Talvez o rsync + tar seja melhor do que apenas o rsync em um conjunto de dados muito maior. Mas, francamente, não acho que valha a pena, você precisa de espaço duplo em cada lado para embalar e desembalar, e há algumas outras opções, como eu já mencionei acima.