rsyncコマンド - ディレクトリを同期する
rsyncコマンドを使うとディレクトリを同期できます。同期とは、二つのディレクトリを同じ状態にすることです。
これには、ディレクトリをコピーする機能も含まれているので、rsyncコマンドは、ディレクトリのコピーにも利用します。
rsyncは、差分だけを転送してくれます。ですので、大きなディレクトリでも、変更分だけが転送されるので、パフォーマンスが良いです。
rsyncを使ってディレクトリを同期する
まずは、rsyncを使って、ディレクトリを同期する方法を紹介します。これが、意外と曲者です。
# ディレクトリをコピーする。src_dirの中身をdist_dirの中に同期する rsync -av src_dir/ dist_dir
rsyncには、コマンドオプションがたくさんありますが、まずは「-a」と「-v」だけを覚えておきましょう。
「-a」オプションは、他のオプションの組み合わせで、良さげに同期してくれるオプションです。
「-v」オプションで、どのファイルを同期したかが出力されます。
ここが最も大事ですが、rsyncでは、ディレクトリ名の後ろに「/」がつくか、つかないかで意味が変わってきます。
ここをしっかり理解しておかないと、rsyncを実行するたびに、「あれれ」となります。
rsyncでは、同期元のディレクトリの末尾に「/」が付く場合は、「ディレクトリの中身を」ということを意味します。
同期先は、単にディレクトリ名を書きます。
上記は、src_dirの中身をdist_dirの中に同期するという意味になります。
コピー先のディレクトリがない場合は、自動的に作成されます。
もし同期元のディレクトリ名の末尾に「/」がない場合は「src_dir」を「dist_dir」の中に同期するという意味になります。「dist_dir」の中に「src_dir」ができてしまいます。
ローカル・リモート間でディレクトリを同期する
rsyncは、ローカルの同期だけではなく、SSHプロトコルを使ったローカル・リモート間の同期をサポートしています。これは、バックアップに活用できます。
ユーザー名、ホスト名、ポート番号の指定方法を記述しておきます。それ以外は、ローカルでの同期と同じです。
rsync -e "ssh -p 55555" -av /foo/src_dir/ kimoto@192.168.1.1:/bar/dist_dir
ユーザー名・ホスト名の書式
リモートホストは以下のような書式で書きます。
ユーザー名@ホスト名:ディレクトリ
ポート番号の指定
ポート番号の指定は普通のオプションにはなくて、-eオプションでsshコマンドのオプションとして含める必要があります。
-e "ssh -p ポート番号"
バックアップ運用の自動化を行いたい
バックアップ運用の自動化を行いたい場合は、バックアップサーバーでSSHの秘密鍵・公開鍵のペアを作って、それを使って、接続します。鍵があると、パスワードが必須ではないので、バックアップ運用を自動化できます。
SSHの鍵のペアの作り方は、別のところで、解説します。