lsyncによるファイル同期・小規模のバックアップ。すごく便利。

lsyncによるファイル同期システムの構築方法をメモがてらに。

エンドユーザが使うサービスdropboxのように非常に小規模のバックアップシステムとして利用が可能です。その他、大規模なシステムのコンテンツ共有の手段としても非常に有効です。
30分もあれば構築ができてしまいます。

下記はDebian 5.0.2 Kernel 2.6.26-2-686 で動かしました。
(debianのバージョンは/etc/debian_versionに書いてあります。)

lsyncはaptで見当たらなかったのでソースのコンパイルから入れました。こっちのほうが早いよ。きっと。

本システムは一台の中でデータのバックアップを取ることを前提にしています。ホストはすべてlocalhostになります。

バックアップのポリシーは次のとおりです。

バックアップ元(FROM) ここから: /root/
バックアップ先(TO) ここへ: /var/tmp/copy

概念としてはrsyncというデーモンを立ち上げてlsyncというプログラムに同期したいもののリストを投げていくという感じです。そのためにrsyncがデーモンで起動していないとlsyncはウンともスンともいいません。

1.lsyncをダウンロード(プログラム本体)

http://sourceforge.jp/projects/freshmeat_lsycnd/resources/

# wget http://freshmeat.net/urls/9db4884fc3b0840e60d3e5fcc95e4a57

2.アーカイブを解凍しconfigure & make & make install

# tar zxvf lsyncd-1.xx.tar.gz
# cd lsyncd-1.xx
# ./configure
# make
# make install

makeでエラーが出ることがある。私の場合はlibxml2とlibxml2-devが足りませんでした。
その場合は apt-get install libxml2; apt-get install libxml2-dev で対処してみてください。

3./etc/rsyncd.conf の作成

/var/tmp/copyにバックアップを取る設定になっています。

uid = root
gid = root
log file = /var/log/rsyncd.log
pid file = /var/log/rsyncd.pid
[data]
    comment = rsync server
    path = /var/tmp/copy
    hosts allow = localhost
    read only = false

詳しく説明するのはしっかりと動いてからのほうがよいように思いますがとりあえずrsync.confの詳細設定はコチラです。

4.rsyncの起動

# rsync --daemon
    • daemon オプションを与えてあげてください。

# ps ax | grep rsync などで起動を確認してください。起動していない場合はrsync.confに間違いがある場合があります。

5.lsyncにバックアップ元の登録

# lsync /root/ localhost::data

上記の意味は /root/ のディレクトリをrsync.confで設定した[data]セクションの設定でバックアップを取るという意味です。rsync.confの設定にできることはコチラに書かれています。

6.やりたかったらどうぞ設定。起動コマンド /etc/init.d/rsync スクリプト

マシンが再起動したりした際にrsyncが動くようにするための第一ステップです。
これは動く最低限度のスクリプトです。改良してください。

#! /bin/bash

start() {
    /usr/bin/rsync --daemon
    echo "Start rsync."
}
stop() {
    if [ `pidof rsync` ]; then
        /bin/kill `pidof rsync`
    fi
    echo "Stop rsync."
}
restart(){
    stop
    start
    echo "Restart rsync.";
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    *)
        echo "Usage: rsync [ start|stop|restart ]"
        exit 1
esac

exit $?

lsyncの設定もこのスクリプトの中に投げてやればよいでしょう。そんなに難しくないです。
/etc/lsyncd.conf.xmlを書いて実行する方法もありますので上記の方法を軸にして最適な方法を見つけ出してください。