当您发送同一组文件时,rsync
因为它只会发送差异,所以更适合。tar
将始终发送所有内容,而当大量数据已经存在时,这将浪费资源。在tar + rsync + untar
失去了这个优势,在这种情况下,以及与保持文件夹同步的优势rsync --delete
。
如果您是第一次复制文件,先打包然后发送,然后再拆包(AFAIK rsync
不接受管道输入)会很麻烦,而且总是比仅同步更糟糕,因为无论如何rsync
都不需要做任何事情tar
。
提示:rsync版本3或更高版本会进行增量递归,这意味着它几乎在计数所有文件之前就开始复制。
提示2:如果您使用rsync
over ssh
,则也可以使用tar+ssh
tar -C /src/dir -jcf - ./ | ssh user@server 'tar -C /dest/dir -jxf -'
要不就 scp
scp -Cr srcdir user@server:destdir
一般规则,请保持简单。
更新:
我已经创建了5900万个演示数据
mkdir tmp; cd tmp
for i in {1..5000}; do dd if=/dev/urandom of=file$i count=1 bs=10k; done
并使用两种方法对文件传输到远程服务器(不在同一局域网中)进行了几次测试
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
同时保持与发送的SSH流量数据包分开的日志
wc -l rsync.log rsync+tar.log
36730 rsync.log
37962 rsync+tar.log
74692 total
在这种情况下,我看不到使用rsync + tar减少网络流量的任何优势,这在默认mtu为1500且文件大小为10k时是可以预期的。rsync + tar产生了更多的流量,速度降低了2-3秒,并留下了两个必须清理的垃圾文件。
我在同一局域网上的两台计算机上进行了相同的测试,而rsync + tar的执行时间要好得多,网络流量要少得多。我认为是巨型帧的原因。
也许rsync + tar比仅在更大的数据集上使用rsync更好。但坦率地说,我不认为这是值得的麻烦,您需要在包装的每一侧留出两倍的空间来进行装箱和拆箱,并且如上所述,还有其他几种选择。