SCP を高速化するにはどうすればいいですか?

SCP を高速化するにはどうすればいいですか?

ホーム ネットワーク経由でファイルを転送するには、次のコマンドを使用します (大量のファイルを転送する必要がある場合は、通常、ユーティリティを使用してファイルをアーカイブしますtar)。

scp -c blowfish [FILE] [USER]@[ADDRESS]:[PATH]

500 MB のデータを別のコンピュータに送信するのに約 25 分かかります。平均速度は約 600 KB/秒です。プロセスを高速化する方法があるに違いないと思います。1 GB のファイルを Web から 10 分以内に楽に取得できるとは思えませんが、500 MB のファイルをそれより短い時間でネットワーク経由で送信することはできないからです。

答え1

2つのアイデア:

  1. 別の暗号を試してみる
  2. オンザフライ圧縮を使用する

1. 別の暗号を試します。

1 つのアイデアは、利用可能なさまざまな暗号をテストしてscp、どれが最も高速であるかを判断することです。(この背後にある考え方は、データの暗号化に時間がかかっているということです。) 次のコマンドを実行して、利用可能な暗号を見つけます。

andrew@athens:~$ ssh -Q cipher
3des-cbc
blowfish-cbc
cast128-cbc
arcfour
arcfour128
arcfour256
aes128-cbc
aes192-cbc
aes256-cbc
[email protected]
aes128-ctr
aes192-ctr
aes256-ctr
[email protected]
[email protected]
[email protected]
andrew@athens:~$ 

これは、デフォルトの Xenial Xerus インストールで使用可能な暗号を示しており、すでに提案されている構文を使用して追加できます。

scp -c <cipher> [FILE] [USER]@[ADDRESS]:[PATH]

このオプションは に直接渡されるため、使用可能な暗号sshをテストしますssh。転送速度の向上を可能にする暗号が見つかるといいですね。この暗号を見つけたら、~/.ssh/config毎回入力するのではなく、それを配置できます...

2. オンザフライ圧縮を使用する:

scp転送を「オンザフライ」で圧縮できます。つまり、圧縮は転送中にのみ使用され、ホスト側またはリモート側では表示されません。この-Cオプションを使用してこれを追加します。

scp -c <cipher> -C [FILE] [USER]@[ADDRESS]:[PATH]

以下は私のシステムでの例です:

debug1: compress outgoing: raw data 365865, compressed 150118, factor 0.41
debug1: compress incoming: raw data 150118, compressed 365865, factor 2.44

圧縮レベルは で使用されているものと同じですが、実際に実験したい場合は、1 ~ 9 の範囲で変化する「CompressionLevel」オプションを使用できます。1 は最も高速な圧縮、9 は最も低速で最良の圧縮、6 はデフォルトです。これは次のようにgzip設定できます。~/.ssh/config

Host *
Compression yes
CompressionLevel 9

これは高圧縮を設定することに注意してください全て scp / ssh転送の場合、必要に応じて個々のホストに設定できます...

この-vオプションを使用して、行った変更の効果を調べます。実験により、データによって圧縮率が異なることがわかります。

関連情報