15TBの小さなファイルを転送する


79

あるサーバーから別のサーバーにデータをアーカイブしています。最初はrsync仕事を始めました。5 TBのデータのファイルリストを作成するのに2週間、1 TBのデータを転送するのにさらに1週間かかりました。

その後、新しいサーバーでいくつかのダウンタイムが必要になるため、ジョブを強制終了する必要がありました。

おそらく再びアクセスする必要はないので、それをtarすることに同意しました。500 GBのチャンクに分割することを考えていました。私がtarそれをした後、私はそれをコピーしようとしましたssh。私は使用tarしてpigzいましたが、それでも遅すぎます。

それを行うより良い方法はありますか?両方のサーバーがRedhat上にあると思います。古いサーバーはExt4で、新しいサーバーはXFSです。

ファイルサイズは数KBから数MBの範囲で、5 TBには2400万のJPEGがあります。ですから、15TBで約6,000万から8,000万を推測しています。

編集:数日間rsync、nc、tar、mbuffer、pizzで遊んだ後。ボトルネックはディスクIOになります。データが500個のSASディスクと約2億5千万個のjpegにストライプ化されているため。しかし、今では、将来使用できるこれらすべての素晴らしいツールについて学びました。



2
1つのオプションは、外部ドライブに圧縮tarファイルを作成し、それを新しいシステムに移動することです。余分なディスクはtarファイルの作成を高速化し(システム内の既存のディスクへの書き込みを行わず、おそらく15TBのディスクからの読み取りを試みます)、新しいサーバーを拘束しません。
ブライアン

4
それを行うより良い方法はありますか?-ええ、Windows Server 2012 R2 DFSレプリケーションは約10時間でそれを準備します。そして、変更を同期し、再起動後に中断したところから再開します。
TessellatingHeckler

27
@TessellatingHeckler:アーカイブする前にOPをRedhatからWindowsに移行することをお勧めしますか?
トーマスウェラー

12
@ThomasWeller彼らは「もっと良い方法はありますか?」と尋ねました。私は彼らがより良い方法を使用することを推奨しません。パイプからコマンドを自由に使用でき、中断から回復できず、ファイルの内容を確認できず、コピーステータスを報告できず、ファイルの一部のコピーを避けるために以前にコピーしたブロックを使用できず、暗黙的ではありません低優先度のコピーをサポートし、一時停止することはできず、ACLのコピーについては言及しておらず、実行するにはログインしたままにしておく必要があります。しかし、他の誰かが興味を持っているかもしれません-または「xはLinuxでそれをします」と言うように促されます。
TessellatingHeckler

回答:


64

私が使用して、非常に良好な結果を得ていtarpigz(並列GZIP)とnc

ソースマシン:

tar -cf - -C /path/of/small/files . | pigz | nc -l 9876

宛先マシン:

抽出するには:

nc source_machine_ip 9876 | pigz -d | tar -xf - -C /put/stuff/here

アーカイブを保持するには:

nc source_machine_ip 9876 > smallstuff.tar.gz

転送速度を確認したい場合は、pv後でパイプスルーしてpigz -dください!


3
FYI、あなたは置き換えることができpigzgzipか、それを完全に削除しますが、速度が大幅に遅くなります。
h0tw1r3

10
OPがすでに試みた場合、どのようこれを受け入れることができるtarpigz?わかりません...
トーマスウェラー

5
@ThomasWeller彼が試したことをどこで手に入れましたpigzか?この質問から、彼はrsyncこれまで試しただけで、データの分割とバンドルに使用することを検討していたtarようです。特に、rsyncで-z/ --compressオプションを使用していない場合、pigz理論的には大幅に役立つ可能性があります。
ドクターJ

1
@ThomasWellerはい、私はすでにtarとpigzを試しましたが、ncは試していません。sshを使用していたため、オーバーヘッドが大幅に増加しました。
lbanz

2
@lbanzは、単に圧縮に多くのCPUを使用するのにtar十分な速度でデータを生成していないことを意味しpigzます。大量の小さなファイルを読み込むには、同じバイト数の大きなファイルを読み込むよりも多くのsyscall、より多くのディスクシーク、およびはるかに多くのカーネルオーバーヘッドが伴います。
ホッブズ

21

私はrsyncソリューションに固執します。モダン(3.0.0+)rsyncは増分ファイルリストを使用するため、転送前に完全なリストを作成する必要はありません。そのため、問題が発生した場合、再起動しても転送全体をやり直す必要はありません。最上位または第2レベルのディレクトリごとに転送を分割すると、これがさらに最適化されます。(ネットワークがドライブより遅い場合は、使用rsync -a -Pして追加し--compressます。)


古いサーバーでrsync 2.6.8を使用しています。ベンダーが指定したものをインストール/更新することが許可されていないボックスの1つであるか、保証が無効です。私はそれを更新し、それがより速いかどうかを確認するかもしれません。
lbanz

18
静的にリンクされたrsyncバイナリを検索(またはビルド)し、自宅から実行します。うまくいけば、それは保証を台無しにしないでしょう。
フォックス

