合計 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
のオーバーヘッドは統計的に重要ではないため、すでにtar
cat
tar
zfs -send
tarボールどちらもメタデータが提供される保証はありません (特に、cat
メタデータは提供されません)。メタデータが必要な場合は、それを自分で実行してください。
最後に、ssh
トランスポート メカニズムに を使用すると、安全であり、オーバーヘッドもほとんど発生しません。この場合も、ssh
vs.のオーバーヘッド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 を使用してそれらのファイルをスキップできます。