同じファイルのセットを送信する場合は、rsync
差分のみを送信するため、より適しています。tar
常にすべてを送信します。これは、大量のデータが既に存在する場合のリソースの無駄です。tar + rsync + untar
この場合には、この優位性を失うだけでなく、とに同期フォルダを保つことの利点rsync --delete
。
初めてファイルをコピーし、最初にパケットを送信し、次に送信してからアンパックすることは(rsync
面倒なパイプ入力を受け取らない)面倒でありrsync
、tar
とにかく何もする必要がないので、単にrsyncするよりも常に悪いです。
ヒント: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
一般的なルール、シンプルに保ちます。
更新:
59Mのデモデータを作成しました
mkdir tmp; cd tmp
for i in {1..5000}; do dd if=/dev/urandom of=file$i count=1 bs=10k; done
両方の方法を使用して、リモートサーバーへのファイル転送(同じLANにない)を数回テストしました
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
この場合、デフォルトのmtuが1500で、ファイルのサイズが10kである場合に期待されるrsync + tarを使用しても、ネットワークトラフィックが少ないという利点はありません。rsync + tarはより多くのトラフィックを生成し、2〜3秒間遅くなり、クリーンアップする必要がある2つのガベージファイルを残しました。
同じLAN上の2台のマシンで同じテストを行ったところ、rsync + tarのほうがはるかに良い時間を過ごし、ネットワークトラフィックははるかに少なくなりました。ジャンボフレームの原因と思われます。
たぶん、rsync + tarは、はるかに大きなデータセットでrsyncを行うよりも良いでしょう。しかし、率直に言って、私はそれが面倒の価値があるとは思わない、あなたは荷造りと荷解きのためにそれぞれの側に二重のスペースを必要とします。