どうunison?それと比較してrsyncどうですか?
グウィネスLlewelyn

15

、VPN(そのインターネットの場合)を設定し、(それext4を作る)、リモートサーバー上のいくつかの形式の仮想ドライブを作成し、リモートサーバーにマウント後、 iSCSIのようなブロックレベルのプロトコルを使用して(ローカルサーバー上のことをマウント)、ddまたは別のブロックレベルのツールを使用して転送を行います。その後、必要に応じて、仮想ドライブから実際の(XFS)ドライブにファイルをコピーできます。

2つの理由:

  1. 主なパフォーマンスの原因であるファイルシステムのオーバーヘッドはありません
  2. シークなし、両側のシーケンシャル読み取り/書き込みを見ている

3
ファイルシステムをバイパスすることは良いことです。読み取り/書き込みマウントされたファイルシステムのブロックレベルをコピーすることは本当に悪い考えです。最初にマウント解除または読み取り専用でマウントします。
JB。

15TBのコピーもありません。これは、新しいサーバーが最低30を必要とする意味
アーサー・ケイ

3
サーバーがLVMを使用している場合、ファイルシステムの読み取り専用スナップショットを作成し、代わりにコピーできます。スナップショットの読み取り中に発生するファイルシステムの変更のみのスペースオーバーヘッド。
リオリ

9

古いサーバーが廃止され、ファイルが数分間オフラインになる場合、ドライブを古いボックスから引き出して新しいサーバーにケーブル接続し、マウント(今すぐオンラインに戻す)してファイルをコピーするのが最も速い場合がよくあります。新しいサーバーのネイティブディスクに。


2
約1PBの2TBドライブなので、大きすぎます。
lbanz


3

(多くの異なる答えが機能します。別の答えを次に示します。)

find -type f(これは数時間で終了するはずです)でファイルリストを生成し、それを小さなチャンクに分割し、を使用して各チャンクを転送しrsync --files-from=...ます。


3

スニーカーネットを検討しましたか?つまり、すべてを同じドライブに転送してから、そのドライブを物理的に移動するということです。

約1か月前、Samsungは16 TBドライブ(技術的には15.36 TB)を発表しました。これはSSDでもありますhttp : //www.theverge.com/2015/8/14/9153083/samsung-worlds-largest-hard -ドライブ-16TB

私は、このドライブでこれがうまくいくと思います。それでもすべてのファイルをコピーする必要がありますが、ネットワークの待ち時間がなく、おそらくSATAまたは同様の高速なテクニックを使用できるため、かなり高速になるはずです。


2

重複排除時に高い成功率が得られる可能性がある場合は、borgbackupやAttic などを使用します。

そうでない場合は、netcat + tar + pbzip2ソリューションを確認し、ハードウェアに応じて圧縮オプションを調整します-ボトルネック(CPU?ネットワーク?IO?)を確認します。pbzip2はすべてのCPUに適切に適用され、パフォーマンスが向上します。


lzma(xz)はbzip2よりも速く解凍し、ほとんどの入力で適切に機能します。残念ながら、xzマルチスレッドオプションはまだ実装されていません。
ピーターコーデス

通常、圧縮段階は解凍よりも多くの馬力を必要とするため、CPUが制限要因である場合、pbzip2は全体的なパフォーマンスが向上します。両方のマシンが類似している場合、解凍はプロセスに影響しません。
ニュートリヌス

はい、私のポイントは、シングルストリームのマルチスレッドlzmaがないのは残念だということでした。このユースケースでは、データのファイルシステム全体を転送することは問題になりますpigz。使用したい最も遅いコンプレッサーであること。またはlz4。(lz4mtマルチスレッド化されたシングルストリームが利用可能です。スレッド化はあまり効率的ではありません(新しいスレッドを非常に頻繁に生成します)が、確実な高速化が得られます)
Peter Cordes

2

RedHat Linuxを使用しているため、これは適用されませんが、別のオプションとして:

iノードは問題にならないため、ZFSを使用して何百万ものファイルを保持することで大きな成功を収めました。

それがあなたにとっての選択肢だったなら、スナップショットを取り、zfsを使用して増分更新を送信できます。この方法を使用してデータを転送およびアーカイブすることで多くの成功を収めました。

ZFSは主にSolarisファイルシステムですが、illumos(SunのOpenSolarisのオープンソースフォーク)にあります。ZFSをBSDおよびLinuxで(FUSEを使用して)使用することにも多少の幸運があったことは知っていますが、それを試してみた経験はありません。


3
ZFSの非FUSEネイティブLinuxポートはかなり長い間あります。zfsonlinux.org
EEAA


-1

次のように、tarとsshだけでこれを行うことができます。

tar zcf - <your files> | ssh <destination host> "cat > <your_file>.tar.gz"

または、個々のファイルを保持する場合:

tar zcf - <your files> | ssh <destination host> "tar zxf -"


1
1つのCPUのみを使用して圧縮し、重複排除も再開もできません。
ニュートリヌス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.