プログラム開発の情報や、雑記を投稿しているサイトです。

rsync – 高速なファイル同期

linux-tips

rsyncは元々は『低速回線を使って高速にファイルを転送・同期する仕組み』として生まれました。
そのアルゴリズムはこの目的に対して極めて優れており、1996年に Andrew Tridgell と Paul Mackerras に発表されて以来、今までに広く使われています。

使い方

rsyncコマンド
rsync [オプション] コピー元 コピー先
rsyncコマンドは、リモート、ローカルにかかわらずディレクトリやファイルを高速にコピーするコマンドです。
ローカルとリモート間のディレクトリ同期やバックアップによく使われます。

オプション

-a:コピー元のディレクトリを再帰的にオーナー・グループ・パーミッション・タイムスタンプをそのままコピーします。オプション -rlptgoD と同じです。
-g:グループをそのままコピーします。
-l:シンボリックリンクをそのまま(ターゲットの指定を変えずに)コピーします。
-o:オーナーをそのままコピーします。
-p:パーミッションをそのままコピーします。
-r:ディレクトリ内を再帰的にコピーします。
-t:タイムスタンプをそのままコピーします。
-u:コピー元とコピー先を比較し、追加・更新されたファイル・ディレクトリのみをコピーします。
-v:コピーしているファイル名やバイト数などの情報を表示します。
-z:通信を圧縮します。
-4:IPv4を使用します。
-6:IPv6を使用します。
--delete:コピー元にない(削除された)ファイルをコピー先で削除します。コピー元とコピー先を同期します。

使用例

以下ではこれらの使用方法を例示しながら、rsyncコマンドについて解説します。

ローカルのディレクトリを高速にバックアップ

ディレクトリ(hoge)をバックアップディレクトリ(backup)にコピーします。

ローカルのディレクトリをリモートマシンにコピー

ローカル環境のディレクトリをリモートマシン先(IPアドレス:zzz.yyy.xxx.www)にコピーします。
ソースのバックアップや、環境を複製する場合など、最もよく使う例となります。
-z オプションを利用して通信を圧縮します。

ローカルのディレクトリとリモートマシンと同期

ローカルのディレクトリとリモートマシンのディレクトリを同期する場合は、--delete オプションを利用します。
こうすることで、ローカルとリモートマシンのディレクトリを全く同じ状態に同期します。

※ローカルに存在しないファイルがリモートマシン上にある場合は、そのファイルは削除されます。
完全な同期を必要としない場合以外は、--delete オプションは利用しないほうが安全です。

SSHのオプションを指定して、ローカルのディレクトリをリモートマシンにコピー

sshのオプションを指定する場合は、-e オプションを利用します。

SSHのセキュリティ強化のため通信のポート番号を変更している場合、ポート番号を明示してrsyncコマンドを実行します。
以下は、ポート番号を54321に設定している例です。

「sshコマンド」の部分はシングルクォーテーションで囲います。
sshコマンドの他のオプションも同様の方法になります。

ログオプションの利用

rsyncでファイル転送を行った後に、どのファイルが転送されたのか確認したい場合があります。
rsyncのオプションには--log-fileがあり、これを指定することにより、ログに出力されます。