大量のファイルを転送する最も速くて信頼性の高い方法は何ですか?

大量のファイルを転送する最も速くて信頼性の高い方法は何ですか?

合計 90 GB の約 10 万個のファイルを転送しようとしています。現在、rsync デーモンを使用していますが、速度が 3.4 MB/秒と遅いため、これを何度も実行する必要があります。インターネット経由で 100 MB の接続を最大限に利用し、非常に信頼性の高いオプションがあるのか​​知りたいです。

答え1

検討しましたかスニーカーネット? 大規模なデータ セットの場合、インターネット経由で転送するよりも翌日配送の方が速くて安くなることがよくあります。

答え2

どうやって? またはTL;DR

tar私が見つけた最も速い方法は、、mbufferおよびの組み合わせですssh

例えば:

tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"

これを使用することで、1Gb リンクで 950 Mb/s を超える持続的なローカル ネットワーク転送を実現できました。各 tar コマンドのパスを、転送する内容に応じて適切なものに置き換えてください。

なぜ? mbuffer!

ネットワーク経由で大容量ファイルを転送する際の最大のボトルネックは、圧倒的にディスク I/O です。その答えは、mbufferまたはですbuffer。これらはほぼ同様ですが、mbufferいくつかの利点があります。デフォルトのバッファ サイズは、 の場合は 2MB mbuffer、 の場合は 1MB ですbuffer。バッファが大きいほど、空になる可能性が低くなります。ターゲットと宛先のファイルシステムの両方でネイティブ ブロック サイズの最小公倍数となるブロック サイズを選択すると、最高のパフォーマンスが得られます。

バッファリングは全て違い!持っている場合は使用してください。持っていない場合は入手してください。(m}?bufferプラスを使用すると、何でも単独で使用するよりも効果的です。これは、文字通り、低速のネットワーク ファイル転送に対する万能薬です。

複数のファイルを転送する場合は、tarそれらを1つのデータストリームにまとめるために使用します。単一のファイルの場合は、またはI/Oリダイレクトを使用できます。vs .catのオーバーヘッドは統計的に重要ではないため、すでにtarcattarzfs -sendtarボールどちらもメタデータが提供される保証はありません (特に、catメタデータは提供されません)。メタデータが必要な場合は、それを自分で実行してください。

最後に、sshトランスポート メカニズムに を使用すると、安全であり、オーバーヘッドもほとんど発生しません。この場合も、sshvs.のオーバーヘッドncは統計的に重要ではありません。

答え3

「rsync」について言及しているので、Linux を使用していると想定します。

tar または tar.gz ファイルを作成してみませんか? 1 つの大きなファイルのネットワーク転送時間は、多数の小さなファイルよりも高速です。必要に応じて圧縮することもできます...

圧縮なしのTar:

ソース サーバー上:

tar -cf file.tar /path/to/files/

受信側では次のようになります。

cd /path/to/files/
tar -xf /path/to/file.tar

圧縮されたタール:

ソース サーバー上:

tar -czf file.tar.gz /path/to/files/

受信側では次のようになります。

cd /path/to/files/
tar -xzf /path/to/file.tar.gz

(tar|tar.gz) ファイルの実際の転送には、rsync を使用するだけです。

答え4

rsync のさまざまな圧縮オプションを使用できます。

-z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with suffix in LIST

バイナリ ファイルの圧縮率は非常に低いため、iso、すでにアーカイブされ圧縮された tarball など、--skip-compress を使用してそれらのファイルをスキップできます。

関連情報