Linuxでよく使われるファイル転送方式の紹介と比較

20340 ワード

本論文ではlinux間でファイルを転送するいくつかの方法を紹介し,いくつかのファイル転送方式間の転送速度を具体的な実験により試験した.この文章は私の宿題の実験報告で、私はよくこのドキュメントを見ているので、自分で調べるのに便利です.
0.実験環境及び実験データ
実験環境:Ubuntuを搭載した2台のパソコン、2台のパソコンは同じローカルエリアネットワークにあり、伝送速度は約4.1 MB/sである.
実験データ:MySQLのログファイル(ib_logfile 0)を用いてテストを行い,ログファイル圧縮前1.1 G,圧縮後159 M,具体的な応用では圧縮割合はそれほど高くないかもしれないが,我々の議論には影響しない.
1. scp
scpはsecure copyの略で、scpはlinuxシステムの下でsshログインに基づいて安全なリモートファイルコピーコマンドで、主にlinuxサーバ間でファイルとディレクトリをコピーするために使用されます.scpはsshセキュリティプロトコルを使用してデータを転送し、sshと同様の検証メカニズムを有し、安全なリモートコピーファイルを実現することができる.
SCPの3つの異なる使い方の効率について説明します.注意:SCPを使用する前にSSHを調製してください.
1.1 scp圧縮を使用しない
ローカル・ファイルをリモート・サーバにコピーするには、次の手順に従います.
scp -P port ufile user@host:~/ufile

リモート・サーバのファイルをローカルにコピーする方法:
scp -P port user@host:~/ufile ufile

SCPが圧縮機能を有効にしない場合、ib_を転送するlogfile 0ファイルには4:12 sが必要です.
1.2圧縮後転送
SCP転送ib_logfile 0ファイルにそんなに時間がかかるのは、転送されたデータを圧縮していないため、ファイルを圧縮してからリモートコピーすることができます.次のようになります.
tar -zcf ufile.tar.gz ufile scp -P port ufile.tar.gz user@host:~/ufile.tar.gz ssh -p port user@host 'tar -zxf ufile.tar.gz'

テスト後、手動で圧縮してから転送し、4回のテスト結果の平均値は00:39 sであった.
1.3 scp圧縮有効化
第1の方法に比べて、第2の方法は伝送時間を大幅に短縮するが、3つの文を実行する必要があり、面倒である.より簡単な方法は次のとおりです.
scp -P port -C ufile user@host:~/ufile
-CオプションはSSHの圧縮機能を有効にしており、man sshから、-Cオプションの解釈部分には「the compression algorithm is the same used by gzip」という言葉が表示されます.SSHはgzipと同じ圧縮アルゴリズムを用いている.すなわち、第2の方法は第3の方法とほぼ同じであるが、第3の方法はより簡単で便利であるため、第3の方法でデータを伝送することを推奨する.
第3の方法はib_を伝送するlogfile 0は00:52 sを費やし、第2の方法より10秒多くかかりました.この10秒は主にデータの圧縮と解凍に使用されます.
さらに、圧縮アルゴリズムを修正する圧縮は、全体のデータ伝送時間よりも大きく影響しないことに注目すべきである.これは、より高い圧縮割合のため、必要な圧縮時間もより多くなるからである.
2. sftp
sftpはSecure File Transfer Protocolの略で、セキュリティファイル転送プロトコルは、転送ファイルに安全な暗号化方法を提供することができます.sftpはftpとほぼ同じ構文と機能を持っていますが、SFTPはSSHの一部であり、認証情報と伝送データを暗号化して伝送するので、SFTPを使用するのは非常に安全です.しかしながら、この伝送方式は暗号化・復号化技術を用いているため、伝送効率は通常のFTPよりも若干低い.
サーバへのデータのアップロード:
echo progress; echo "put ufile"; echo quit) | sftp -o Compression=yes -o Port=port user@host -b

サーバからのデータのダウンロード:
echo progress; echo "get ufile"; echo quit) | sftp -o Compression=yes -o Port=port user@host -b

私の実験では、sftpを使用してib_を転送しました.logfile 0ファイルは1:05 sかかりました.SCPより少し遅いです.
3.直截使用ssh
ローカルのデータをリモート・サーバに転送する方法:
gzip -c ufile | ssh -p port user@host 'gunzip >ufile'

リモート・サーバをローカルに転送する方法
ssh -p port user@host "gzip -c ufile" | gunzip -c > ufile

