rsync でディレクトリ間の同期を(バックアップ)とる
rsyncとは
rsync は、サイズがすぐ大きくなるファイルの転送に適したオープンソースのユーティリティです。
backup をとるだけならばディレクトリをtarなどで固めて移動させたり ftp や scp などを使って network 越しにコピーしても同じ効果が得られますが内容の少しの変更でもファイル全体をコピーさせなければならず効率的ではありません。
rsync ならば前回の copy から差分を計算して変更のある部分のみの copy で済むのでnetwork資源を効率よく利用できます。
今回は2台のホスト間でバックアップをとります。 2つのホストには rsyncd を install しておきます。 FreeBSD であれば portinstall コマンドで一発でok。
# portsintall net/rsync
今回は backup 元側で rsyncd をデーモンとして起動します。
設定はユーザ hoge のディレクトリと設定ファイルのあるディレクトリ /usr/local/etc をbackup する設定にします。
access できる rsync クライアントも local ip 192.168.0.0/24 に制限します。 またサーバ側では rsync 接続を受け付けるための port 873 も予め開放しておく必要があります。
設定
backup側
設定ファイル
/usr/local/etc/rsyncd.conf
uid = root gid = wheel #use chroot = yes #max connections = 4 #syslog facility = local5 hosts allow=192.168.0.0/24 [hogebackup] path = /home/hoge [usr_local_etc] path = /usr/local/etc
起動準備
rc.confに以下を追加する
rsyncd_enable="YES"
起動
# /usr/local/etc/rc.d/rsyncd start
これでサーバ側の設定は終わりです。
クライアント側
クライアント側からrsyncクライアントを実行して同期をとります。
hogebackup の実行
# rsync -azv rsync://hostname/hogebackup /home/backup/hoge/
上記コマンドをクライアント側で実行すると rsyncd サーバにある /home/hoge の内容がクライアント側の /home/backup/hoge/ にコピーされます。初めての場合は全てのファイルをコピーするのでファイルの量によっては時間がかかります。
次に usr_local_etc の実行
# rsync -azv rsync://hostname/usr_local_etc /home/backup/etc/
上記コマンドで サーバ側 /usr/local/etc の内容が /home/backup/etc/ にコピーされます。
オプションの意味
- -a, --archive -rlptgoD と同じです。再帰的に全ての情報を維持する手っ取り早い方法です。
- -v, --verbose 転送の間の情報を詳しく表示します。
- -z, --compress 受信側に送信されるファイルのデータを圧縮します。
他にも沢山オプションがあります。通常はファイル内容を暗号化しませんが他のネットワークをまたぐ場合などは -e ssh オプションで 送信内容を暗号化することもできます。
オプションの詳しくはココを見てください。
http://www.infoscience.co.jp/technical/rsync/rsync.html