特集
» 2008年04月21日 01時00分 UPDATE

Command Technica:はじめてrsyncを使う方が知っておきたい6つのルール (2/2)

[前島梓,ITmedia]
前のページへ 1|2       

リモートホストへのバックアップ/同期

 次のケースは、ローカルマシンのホームディレクトリ以下にあるディレクトリ(ここでは~/dir1/)以下をリモートホスト(ここではxxx.backup.com)に転送する場合です。まずはコマンドから紹介しましょう。

  • sshを用いる場合

$ rsync -av ~/dir1 xxx.backup.com:dir/

  • sshを用いない場合(rshで通信する場合)

$ rsync -ave rsh ~/dir1 xxx.backup.com:dir/


 冒頭に説明した「rsync [オプション] コピー元 コピー先」という構文から少し変化している点が2点あることにお気づきになったと思います。1つは、転送方式としてrshを用いている点です。rsyncでは、リモートシェル(デフォルトではssh)経由でリモートホストと通信できます。以前はrshがデフォルトでしたので、セキュリティ上認証や転送を暗号化したいというニーズから「-e ssh」オプションを付加してsshを用いていましたが、デフォルトでsshが利用されるようになったことで、今後、特別な理由がなければ「-e」オプションの利用機会も減っていくことでしょう。もちろんsshを用いるのであれば、リモートホスト側ではsshサーバを起動し、sshで外部からログインできるようにしておく必要があるのはいうまでもありません。

初出時、デフォルトではrshであるとしていましたが、デフォルトはsshに変更されています。おわびして訂正します。

 もう1点は、コピー先の部分が「リモートホスト名:バックアップ先のディレクトリ」となっている点です。「リモートホスト名:」の部分がないと、ローカルだと解釈されてしまうことは想像がつきますね。ここはそれほど難しくはないでしょう。

 ただし、上記の方法では、リモートホストにもローカルマシンと同じアカウントが存在していることを前提としています。仮にローカルマシンでuser1というユーザー名で作業しているとするなら、リモートホストにもuser1というアカウントがないと上記のコマンドは期待通りには動作しないでしょう。

 そこで、リモートホストに存在するアカウント(ここではbackupuser)でログインするために、「リモートホスト名:バックアップ先のディレクトリ」の部分を「リモートホストに存在するアカウント@リモートホスト名:バックアップ先のディレクトリ」と変えて実行してみます。

$ rsync -av ~/dir1 backupuser@xxx.backup.com:dir/


 これでようやく、あなたのターミナルには、backupuserのパスワードを尋ねるプロンプトが返ってくるはずです。あとはパスワードを入力すれば、転送がはじまるのを確認できるでしょう。また、ログインのたびにパスワードを入力するのが面倒な方は、sshの公開鍵認証を用いてログインするとよいでしょう。その方法については、「rsyncを使った熟練者レベルのバックアップ」で確認できますのでここでは割愛します。

 rsyncに限らず、バックアップ/同期が失敗すると、大きな損失を被る場合もあります。自分の設定に自信がない場合や失敗が許されないような場合は、「--dry-run」オプションを付けて実行することで、rsyncコマンドのテストが行えますので、まずはこれで試してから本番に移るのがよいでしょう。

バックアップ対象の除外

 バックアップなどを行う際、「このファイル形式はバックアップ対象から除外したい」と思うことは多々あると思います。例えば、スワップファイル(.swp)や自動バックアップファイル(.bak)などです。

 指定した条件にマッチするファイルをコピー対象から除外する(または除外しない)ためのオプションとして、「--filter」や、その簡易版といえる「--exclude」「--include」が用意されています。例えば、.tmpファイルを除外したい場合、「--exclude='*.tmp'」と指定します。さらに、除外対象をテキストファイルとして記述しておき、「--exclude-from」「--include-from」といったオプションを使って読み込ませるのもよいでしょう。また、除外対象をファイル形式ではなく、ディレクトリで指定することも可能です。ただし、その場合、パターンが「/」で終っていなければならないので注意してください。例えば、上記のコマンド例で、*.tmpにマッチするすべてのファイルを除外するようにするなら、以下のようになります。

$ rsync -av --exclude '*.tmp' ~/dir1 backupuser@xxx.backup.com:dir/


コピーではなく、同期を実現する「--delete」オプション

 rsyncのデフォルトでは、rsyncを最後に実行した後にコピー元でファイルやディレクトリが削除されても、次回rsyncを実行した際、コピー先でも同じようにそれらのファイルやディレクトリが削除されるようにはなっていません。しかし、コピー元とコピー先を完全に同期させたいというケースもあるでしょう。そうした場合は「--delete」オプションを使用します。このオプションを使用することで、rsyncを最後に実行した後に削除されたコピー元のファイルは、コピー先からも削除されます。

$ rsync -av --exclude '*.tmp' --delete ~/dir1 backupuser@xxx.backup.com:dir/


コピー元とコピー先を入れ替えれば復元に

 すぐ上に示したコマンドは、最初に紹介したものと比べるとかなり長くなっていますが、読み解いてみると、それほど難しいと感じないのではないでしょうか。基本的な構文さえ押さえてしまえば、あとはオプションの意味を逐次確認するだけで、高度なバックアップがコマンドラインからできてしまいます。

 ここまでの解説であなたは、ローカル/リモートを問わず、任意の場所にファイルを転送するための力を手に入れたことになります。では、rsyncを使ってバックアップしたファイルの一部を元に戻すにはどうすればよいのでしょう。はい。簡単ですね。最初の構文、「rsync [オプション] コピー元 コピー先」で、コピー元とコピー先の記述を入れ替えるだけです。上記のコマンド例を利用して話を進めるなら、次のようなコマンドになるでしょう。

$ rsync -av backupuser@xxx.backup.com:dir/ ~/dir1


 今回は基本部分だけを解説しましたが、これだけでも簡単なバックアップ/同期は自分で行えてしまいます。次回は、ハードリンクを使った高度な差分バックアップなど、さらに高度なバックアップ/同期のためのTipsを紹介しましょう。

前のページへ 1|2       

Copyright© 2016 ITmedia, Inc. All Rights Reserved.

Loading

ピックアップコンテンツ

- PR -

注目のテーマ