lsyncdのインストールと設定
インストール
lsyncdをapt-getでインストールしてとりあえずバージョンの確認,恐らく2.1系列だと思われる.$sudo apt-get install lsyncd $lsyncd --version
設定
今回は,異なるストレージをまたぐものの,外部のマシンと同期するわけではないローカルディレクトリの同期であるため設定もシンプルなはず..まず,設定ファイルを作成し,編集します.設定ファイルはサンプルをコピーし,編集します.設定ファイルの場所はデーモンのファイル/etc/init.d/lsyncdに記載されています.
cat /etc/init.d/lsyncd -省略- PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="synchronization daemon" NAME=lsyncd DAEMON=/usr/bin/$NAME CONFIG=/etc/lsyncd/lsyncd.conf.lua -省略-
CONFIGの位置ですね.これを書き換えても良いかと思いますが今回はコレを使います.
$sudo cp /usr/share/doc/lsyncd/examples/lrsync.lua /etc/lsyncd/lsyncd.conf.lua $sudo emacs /etc/lsyncd.conf File Edit Options Buffers Tools Conf Help ---- -- User configuration file for lsyncd. -- -- Simple example for default rsync. -- settings { logfile = "/var/log/lsyncd.log", ←追記 statusFile = "/tmp/lsyncd.stat", statusInterval = 1, } sync{ default.rsync, source="/mnt/storage/", ←変更(元ディレクトリ) target="/mnt/backup/", ←変更(コピー先ディレクトリ) 以下,追記 rsync = { compress = false, _extra = { "--delete", "-a", "exclude=*~", } } ここまで追記 }
settingsの部分はlogfileを追記して,ログを記録するようにしましょう.あとはこのままで良いでしょう. 詳細はLsyncd 2.1.x ‖ The Configuration Fileで解説されています.
次のsyncではミラーリングするディレクトリ同士を個別に記述します.sourceとtargetを逆に書いてしまうと悲惨なことになるから注意ですね.毎回緊張します. オプションは,アーカイブすなわちファイルパーミッションなども維持したコピーを行う-aと元が削除されたらミラー先も削除する--deleteを付随させます. またemacsなどが出力する一時ファイル*~は除外します.
また,以前はsettings={}と記述したいようですが=(イコール)はいらないみたいですね.
rsyncオプションの書き方の注意
rsyncの2.1.xと2.0.xではrsyncオプションの書き方には大幅な変更が加えられているようです.rsync2.0.xまではrsyncへのオプションを
rsyncOps={"-a", "--delete"}などと書いていたようですが,2.1.xからはLsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behaviorにあるように,rsync={}で書くようになっているようです.
もし,2.0.xの書き方の場合,次のlsyncdの実行時に
Error: error preparing /etc/lsyncd/lsyncd.conf.lua: Parameter "rsyncOps" unknown. (if this is not a typo add it to checkgauge)
とエラーになると思います.
開始
lsyncdを開始します.$sudo service lsyncd start
ミラーリングできてるか,ファイルを作成するなどして確認します.
inotifyの上限変更
lsyncdはinotifyでファイルの変更を検知しているようですが,たくさんのファイル変更には対して限界値が設定されています.限界を超えると同期がストップするようです.その際,ログ/var/log/lsyncd.logには次のように記載されていました.Mon Mar 23 12:44:00 2015 Error: Terminating since out of inotify watches. Consider increasing /proc/sys/fs/inotify/max_user_watches
/proc/sys/fs/inotify/max_user_watchesに記載された値が限界値のようです. これを大きくしてみましょう.初期の8192の10倍,81920と設定します.
/etc/sysctl.confもしくは/etc/sysctl.d/以下の*.confファイルに
fs.inotify.max_user_watches=81920などと書き換えもしくは追記するという方法の紹介を見かけます. (例えば,CentOS 6 でも /etc/sysctl.d/ は使える(ipv6 無効化とか) lsyncd設定)
ただし,今回は
$sudo sysctl -w fs.inotify.max_user_watches=81920で変更しました.