lsyncdでリアルタイムrsync
- Website
- http://code.google.com/p/lsyncd/
- 同期元ディレクトリ内のファイルやディレクトリに更新があると、リアルタイムに同期先のディレクトリと同期する。
-
lsyncd
は、ファイルシステムの更新をリアルタイムに監視し、更新があるとrsync
コマンドで同期する。 - ファイルシステムの更新を監視する機能は、Linux カーネル 2.6.13 で導入された
inotify
を利用している。
lsyncd
は、バージョン 1系 と 2系 で設定ファイルの記述方法が異なる。
- バージョン1系は xml で記述。
- バージョン2系は lua で記述。
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
バイナリダウンロード
- lsyncd-1.42-el5-i386.tgz (RHEL5/CentOS5 i386 バイナリ, サイズ:40Kb)
- lsyncd-1.42-el5-x86_64.tgz (RHEL5/CentOS5 x86_64 バイナリ, サイズ:44Kb)
- libxml2 パッケージが必要。
yum install libxml2
使い方
/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 に書かれている。