rsync の使用例
rsync のおもしろい使い方を見つけたら、rsync-bugs@samba.org 宛てにメールで送って下さい。このページに掲載します。
スペア・ディスクへのバックアップ
自分のマシンで rsync を使ってローカル・バックアップを試してみました。
メイン・ディスクにある全ての内容のバックアップを別のスペア・ディスクに取ります。
夜にクーロンでメイン・ディスクのバックアップを行っていました。
そこで使ったスクリプトはこんな感じです。
#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
mount /backup/$d
rsync -ax --exclude fstab --delete /$d/ /backup/$d/
umount /backup/$d
done
DAY=`date "+%A"`
rsync -a --delete /usr/local/apache /data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY
最初の部分はスペア・ディスクでバックアップを行っています。二番目の
部分では日毎のディレクトリに重要部分のバックアップを取っています。
また、ssh を使った rsync でリモートのマシンに重要部分のバックアップを取っています。
vger CVS ツリーのミラーリング
vger.rutgers.edu の CVS ツリーは、以下のスクリプト使った anonymous rsync によって、
cvs.samba.org にミラーリングされています。
#!/bin/bash
cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin
RUN=`lps x | grep rsync | grep -v grep | wc -l`
if [ "$RUN" -gt 0 ]; then
echo already running
exit 1
fi
rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog
sum1=`sum $HOME/ChangeLog`
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`
if [ "$sum1" = "$sum2" ]; then
echo nothing to do
exit 0
fi
rsync -az --delete --force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
exit 0
何か変更があったかどうかを決める ChangeLog の初期 rsync に特に注意して下さい。
これは抜けることがありますが、vger で rsyncd は cvs 領域での実行毎に完全な
リストを構築していることを示します。ほとんどの時間は何も変更がないので、
ChangeLog に変更があるときにだけ、rsync をフルに動かすことで vger での時間を
節約したかったのです。これはかなりの助けになるでしょう。なぜなら vger は
少ないメモリーで重い負荷を生じることなく、毎時巨大なツリーで過度のリスト表示が
行われなくて済むからです。
家で自動バックアップ
毎晩モデムを使って妻のホームディレクトリにバックアップを取るために
rsync を使っています。走っているクーロンはこんな感じです。
#!/bin/sh
cd ~susan
{
echo
date
dest=~/backup/`date +%A`
mkdir $dest.new
find . -xdev -type f \( -mtime 0 -or -mtime 1 \) -exec cp -aPv "{}"
$dest.new \;
cnt=`find $dest.new -type f | wc -l`
if [ $cnt -gt 0 ]; then
rm -rf $dest
mv $dest.new $dest
fi
rm -rf $dest.new
rsync -Cavze ssh . samba:backup
} >> ~/backup/backup.log 2>&1
このスクリプトのほとんどは rsync とは関係ありませんが、単にスーザンの日毎の
バックアップを ~susan/backup/ ディレクトリに作るので、過去一週間のバージョンを
取り出すことができます。最後の行では rsync が samba というホストに接続して
モデムを通じて彼女のディレクトリの rsync を行っています。ここで使っている
-C というオプションは、バックアップする必要のないもののために、.cvsignore に
エントリーを追加しています。
Fancy footwork with remote file lists
リモートシェル(rsh や ssh)を走らせた上で、リモートのファイルリストとして
シェルコマンドを使うことができるという、rsync の機能はあまり知られていないのが
事実です。シェルコマンドは rsync が呼び出される前にリモートシェルによって
処理されなければなりません。例えば、これを見ればわかります:
rsync -avR remote:'`find /home -name "*.[ch]"`' /tmp/
クオートによって囲まれたバッククオートであることに気を付けて下さい
(ブラウザによっては正しく表示されません)。
|