lsyncdでリアルタイムrsync

提供:maruko2 Note.
移動: 案内, 検索
Website
http://code.google.com/p/lsyncd/

lsyncd は、バージョン 1系 と 2系 で設定ファイルの記述方法が異なる。

Linux Kernel 2.6.13 で導入された inotify を利用しているため、Kernel 2.6.13 以上の Linux ディストリビューションでないと lsyncd は動作しない。

目次

lsyncd バージョン1系

インストール

lsyncd バージョン1系 は libxml2-devel パッケージが必要。

ソースコードを解凍し make && make install で OK。設定ファイル lsyncd.conf.xml があるので /etc/ にコピーする。

make
make install
cp lsyncd.conf.xml /etc/

インストールされるファイル

/usr/bin/lsyncd
/usr/share/man/man1/lsyncd.1
/usr/share/man/man5/lsyncd.conf.xml.5

バイナリダウンロード

使い方

/path/to/source/ ディレクトリ内に更新があると、/path/to/target/ ディレクトリと同期する。

lsyncd /path/to/source/ /path/to/target/

ローカルディスクだけでなく、リモートの rsyncd デーモンと同期も可能。(rsyncd デーモンの設定方法

lsyncd /path/to/source/ 192.168.0.1::target/

lsyncd はファイル&ディレクトリの更新を監視しているだけで、実際に同期するのは rsync なので、同期先の rsync は Linux である必要はない。

lsyncd.conf.xml

リアルタイムに更新を監視するには lsyncd をデーモンで動作させないと意味が無い。

/etc/lsyncd.conf.xml

<lsyncd version="1">
<settings>
	<binary filename="/usr/bin/rsync"/>
	<logfile filename="/var/log/lsyncd.log"/>
	<pidfile filename="/var/run/lsyncd.pid"/>
	<callopts>
		<option text="-a"/>
		<option text="--delete"/>
		<exclude-file/>
		<file-filter/>
		<source/>
		<destination/>
	</callopts>
</settings>
<directory>
	<source path="/path/to/source/"/>
	<target path="192.168.0.1::backup/"/>
</directory>
</lsyncd>

/etc/init.d/lsyncd

CentOS 5 の起動スクリプトの例

#!/bin/bash
# chkconfig: - 85 15
# description: lsyncd
 
RETVAL=0
prog="/usr/bin/lsyncd"
pidfile="/var/run/lsyncd.pid"
 
. /etc/rc.d/init.d/functions
 
start() {
	echo -n "Starting $prog:"
	daemon $prog
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && touch $pidfile
	return $RETVAL
}
stop() {
	echo -n "Stopping $prog:"
	killproc $prog
	RETVAL=$?
	echo
	rm -f $pidfile
	return $RETVAL
}
case $1 in
	start  ) start ;;
	stop   ) stop ;;
	restart) stop && start ;;
	*)
		echo "Usage: $0 {start|stop|restart}"
		exit 1
esac

起動項目に追加するため、次のコマンドを実行する。

vi /etc/init.d/lsyncd
chmod a+x /etc/init.d/lsyncd
chkconfig --add lsyncd
chkconfig lsyncd on

lsyncd バージョン2系

インストール

RHEL では rpmforge レポジトリにパッケージがあるので利用する。

yum install lsyncd

lsyncd.conf

/usr/share/doc/lsyncd/lrsync.lua または Manual to Lsyncd Version 2.0 (code.google.com) を参考に /etc/lsyncd.conf を作成する。

リモートの rsyncd デーモン[1]と同期させる例。

settings = {
        logfile = "/var/log/lsyncd.log",
        statusFile = "/var/log/lsyncd.stat",
        statusInterval = 1,
}
 
sync{
        default.rsync,
        source = "/source/",
        target = "foo@192.168.1.2::Module/path/to/",
        rsyncOps = {"-a",
                "--numeric-ids",
                "--delete",
                "--port=10873",
                "--password-file=/etc/rsync.passwd",
                },
        exclude = "/path/to/exclude/*",
        maxDelays = 10
}

ディレクトリ /usr/share/doc/lsyncd/ には rsync 以外のコマンドを lua 言語で利用する例の書かれたファイルがある。

lsyncd.conf を利用しデーモンモードで起動させるには、次のようにする。

[shell]# lsyncd /etc/lsyncd.conf

監視するファイル数制限を増やす

監視するディレクトリ内のファイルが増えると、同期できなくなりログにエラーが記録される。

Tue Feb 22 14:09:07 2011: ERROR: Cannot add watch /path/to/source/foo/bar (28:No space left on device)

監視するファイル数を増やすには inotify のカーネルパラメーターを増やす。 /etc/sysctl.conf

fs.inotify.max_user_watches = 30000

有効にするため、sysctl -p コマンドを実行する。

sysctl -p

なお、inotify 関連のカーネルパラメーターは /proc 以下のファイルに書かれている。

/proc/sys/fs/inotify/max_queued_events     16384
/proc/sys/fs/inotify/max_user_instances      128
/proc/sys/fs/inotify/max_user_watches       8192

詳細は man inotify に書かれている。

脚注

  1. rsyncd デーモンの設定方法
LINEで送る このエントリーをはてなブックマークに追加
個人用ツール
名前空間
変種
表示
操作
案内
ツールボックス

注目のページ

このサイトのはてなブックマーク数