私はしばしば、10K - 100Kファイルを含むフォルダをリモートコンピュータ(キャンパス内の同じネットワーク内)に送信することがあります。
信頼できる理由があるかどうかを知りたいです。
tar + rsync + untar
または単に
tar (from src to dest) + untar
実際には、以下よりも良いかもしれません。
rsync
ファイルを転送するとき最初。
圧縮がある場合と圧縮がない場合の2つのケースで、上記の問題を解決する答えに興味があります。
修正する
私はちょうど10,000個の小さなファイル(合計サイズ= 50 MB)を動かすいくつかの実験を実行しましたが、tar+rsync+untar
直接実行するよりも継続的に高速です(両方とも非圧縮)。rsync
ベストアンサー1
違いのみを送信するため、同じファイルセットを送信する場合にrsync
適しています。tar
すべてが常に送信されるため、すでに多くのデータがある場合はリソースが無駄になります。この場合、tar + rsync + untar
フォルダをrsync --delete
。
ファイルを初めてコピーする場合は、最初に圧縮してから送信して解凍すると(AFAIKはパイプ入力を許可しない)、とにかく作業を行う必要がないため、面倒でrsync
常にrsyncよりも悪くなります。rsync
tar
ヒント:rsyncバージョン3以降は増分再帰を実行します。つまり、すべてのファイルを計算する前に、ほぼ即座にコピーを開始します。
rsync
ヒント2: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
そして、この2つの方法を使用して、リモートサーバーへのファイル転送を複数回テストします(同じ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上の両方のシステムで同じテストを実行し、rsync + tarははるかに少ないネットワークトラフィックでより良いパフォーマンスを発揮しました。ジャンボフレームだと思います。
より大きなデータセットでは、rsync + tarがrsyncよりも優れている可能性があります。しかし、正直なところ、私はそれが問題を引き起こす価値がないと思います。荷物を安くして解放するためには、両側に2倍のスペースが必要であり、上記ですでに述べたように、いくつかの異なるオプションがあります。