Pages

Feb 28, 2004

rsyncを使ってバックアップ

様々な利点がありますが、自分にとってのrsyncの利点は
・転送にsshを使える
・転送するファイルの圧縮/解凍機能により通信量を抑えることができる。
・インクリメンタルにバックアップできる。
です。


インストール
rsyncは頻繁にセキュリティホールが見つかっているので必ず最新のものを使ってください。
またrsyncを使ってファイルをやり取りするホストの両方にrsyncがインストールされて
いる必要があります。
SUN Solarisの場合
ここからパッケージをダウンロード。
使用法
1,SSHまずSSHの公開鍵認証ができるように下準備をします


[root@portalroot]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
46:72:c8:a2:e2:86:3c:5f:26:09:7d:9d:87:f9:a7:46 root@portal


サーバー側では以下の点を確認します。
・公開鍵認証の有効化がされている事
sshd_config内に以下の記述があることを確認してください。
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
・クライアントのid_rsa.pubをサーバのauthorized_keysに追加
more id_rsa.pub >> /root/.ssh/authorized_keys
ここまで出来たらsshdをリスタートしてサーバにsshをしてみてください。
パスワードを聞かれなくなったら作業成功です。
(上手くいかない場合:たいていの場合"ssh -vvv "してみて出力を丁寧に読めば解決するはずです。)
2,ファイルコピー
下準備ができたら実際にコピーを行ってみます。
abcというマシンの/tmp以下をローカルの/exportにコピーしたいときは
Shell$ rsync -arvez ssh root@abc:/tmp/ /export
です。
オプション
-a archive-mode
-z 転送時ファイルを圧縮します。プレーンテキストのファイルなどであれば転送量を1/10にカットできます。
-e ssh 転送経路の指定、この例ではSSHのコネクションの上にrsyncのデータを流します。
-r 再起的にコピー
その他便利なオプションはここで確認
3,自動化
以下の様なスクリプトをcrontabに登録して使ってます。


------------------------------------------------------------------------
#!/usr/bin/bash
lock="/tmp/cw-sync.lock"
logfile="/var/adm/cw_sync.log"
rsyncpath="/usr/local/bin/rsync"
echo "------------------------------------------------------" >> $logfile
echo "started:`date +%Y%m%d\ %H%M%S`" >> $logfile
if [ -e $lock ] ; then
echo "finished: Error [ Other rsync process is already running ]" >> $logfile
echo "finished:`date +%Y%m%d\ %H%M%S`">> $logfile
/usr/ucb/mail -s "cw_sync failed" root
exit 1
else
touch $lock # lock process
$rsyncpath -arvze ssh root@tkyo01:/export/data/ /export/home/tkyo01/ >> $logfile
echo "finished:`date +%Y%m%d\ %H%M%S`">> $logfile
fi
rm -f $lock
------------------------------------------------------------------------