rdist,rsync


rdist

rdist は、マシン間でファイルの同期を取るためのツールです。

インストール

rdist のホームページは、
http://www.magnicomp.com/rdist/rdist.shtml
があります。rdist がインストールされていないときは、上記の URL より、 最新の rdist をダウンロードします。
ダウンロードしたら、解凍・展開し、ディレクトリを移動します。
% tar xvfz rdist-6.1.5.tar.gz
% cd rdist-6.1.5
ここで、付属の README を読み、config/"os-type".h に使用している OS 用の コンフィグファイルが存在するか確認します。(FreeBSD3.xはありませんでした)
インストールは以下のように make , make install を実行します。
% make
% su
Password:
# make install
以上で rdist のインストールは終了です。

使用方法

詳しい使用方法は、オンラインマニュアル(man rdist)を御覧ください。
最も簡単な使用方法は、例えば
% rdist -c ~/public_html matsu
と入力します。これにより、~/public_html 以下の全てのファイルを matsu というホストの同じもの(matsu:~/public_html以下)と比較し、 タイムスタンプが異なっていたら、こちらから向こうへコピーします。 (逆向きにはコピーされません)
出てくるメッセージで installing というのは、今まで向こうに無かったファイルを 送っていること、updating というのは、向こうにあるファイルを更新していることを 意味しています。

これを、ファイル単位で送るには、例えば
% rdist -c ~/public_html/index.html matsu
とします。こうすれば、~/public_html/index.html を matsu:~/public_html/index.html に送ることができます。

もっと複雑なことをしたい場合には、distfile に rdist の処理方法を記述します。 例えば、distfile として以下のような記述をします。
~/public_html -> matsu
        install -oyounger ;
この後、
% rdist -f distfile
と入力します。これにより、~/public_html 以下の全てのファイルを matsu という ホストの同じものと比較し、こちらの方が新しい(younger)場合に限って、 向こうにコピーします。向こうの方が新しいファイルについては、以下のような 警告メッセージを出します。
foo.txt: Warning: remoto copy is newer
また、いくつかのディレクトリを指定したいときは、次のように括弧でくくります。
(~/public_html ~/foo) -> matsu
        install -oyounger ;
別の distfile の例を挙げます。
~/public_html -> matsu
        install -oyounger,nochkgroup,remove,noexec ;
        except ~/public_html/index.html ;
        except ~/publib_html/countfile ;
remove はこちら側に無いファイルは消すということです。 nochkgroup はグループ属性を無視します。 noexec は実行ファイルをコピーしません。 except はそのファイルを除くという意味です。
distfile の記述の仕方は、他にもいろいろとあるので、 詳しくはオンラインマニュアルを御覧ください。

注意

リモートホスト間で使用する r コマンドなので、.rhosts の設定が必要です。 root権限で実行する場合には、root のホームディレクトリに .rhosts を作成し、 パスワード無しでリモートホストにログインできるようにしなければなりません。
このため、セキュリティには特に注意が必要です。
ちなみに当研究室では、次に説明する rsync というものを使用しています。 これは ssh と併用できるため、セキュリティ面では rdist より安全です。

rsync

rsync は rcp を非常に強力にしたようなものです。特に ssh と併用する場合には、 rdist より便利です。また、単なる cp の強化版としても使えます。

インストール

rsync のホームページは、
http://samba.anu.edu.au/rsync/
http://rsync.samba.org/
といったものがあります。samba で有名なところです。
ここでは、上記の URL のリンク先より、rsync-2.3.2.tar.gz をダウンロード しました。ソースファイルをダウンロードしたら、解凍・展開してディレクトリを 移動します。
% tar xvfz rsync-2.3.2.tar.gz
% cd rsync-2.3.2
インストールは簡単で、以下のように configure スクリプトを実行し、 make , make install を実行します。
% ./configure
% make
% su
Password:
# make install
以上で、rsync のインストールは終了です。

使用方法

詳しい使用方法は、オンラインマニュアル(man rsync)を御覧ください。 いろいろなオプションがありますが、代表的なものを以下に列挙します。
-a      ファイルについての情報を保つ(archive)
-u      より新しければ更新しない(update)
-v      転送のスピードアップ(verbose)
-c      チェックサム使用(chekcsum)
-z      データを圧縮して転送する(compress with zlib)
-b      古いファイルは ~のついた名前で残す(backup)
-l	コピー元がsymbolic linkの場合、コピー先でもsymboliexc linkを作成する
-e ssh  ssh を通信に使用(デフォルトでは rsh)    
例えば、ユーザ sakai のホームディレクトリ(/home/sakai)以下のファイル全てを ホスト slave の /home1/sakai/ 以下に転送したい場合には、以下のように 実行します。
% rsync -auvvz -e ssh /home/sakai/ slave:/home1/sakai/
ここで注意点として、コピー元ディレクトリ名の末尾には、必ず / を付けておきます。 またこの場合には、こちらのホストから向こう(slave)のホストへ、ssh を使用した パスワード無しログインが出来るように設定しておく必要があります。この設定方法に ついては、ここを御覧ください。
また、こちら側のホストに無くて、向こうのホストにあるファイルは消去するように する(ファイルを同期させる)には、以下のように --delete オプションを付けます。
% rsync -auvvz -e ssh --delete /home/sakai/ slave:/home1/sakai/
当研究室では、以下のようなシェル
#!/bin/csh
foreach USER ( `ls /home` )
    /usr/local/bin/rsync -auvvz -e ssh --delete /home/$USER/ slave:/home1/$USER/
end
を cron で実行させることにより、ユーザのホームディレクトリをバックアップ しています。
なお、こちらのホストから向こう(slave)のホストには root で ssh による パスワード無しログインが出来る必要があります。

戻る

sakai@oak.eg.t.kanazawa-u.ac.jp
Last modified: Sun Jan 9 06:16:11 JST 2000