Rsyncを使用してローカルディレクトリとリモートディレクトリを同期する方法
序章
Rsync は、 remote sync の略で、リモートおよびローカルのファイル同期ツールです。 アルゴリズムを使用して、変更されたファイルの部分を移動するだけでコピーされるデータの量を最小限に抑えます。
このチュートリアルでは、Rsyncを定義し、rsync
を使用する場合の構文を確認し、Rsyncを使用してリモートシステムと同期する方法、および使用可能なその他のオプションについて説明します。
前提条件
rsync
を使用してローカルシステムとリモートシステム間でファイルを同期する練習をするには、ローカルコンピューターとリモートマシンとしてそれぞれ機能する2台のマシンが必要です。 これらの2台のマシンは、適切に構成されている限り、仮想プライベートサーバー、仮想マシン、コンテナー、またはパーソナルコンピューターである可能性があります。
サーバーを使用してこのガイドに従うことを計画している場合は、サーバーを管理ユーザーと一緒にセットアップし、各サーバーにファイアウォールを構成するのが賢明です。 これらのサーバーをセットアップするには、初期サーバーセットアップガイドに従ってください。
このチュートリアルに従うために使用するマシンのタイプに関係なく、両方にSSHキーを作成しておく必要があります。 次に、そのガイドのステップ2 で概説されているように、各サーバーの公開鍵を他のサーバーのauthorized_keys
ファイルにコピーします。
このガイドは、Ubuntu 20.04を実行しているマシンで検証されましたが、通常、rsync
がインストールされているLinuxベースのオペレーティングシステムを実行しているすべてのコンピューターで機能するはずです。
Rsyncの定義
Rsyncは、非常に柔軟なネットワーク対応の同期ツールです。 LinuxおよびUnixライクなシステムで広く使用されており、システムスクリプトのツールとして人気があるため、ほとんどのLinuxディストリビューションにデフォルトで含まれています。
Rsync構文を理解する
rsync
の構文は、ssh
、scp
、cp
などの他のツールと同様に動作します。
まず、次のコマンドを実行して、ホームディレクトリに移動します。
cd ~
次に、テストディレクトリを作成します。
mkdir dir1
別のテストディレクトリを作成します。
mkdir dir2
次に、いくつかのテストファイルを追加します。
touch dir1/file{1..100}
dir1
というディレクトリがあり、100個の空のファイルが含まれています。 ファイルをリストアップして確認します。
ls dir1
Outputfile1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
dir2
という空のディレクトリもあります。 同じシステムでdir1
の内容をdir2
に同期するには、rsync
を実行し、-r
フラグを使用します。ディレクトリ同期に必要です:
rsync -r dir1/ dir2
もう1つのオプションは、-a
フラグを使用することです。これは、組み合わせフラグであり、「アーカイブ」を表します。 このフラグは再帰的に同期し、シンボリックリンク、特殊ファイルとデバイスファイル、変更時刻、グループ、所有者、およびアクセス許可を保持します。 -r
よりも一般的に使用されており、使用することをお勧めするフラグです。 前の例と同じコマンドを実行しますが、今回は-a
フラグを使用します。
rsync -a dir1/ dir2
前の2つのコマンドの構文の最初の引数の最後にスラッシュ(/
)があり、ここで強調表示されていることに注意してください。
rsync -a dir1/ dir2
この末尾のスラッシュは、dir1
の内容を示します。 末尾にスラッシュがない場合、ディレクトリを含むdir1
はdir2
内に配置されます。 結果は、次のような階層を作成します。
~/dir2/dir1/[files]
もう1つのヒントは、rsync
コマンドを実行する前に引数を再確認することです。 Rsyncは、-n
または--dry-run
オプションを渡すことによってこれを行うためのメソッドを提供します。 適切な出力を取得するには、「verbose」を意味する-v
フラグも必要です。 次のコマンドで、a
、n
、およびv
フラグを組み合わせます。
rsync -anv dir1/ dir2
Outputsending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .
次に、次のように、その出力を、末尾のスラッシュを削除したときに受け取る出力と比較します。
rsync -anv dir1 dir2
Outputsending incremental file list dir1/ dir1/file1 dir1/file10 dir1/file100 dir1/file11 dir1/file12 dir1/file13 dir1/file14 dir1/file15 dir1/file16 dir1/file17 dir1/file18 . . .
この出力は、ディレクトリ内のファイルだけでなく、ディレクトリ自体が転送されたことを示しています。
Rsyncを使用してリモートシステムと同期する
rsync
を使用してリモートシステムと同期するには、ローカルマシンとリモートマシンの間でSSHアクセスを構成し、両方のシステムにrsync
をインストールするだけです。 2台のマシン間でSSHアクセスを確認したら、次の構文を使用して、前のセクションのdir1
フォルダーをリモートマシンに同期できます。 この場合、実際のディレクトリを転送することに注意してください。そのため、末尾のスラッシュは省略します。
rsync -a ~/dir1 username@remote_host:destination_directory
このプロセスは、ローカルシステムからリモートシステムにディレクトリを「プッシュ」するため、push操作と呼ばれます。 反対の操作はpullで、リモートディレクトリをローカルシステムに同期するために使用されます。 dir1
ディレクトリがローカルシステムではなくリモートシステム上にある場合、構文は次のようになります。
rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
cp
や同様のツールと同様に、ソースは常に最初の引数であり、宛先は常に2番目の引数です。
- 他のRsyncオプションの使用
Rsyncには、前のセクションで学習したフラグオプションなど、ユーティリティのデフォルトの動作を変更するための多くのオプションが用意されています。
テキストファイルなど、まだ圧縮されていないファイルを転送する場合は、-z
オプションを使用して圧縮を追加することにより、ネットワーク転送を減らすことができます。
rsync -az source destination
-P
フラグも役立ちます。 フラグ--progress
と--partial
を組み合わせています。 この最初のフラグは転送の進行状況バーを提供し、2番目のフラグは中断された転送を再開できるようにします。
rsync -azP source destination
Outputsending incremental file list created directory destination source/ source/file1 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101) sourcefile10 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101) source/file100 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101) source/file11 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101) source/file12 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101) . . .
コマンドを再度実行すると、変更が加えられていないため、出力が短縮されます。 これは、変更が行われたかどうかを判断するために変更時間を使用するRsyncの機能を示しています。
rsync -azP source destination
Outputsending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00
次のようなコマンドを使用して、一部のファイルの変更時刻を更新するとします。
touch dir1/file{1..10}
次に、rsync
を-azP
で再度実行すると、Rsyncが変更されたファイルのみをインテリジェントに再コピーする方法が出力に表示されます。
rsync -azP source destination
Outputsending incremental file list file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101) file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101) file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101) file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101) . . .
2つのディレクトリを完全に同期させるには、ファイルがソースから削除されている場合は、宛先ディレクトリからファイルを削除する必要があります。 デフォルトでは、rsync
は宛先ディレクトリから何も削除しません。
この動作は、--delete
オプションを使用して変更できます。 このオプションを使用する前に、-n
、--dry-run
オプションを使用して、不要なデータ損失を防ぐためのテストを実行できます。
rsync -an --delete source destination
同期しているディレクトリ内にある特定のファイルまたはディレクトリを除外する場合は、--exclude=
オプションに続くコンマ区切りのリストでそれらを指定することで除外できます。
rsync -a --exclude=pattern_to_exclude source destination
除外するパターンを指定している場合は、--include=
オプションを使用して、別のパターンに一致するファイルの除外をオーバーライドできます。
rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
最後に、Rsyncの--backup
オプションを使用して、重要なファイルのバックアップを保存できます。 これは、バックアップファイルを保存するディレクトリを指定する--backup-dir
オプションと組み合わせて使用されます。
rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
結論
Rsyncは、ネットワーク接続を介したファイル転送を合理化し、ローカルディレクトリの同期に堅牢性を追加できます。 Rsyncの柔軟性により、さまざまなファイルレベルの操作に適したオプションになります。
Rsyncを習得すると、複雑なバックアップ操作を設計し、転送の方法と内容をきめ細かく制御できます。