このようにib_を転送するlogfile 0は00:55 sが必要で、scp -Cより数秒遅いが、差は大きくない.しかし、scpの使用はより簡単で、gzip圧縮プログラムを手動で呼び出すことなく、-Cパラメータを追加するだけです.
4. nc
Netcat(ncと略称)は、TCPとUDPを介してネットワーク上でデータを読み書きできるネットワークツールのスイス軍刀です.他のツールと組み合わせてリダイレクトすることで、スクリプトでさまざまな方法で使用できます.netcatコマンドを使ってできることに驚きました.
Netcatがやっているのは、2台のパソコンの間にリンクを確立し、2つのデータストリームを返すことです.その後できることは想像力次第です.サーバを構築したり、ファイルを転送したり、友达とチャットしたり、ストリーミングメディアを転送したり、他のプロトコルの独立したクライアントとして使用したりすることができます.ここではncのデータ伝送の場合についてのみ議論する.
サーバ側:
sudo nc -l -p port | tar -zxf - #l        sudo nc -l -p port > ufile

クライアント:
tar -zcf - ufile | sudo nc host port sudo nc host port < ufile

ncを使用してib_を転送logfile 0ファイルは、SCPがデータを暗号化する必要があるため、ncは単純なデータ転送にすぎないため、SCP -Cよりやや速い00:49 sが必要です.
ncは構成操作を必要とせず、使用も簡単であることがわかりますが、ncにはroot権限が必要です.
5. rsync
rsync(remote sync)はクラスunixシステム下のデータミラーバックアップツールであり、ソフトウェアの名前から主にデータの同期バックアップに用いられることがわかります.
rsyncには、SSHチャネルを介してデータを転送する方法と、サーバのrsyncデーモンプロセスと接続を確立することによってデータを転送する方法の2つがあります.以下、この2つの状況をテストします.
5.1 rsync with ssh
rsyncはSSHチャネルを使用してデータを転送する場合、構成が簡単で、SSHを構成すれば直接利用でき、追加の操作は必要ありません.そのため、rsyncを使用するのが好きな人が多いです.
使用方法は次のとおりです.
rsync -zav --rsh='ssh -p port' ufile user@host:path

rsyncはSSHチャネルを用いてib_を伝送するlogfile 0は、SSHを直接使用してデータを転送するのと同じ00:55 sを費やしました.
5.1 rsync with daemon
SCPやSFTPとは異なり、rsyncはSSHチャネルを介してデータを転送するほか、rsyncのデーモンプロセスを介してデータ転送を行う独立したソフトウェアです.
ここではrsyncのデータ伝送の性能を簡単にテストするだけで,rsyncの構成については他の資料を参照することができる.
rsyncの使用方法は以下の通りです.
rsync -avz ufile user@host::module_name

実験ではrsyncはib_を伝送するlogfile 0は00:51 sを費やし、scp -Cとは差が少ない.さらにrsyncはzlib圧縮アルゴリズムを用いてデータを圧縮することに注目すべきである.sshとgzipはLZ 77アルゴリズムを用いている.
rsyncのパラメータは特に多く,詳細な使用方法はここを参照できる.
6. ftp
FTPコマンドは、ファイル転送プロトコル(File Transfer Protocol,FTP)を使用して、ローカルホストとリモートホストの間または2つのリモートホストの間でファイル転送を行います.
ftpの使い方はもう紹介しませんが,我々の実験ではFTPを用いてib_を伝送しています.logfile 0は4:25 sを費やしたが,これはFTPにデータ圧縮の機能がないためである.前述の実験環境から,データ圧縮は伝送データ量を著しく減少させ,データを圧縮することができず,どんなに良い伝送ツールでもネットワーク伝送速度に制限されることが分かった.
7.結論
単純にデータ転送から見ると、個人的にはSCPが好きで、SCPも強くお勧めしますが、SCPを使用する場合は-Cオプション、すなわち圧縮機能を有効にしなければならないことを覚えておいてください.前述の実験からも,圧縮有効化と非圧縮伝送のデータ量の差が大きいことが分かった.
また、上記のいくつかのデータ転送方式にもそれぞれのアプリケーションシーンがあり、その中でncが最も使いやすく、構成も最も便利であるが、root権限が必要であり、root権限があってSSHを構成していない場合はncを推奨する.
rsyncの構成は比較的複雑で、データ転送ではなくインクリメンタルバックアップを行う主な機能であり、インクリメンタルバックアップが必要な場合は迷わずrsyncを選択します.
FTPの配置も面倒で、伝送速度も普通で、しかも、FTPは圧縮機能を持っていないので、手動で圧縮する必要がありますが、FTPは最もよく使われるデジタルデータ伝送方式で、多くの一般ユーザーはFTPを使ったことがあります.ユーザーにとって、学習コストが低く、複数のユーザーにファイルを転送する必要がある場合は、FTPを使うことをお勧めします.
SFTPはSSH上に構築されたFTPであり、伝送速度も速く、SCPとは異なるが、SFTPはインタラクティブに使用でき、場合によっては有用である可能性があり、また、SSHが構成されている場合、SFTPの構成コストはゼロであり、構成を必要とせず、直接利用可能である.
総じて言えば、それぞれの伝送方式には千秋があり、私たちは自分の実際の需要に応じて、適切なファイル伝送方法を選択しなければならない.
変換元:http://mingxinglai.com/cn/2014/03/copy-file-in-linux/