[an error occurred while processing this directive]
rsync

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


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/

クオートによって囲まれたバッククオートであることに気を付けて下さい
(ブラウザによっては正しく表示されません)。



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


rsync ホームページ