#18 lsyncdで同期の上限ファイル数を超えた場合の対策

icon incmplt - Info Circus が 2024/07/21 19:57 に投稿

lsyncdを使用している場合に、監視間隔の間に大量のファイルが変更された場合、以下のようなメッセージを出力してlsyncdが停止する場合がある。

最悪の場合には、これ以上同期することができず lsyncdがダウン。手動で再起動しようとしても、同じメッセージが表示されてすぐに停止して復旧できなくなる。

Mon Jan 21 13:21:30 2019: ERROR: Cannot add watch /path/to/file/ (28:No space left on device)

次のようなときに、inotifyの値を超えてしまいlsyncdが停止する可能性がある。

  • tar や zip などで、大量のファイルを展開した場合
  • 大量のファイルを一気に削除した場合

これはlsyncdが、inotifyを使用しており、inotifyで使用できるファイル数が /proc の max_user_watches の数字以上の数を扱わないためである。

max_user_watches の確認方法は、次の通り。

# cat /proc/sys/fs/inotify/max_user_watches
8192

一時的に max_user_watches を変更するには、以下のコマンドで直接書き換えを行う。

# echo '20480' >  /proc/sys/fs/inotify/max_user_watches

恒久的に変更するには以下のようにsysctl.confを変更する

# sudo vi /etc/sysctl.conf
fs.inotify.max_user_watches = 20480 # 追加
# sudo /sbin/sysctl -p

書き換えが終わった後に、lsyndを起動すると、inotifyで扱えるファイルの数が増え、lsyncdが同期処理を継続するようになる。

もし、まだ起動しない場合には、変更されたファイルの数が設定した値より多いことになるので max_user_watches をさらに大きな数字に変更する。

 添付ファイル     - [0]


 コメント追加