Command Technica:はじめてrsyncを使う方が知っておきたい6つのルール (2/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で外部からログインできるようにしておく必要があるのはいうまでもありません。
もう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を紹介しましょう。
関連記事
rsyncを使った熟練者レベルのバックアップ
rsyncを使いこなせば、あなたが想定するバックアップのニーズのほとんどに対応できるようになる。ここでは、あなたをrsyncマスターにするためのポイントを解説する。
FreeNASで家庭内LANにストレージを簡単に追加する
FreeNASは企業での利用に実力を発揮するだけでなく、普通のSOHOユーザーでも十分に活用できる使いやすさも備えている。ここでは、rsyncによるバックアップ用およびFTPサーバとして簡単に使えるNASデバイスを、個人用のLANに追加する方法を紹介する。
Copyright© 2010 ITmedia, Inc. All Rights Reserved.


『情報システム部門』のあるべき姿は?
MONOist執筆陣×PTC対談企画 好評の第2弾
IBM スマートなモノづくり PLMフォーラム








世界で勝つ 強い日本企業のつくり方:利用契約の検討――グローバルクラウドで失敗しないために(前編)
IT投資の新方程式:「Twitter使ってます」――現役MS社員が“社員力”を語る(前編)
産業構造を変えるか:「住宅クラウド」の衝撃
オルタナティブな生き方 栗原進さん:ネットでリアルを楽しくしたい
最強最速アルゴリズマー養成講座:トップクラスだけが知る「このアルゴリズムがすごい」――「探索」基礎最速マスター