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で変更しました.