Rsync(Remote Sync)は、システム内またはシステム間でファイルやディレクトリをコピーするための同期ツールです。 rsyncの最大の利点は、変更されたファイルのみをコピーするため、CPU消費量が削減され、ファイルのコピー中の帯域幅と時間が節約されることです。
scpに対するrsyncの利点
scpコマンドの実際的な例をいくつか示しました。セキュアコピーの略であるscpは、sshを介して2つのリモートシステム間でファイルをコピーするためにも使用されます。
しかし、rsyncにはscpに比べて特定の利点があり、より良い選択になります。
- rsyncは変更されたファイルのみをコピーし、scpはすべてのファイルをコピーし、必要に応じてそれらを上書きします。したがって、rsyncではより良い速度が保証されます。
- rsyncは暗号化なしでも機能します。これにより、オーバーヘッドを減らすことができます。ただし、暗号化せずに転送するセキュリティリスクがない場合は、これを考慮する必要があります。
- scpで許可されていない場合でも、rsyncで不完全な転送を再開できます。
rsyncがない場合 インストールされている場合は、パッケージマネージャーを使用してインストールできます。
UbuntuとDebianでは、次のコマンドでrsyncをインストールできます。
sudo apt install rsync
Linuxでのrsyncコマンドの実用的な例
rsync コマンドの構造は次のとおりです
rsync [OPTIONS] Source Destination
ソースの場所 および宛先 [email protected]:path / to / fileの形式のローカルパスまたはリモートパスにすることができます
いくつかの役立つ例を使用して、rsyncコマンドの使用方法を見てみましょう。
🗒️ディレクトリAがある場合は、「A/」ではなく「A」を使用して言及します。 A /を使用すると、ディレクトリA自体ではなく、ディレクトリA内のすべてのファイルが参照されます。したがって、Aをコピーすると、宛先に新しいディレクトリが作成され、Aのファイルがコピーされます。ただし、A /をコピーすると、Aのファイルのみが宛先にコピーされます。1。ローカルファイルの同期[一方向同期]
ディレクトリAからローカルファイルをコピーするには Backup-A-dirに 、
rsync A/ Backup-A-dir/
このコマンドは、ディレクトリAのファイル(変更が見つかった場合)をBackup-A-dirにコピーします。これにより、Backup-A-dirにある、最初はAにない余分なファイルがAにコピーされることはありません。これが一方向同期と呼ばれる理由です。
2。リモートファイルの同期[一方向同期]
リモートシステムとローカルシステム間でファイルを同期するには、コマンドは同様です。ソースの場所と宛先の場所は、ローカルファイルシステムパスまたはリモートシステム(ssh)パスのいずれかであることに注意してください。
rsync dev/build [email protected]:~/Backup
3。双方向同期
上記のコマンドは、ファイルをソースから宛先にコピーします。ただし、システムにソース上にない余分なファイルがいくつかある場合、それらは一方向同期によって削除されません。それが必要な場合は、双方向同期を使用する必要があります。
両方のエンドポイント(ディレクトリまたはファイル)を同じ状態に維持し、同じファイルを使用し、どちらの側にも余分なものがないようにするには、 –deleteを追加するだけです。 元のコマンドのオプション。
rsync A/ Backup-A-dir/ --delete
4。コピー後にソースファイルを削除する
転送が完了した後でソース内のファイルを削除する必要がある場合は、 –remove-source-files オプションが便利です。
rsync A/ Backup-A-dir/ --remove-source-files
上記のコマンドには注意が必要です。十分なコピーが作成され、ソース内のデータが不要になった場合にのみ、ソースを削除する必要があります。
5。ファイルの包含と除外
名前がパターンに一致するファイルを転送する必要がある(または必要ない)場合は、
–含める および–除外 オプションを使用できます。各オプションには、「=」記号の後にパターンを付ける必要があります。
rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py
上記のコマンドは、拡張子が .pyのすべてのファイルをコピーします 拡張子が.tmp.py。のものを除く
正規表現をパターンとして使用できます。詳細については、こちらをご覧ください。
ヒント:いずれかのオプションのパターンのリストが膨大な場合は、それをファイルに保存して、それらの名前を –include-fromに渡すことができます。 および–除外-から オプション。
6。 SSH経由のrsync
SSH経由でファイルを転送する場合は、 -eを使用してsshを指定する必要があります オプション。
rsync -e ssh A/ [email protected]:~/Backup-A-dir/
これは暗号化されているため、リモートシステムにファイルを転送するための最も好ましい方法です。暗号化のためにオーバーヘッドが発生することに注意する必要があります。そのため、通常の転送よりも時間がかかる場合があります。
これを機能させるには、サーバー側で構成されたsshログインを有効にする必要があります。公開鍵と秘密鍵もそれぞれのパスにある必要があります。
sshとそのセットアップの詳細については、クライアント側のSSH構成とサーバー側のSSH構成に関するLinuxHandBookの記事を参照してください。
7。冗長モード
Linuxのほとんどのコマンドには、ターミナルでコマンドのアクションをログに記録するための詳細なオプションがあります。 rsync 例外ではありません。
-vのいずれかを渡します オプションまたは—詳細strong> コマンドを冗長化するオプション。実行中のアクションとその進行状況が一覧表示されます。これは、デバッグ中に非常に役立ちます。
rsync A/ Backup-A-dir/ -v -r
出力は以下のようになります
$ rsync A/ Backup-A-dir/ -v -r
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 388 bytes received 168 bytes 1,112.00 bytes/sec
total size is 0 speedup is 0.00
8。ドライラン–実行しますが、コピーしないでください
実際に転送せずにコピーされるファイルを知りたい場合は、 –dry-runを使用できます。 (または -n )オプション。
通常のrsyncとしてすべての操作を実行します コマンドはコピー部分を除いて行います。コピーまたは削除されるファイルが一覧表示され(必要な場合)、コピーの直前に停止します。
rsync -v A/ Backup-A-dir/ --dry-run
その結果
$ rsync -v A/ Backup-A-dir/ –dry-run
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 172 bytes received 72 bytes 488.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
-vを使用する必要があることに注意してください ドライランコマンドの上記の出力を表示するオプション。そうでない場合、ドライランは発生しますが、結果は表示されません。
9。転送の進行状況を表示する
転送の進行状況を表示する場合は、 –progressを使用します オプション。
rsync A/ Backup-A-dir/ --progress
上記のコマンドは、以下のようなプログレスバーを表示します:
$ rsync -r A/ Backup-A-dir/ –progress
sending incremental file list
created directory Backup-A-dir
./
file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)
file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7)
file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7)
file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7)
file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7)
file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)
10。データの圧縮と転送
ネットワークの帯域幅と時間を節約したい場合は、 -zを使用して転送するデータを圧縮できます。 オプション。宛先で自動的に解凍されます。
このトリックは、転送されるデータが膨大な場合に、ネットワークの時間とコストを大幅に節約できます。オーバーヘッド処理が合計時間を上回るため、小さなファイルでは避ける必要があります。
rsync -z A/ Backup-A-dir/
-zの使用は避けてください。 ローカル転送と小さなファイルを実行する際のオプション。不必要に遅くなります。
11。ファイルとディレクトリを再帰的にコピーする
上記のすべてのコマンドは、サブディレクトリではなくファイルのみをコピーします(すべてのLinuxコマンドで同じ場合)。その結果、これらのサブディレクトリ内のファイルはコピーされません。これは、再帰的なコピーによって排除できます。
ファイルとディレクトリを再帰的にコピーするには、 -r オプションを使用できます。
rsync -r A/ Backup-A-dir/
12。メタデータのアーカイブと保存
シンボリックリンク、タイムスタンプ、ファイルのアクセス許可、ファイルのユーザーとグループの所有権を保持する場合は、 -a オプションを使用できます。
rsync -a A/ Backup-A-dir/
このオプションには、 -rの機能も含まれています オプション。そのため、ファイルを再帰的にコピーし、コピーされたファイルのメタデータを保持します。
13。ファイルサイズ制限の設定
大きなファイルの転送を回避するために、 –max-sizeを使用してファイルサイズの制限を設定できます。 オプション。これは、コピーされるファイルサイズをチェックするのに役立ちます。
rsync --max-size='100K' A/ Backup-A-dir/
14。帯域幅制限の設定
ネットワーク速度に制限がある場合は、 –bwlimitを使用して制限を指定できます。 オプション。 bwlimit kbpsで表現する必要があります 。
rsync --bwlimit=100 A/ Backup-A-dir/
15。 rsyncでダウンロードを再開します
ダウンロード/転送が不完全な場合は、rsyncコマンドを使用して不完全なダウンロードを保持し、同じコマンドが次に発行されたときに転送を再開できるようにすることができます。
転送を再開するには、 –追加 オプションを使用できます。
rsync --append A /Backup-A-dir/
このStackExchangeスレッドは、このトピックの詳細を学ぶための非常に優れたリソースです。
上記のコマンドはすべて基本的なものであり、単一のフローまたはプロセスでファイルをコピーします。 5 TBのデータがあり、1 TBの転送に2時間かかる場合、転送全体は10時間続きます。ただし、転送を高速化する別の方法があります
ボーナスのヒント:Rsync/並列転送を高速化
並列 GNUユーティリティです ジョブを並行して実行するために使用されます。 Rsyncは rsyncと簡単に組み合わせることができます 。
を使用してUbuntu/DebianシステムにGNUパラレルをインストールします
sudo apt install parallel
先に進む前に、並列がどのように機能するかを理解しましょう。例えを考えてみましょう。
1000個の卵と100個のバスケットがそれぞれドローンであると仮定します。タスクはそれを顧客に届けることです。マネージャーは各バスケットに10個の卵を割り当て、ドローンに配達を命じます。各ドローンは操作を実行します(この場合、10ファイルのrsyncプロセス)。マネージャーはすべてのドローンを監督します。ドローンは、他のジョブが並行して存在することを決して認識しないことに注意してください。マネージャーだけがそうします。
同様に、rsyncはドローンのようにファイルの転送を実行します。パラレルはマネージャーとして機能します。
並列 送信するファイルを分割し、それぞれが異なるファイルのリストを持つ指定された数のrsyncプロセスを生成します。 parallelは、すべてのプロセスを管理するだけです。 rsyncには、並列の他のプロセスに関する知識がなく、並列転送の機能もありません。 Parallelは、タスクをバンドルすることで並列転送を提供します。
したがって、並列コマンドは、パイプで接続される2つの部分で構成されます。 1つは引数(eggs / files)で、もう1つは並列コマンド(manager)です。
ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/
上記のコマンドでは、「|」記号の前の最初のコマンドの結果として出力される各ファイル/ディレクトリが引数として機能します。 {}は、並列コマンドの左からの引数を表します。
-j n –n個のジョブまたはワーカーを設定するために使用されます。この場合、nは20です。
次の部分は、すべての引数に対する通常のrsyncコマンドです。
コマンドが生成された後、それらは20のプロセスにバンドルされ、並行して実行されます。
並列なしで行うのと同じように、上記のrsyncコマンドに任意のオプションを追加できることに注意してください。上記のコマンドのrsyncという単語の後にrsyncオプション(-z、-a、-e sshなど)を追加するだけです。
パラレルについて詳しく知りたい場合は、このページを参照してください。
rsyncの一般的なエラー
rsyncの使用中にエラーが発生する可能性があります。以下は、いくつかの一般的なものとそのトラブルシューティングのヒントです。
1。 rsync権限が拒否されました
これは、適切な権限がないパスを使用した場合に発生する可能性のあるエラーです。例:
rsync B/ /home/
/ home / に書き込み権限がない場合、上記のコマンドにより権限拒否エラーが発生します (通常のユーザーは通常行いません)
2。 rsyncが
の時刻を設定できませんでした これは、ファイルシステムがファイルとディレクトリの変更時間を処理できない場合に発生します。これについて詳しくは、このページをご覧ください。
この記事でsyncコマンドの良い例をいくつか学んだことを願っています。ご提案やご意見がございましたら、お気軽に下記にご記入ください。