Linux rsync

(2009.1.25-2022.8.15)

rsyncコマンドでデータのバックアップをとる。

(環境) CentOS 5.1-5.5

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

rsync

インストール

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=ファイル名 で。これは幾つ書いても良いが,多い場合は次の--exclude-fromを使った方がよい。*以下,ファイルはファイルまたはディレクトリの意味。

    4. 除外したいファイル*が複雑な場合は,テキストファイルに記述して--exclude-from=テキストファイル名

      • 一行に1ファイル書く。空白を含むファイル名*もダブルまたはシングルコーテーションで括らない。

      • 先頭に/をつけると,コピー先ディレクトリ(例ではb.com:/backup/a/abc/)の階層という意味。/がないと任意の階層。

      • ワイルドカード*と?が使える。*は任意の文字,?は任意の一文字。

      • (例)/$RECYCLE.BIN コピー元ディレクトリの最上位の階層の/$RECYCLE.BINファイル*

      • (例)/System Volume Information コピー元ディレクトリの最上位の階層のSystem Volume Informationファイル*

      • (例)/OneDrive/.* コピー元ディレクトリの最上位の階層のOneDriveディレクトリ直下の.で始まるファイル*

    5. b.comのrootのパスワードを求められる。RSA鍵でsshログインできるように設定しておけば,rsyncで接続するする度にパスワードを求められなくなる。

    6. RSAの秘密鍵を指定するには,-eオプションをつかう。例
      rsync -e "ssh -i .ssh/id_rsa2" -a root@b.com:/root/ b/root/

復元

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

定期実行 cron table

# crontab -e

分 時 日 月 曜日 コマンド

を記述すれば(使い方はviと同じ。/var/spool/cron/ユーザ名 に保存される。),コマンドを定期的に自動実行させることができる。$ crontab -eだとユーザーごと。

全て該当させる場合は * (アスタリスク,ワイルドカード)を指定する。例えば,

01 * * * * コマンド

は、全ての曜日、全ての月、全ての日、全ての時刻の 1分にコマンドを実行するということ。

分 時 日 月 曜日 指定の詳細

    • 分 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など),リストと範囲の複合を使うことができる。

参考

  1. はじめてrsyncを使う方が知っておきたい6つのルール(http://www.itmedia.co.jp/enterprise/articles/0804/21/news013.html) 2008.8現在

  2. rsyncを使った熟練者レベルのバックアップ(http://www.itmedia.co.jp/enterprise/articles/0707/19/news059_3.html) 2008.8現在

  3. cronとは (http://tech.bayashi.net/svr/doc/cron.html) 2008.8現在