>> HOME >> Linux Tips MENU >> rsync (+ ssh) で高速バックアップ・同期
rsync とは、いわゆるファイル同期ソフトです。Linux/UNIX 上のデーターを(別の Linux/UNIX マシンに)バックアップしたり、2つのマシンのあるディレクトリどうしの内容を同期するのによく使用されます。
ここでは、OpenSSH (+ OpenSSL) を併用して、他の Linux サーバーへ簡単に高速にバックアップする方法を紹介します。
(rsync はデフォルトでは rsh を利用します)

前提条件として ・・・
バックアップ元、バックアップ先のマシンの両方に、rsync 及び OpenSSH (+ OpenSSL) がインストールされており、その後バックアップ元からバックアップ先のマシンに ssh で公開鍵方式によりログインできる環境になっていることが必要です。
(ssh を利用しない場合は rsh でログインできる必要があります)

また、rsync を --deamon オプションで起動すると、rsync サーバーとして利用可能となりますが、ここでは、cron で定期的に実行することにします。

※ 当サイトと同様に Fedora・CentOS をインストールされた場合は、rsync は既にインストールされています。
※ OpenSSH (+ OpenSSL) は『SSHサーバー (OpenSSH)』を参照してください。

1. バックアップ方法
2. rsync の主要なオプション
3. 定期的なバックアップ、同期
1 ) シェルスクリプトを作成
1 ) スケジューラ(cron)への登録
1. バックアップ方法
バックアップ元のマシンから
rsync -avz -e ssh [SRC] [HOST]:[DEST]
を実行します。 例えば、/home/test 以下の内容をバックアップ先のマシン filesrv の /home/backup 以下にバックアップするときは、
rsync -avz -e ssh /home/test/ filesrv:/home/backup/
とします。バックアップ先ディレクトリに書き込める権限が必要となります。
2回目以降の実行時には、更新されたファイル、追加されたファイルのみバックアップされます。
この方法では、2回目以降の実行時にバックアップ元で更新されたファイル、追加されたファイルだけがバックアップ先にコピーされますが、削除されたファイルはバックアップ元でそのまま残ります。 バックアップ元で削除されたファイルをバックアップ先でも削除したい場合には
rsync -avz -e ssh --delete [SRC] [HOST]:[DEST]
と、--delete オプションを付加します。
これでバックアップ元で削除されたファイルは、バックアップ時にバックアップ先でも削除されますので、バックアップ元とバックアップ先が完全に同期されます。
2. rsync の主要なオプション
よく使用しそうなオプションを上げておきます。その他のオプションについては rsync を参照してください。
オプション説明
-vバックアップ時にバックアップしているファイル名を表示する
-r指定したディレクトリ以下の各ディレクトリも再帰的にバックアップする
-lシンボリック・リンクをそのままにバックアップする
(シンボリック・リンク先の内容をコピーせずにリンクのままコピー)
-Hハード・リンクをそのままにバックアップする
-pパーミッション属性を保存したままバックアップする
-o所有者属性を保存したままバックアップ(root のみ可能)
-gグループ属性を保存したままバックアップ
-tタイムスタンプを保存したままバックアップ
-Dデバイスファイルを保存したままバックアップ(root のみ可能)
-zデーターを圧縮して転送する
--existing更新されたファイルだけをバックアップし、追加されたファイルはバックアップしない
--deleteバックアップ元で削除されたファイルはバックアップ先でも削除する
--exclude'PATTERN' PATTERN で指定したパターンにマッチするファイルはバックアップしない
-a上記のオプションのうち rlptgoD を指定する
3. 定期的なバックアップ、同期
1 ) シェルスクリプトを作成
[root@linux ~]# vi rsync.sh 

#!/bin/sh

# 環境変数
# 日付文字列の生成
DATE=`date +"%Y%m%d"`
# パスの設定
PATH=/usr/bin:/bin
# バックアップ元ディレクトリ
SRC_DIR=/home/test/
# バックアップ先ホスト
DEST_HOST=filesrv
# バックアップ先ディレクトリ
DEST_DIR=/home/test/

# バックアップ実行
rsync -avz -e ssh --delete $SRC_DIR $DEST_HOST:$DEST_DIR > /backup.log.$DATE 2>&1
[root@linux ~]# chmod 700 rsync.sh 
2 ) スケジューラ(cron)への登録
[root@linux ~]# crontab -e 

# 毎日 01:00 に自動実行します。
00 01 * * * /root/rsync.sh > /dev/null 2>&1