kilin> how to> rsync

Linux rsync

(2009.1.25-2015.5.20)

rsyncコマンドでデータのバックアップをとる。
(環境) CentOS 5.1-5.5

(以下プロンプトが#ならroot,$なら普通のユーザー)

インストール:
CentOS 5.1には必要なものは全て標準でインストールされている。また,必要なサービスも全て稼動している。
以下,バック対象のサーバーをa.com,バックアップデータを保存するサーバーをb.comとする。
同期
a.comで次のコマンドを実行すると,a.comのabcディレクトリとb.comの/backup/a/abc/ディレクトリの内容が完全に一致するように,a.comからb.comにデータがコピーされる。(同期)。
# rsync -a --delete abc/ b.com:/backup/a/abc/
注意)
  1. b.comの/backup/a/が存在しないとエラーになる。mkdir -p /backup/a/で/backup/a/を作っておくとよい。
  2. コピー元abc/の末尾の/をつけないと,/backup/a/abcの中にabcというディレクトリが作られて同期が行われる。
  3. 除外したいファイルやディレクトリは--excludeオプションで。詳しくはman rsyncで。
  4. b.comのrootのパスワードを求められる。RSA鍵でsshログインできるように設定しておけば,rsyncで接続するする度にパスワードを求められなくなる。
復元
a.comでabcディレクトリを作成して次のコマンドを実行すると,b.comにバックアップディレクトリabcを復元することができる。
# mkdir abc
# rsync -a b.com:/backup/a/abc/ abc/
また,次のようにファイル単位の復元もできる。(aaa.txtは存在しなくてもよい)
# rsync -a b.com:/backup/a/abc/aaa.txt aaa.txt
自動実行:
# crontab -e
分 時 日 月 曜日 コマンド
を記述すれば(使い方はviと同じ。/var/spool/cron/ユーザ名 に保存される。),コマンドを定期的に自動実行させることができる。
(1) 全て該当させる場合は * (アスタリスク,ワイルドカード)を指定する。例えば,
01 * * * * コマンド
は、全ての曜日、全ての月、全ての日、全ての時刻の 1分に root 権限でコマンドを実行するということ。
(2)分 時 日 月 曜日 指定の詳細。

0~59で指定。*で全指定。

0~23で指定。*で全指定。

1~31で指定。*で全指定。

1~12で指定。*で全指定。
曜日
0~7で指定。0,7が日曜日、1が月曜日、6が土曜日。*で全指定
例:
5 * * * * コマンド
毎時5分にコマンドを実行。
*/10 * * * * コマンド
10分ごとにコマンドを実行。
0,10,30 * * * 1-5 コマンド
月曜から金曜は毎時0分と10分と30分にコマンドを実行。
5 * * * 0,2,5-6 コマンド
日,火,木~土曜日の毎時5分にコマンドを実行。
リスト,範囲,間隔,複合
例にあるように,分時日月曜の指定には,リスト(0,10,30など),範囲(1-5など),間隔(*/10など),リストと範囲の複合を使うことができる。

参考

はじめてrsyncを使う方が知っておきたい6つのルール(http://www.itmedia.co.jp/enterprise/articles/0804/21/news013.html) 2008.8現在
rsyncを使った熟練者レベルのバックアップ(http://www.itmedia.co.jp/enterprise/articles/0707/19/news059_3.html) 2008.8現在
cronとは (http://tech.bayashi.net/svr/doc/cron.html) 2008.8現在