ディレクトリ間の同期 (lsyncd)

  • リアルタイム同期の方法としては、以下の方法が考えられる
    • 該当ディレクトリをリンクに置き換えてしまう方法
    • unison を定期的に動かして、擬似リアルタイム同期する方法
    • lsyncd でリアルタイムに同期
  • lsyncd とは
    • inotify という特定のディレクトリ内を監視して、ファイルに対してアクションがあった際に動作する仕組みを利用した同期するプログラムである
    • ファイルのコピーや移動の実体は rsync が行っている (変更可能?)
  • このページでは、lsyncd を使った同期方法を紹介する
  • 今回の条件
    • 双方向同期の対象1: /path/to/A
    • 双方向同期の対象2: /path/to/B
  1. lsyncd のインストール
    $ sudo apt-get install lsyncd
  2. 設定ファイルの編集 (/etc/lsyncd/lsyncd.conf を作成)
    settings{
    	logfile = "/path/to/logfile.log",
    	statusFile = "/path/to/lsyncd.stat",
    	statusInterval = 1,
    }
     
    sync{
    	default.rsync,
    	delay = 0,
    	source = "/path/to/A",
    	target = "/path/to/B",
    	delete = "running",
    	rsync = {
    		owner = true,
    		group = true
    	}
    }
     
    sync{
    	default.rsync,
    	delay = 0,
    	source = "/path/to/B",
    	target = "/path/to/A",
    	delete = "running",
    	rsync = {
    		owner = true,
    		group = true
    	}
    }
    • settings: グローバルな設定
      • logfile: ログファイルの指定
      • statusFile: ステータス管理ファイルの指定
      • statusInterval: ステータス更新頻度 (秒)
      • delay: 同期を開始するまでの遅延 (秒) (デフォルト: 15秒) (対象: 全体)
    • sync: 同期する内容の設定 (同期するペアの分だけ記述していく; 双方向するなら sourcetarget を入れ替えた sync も作成する)
      • default.rsync: rsync の基本設定を使う (この他、default.rsyncssh が使える)
      • source: 同期元
      • target: 同期先
      • delay: 同期を開始するまでの遅延 (秒) (対象: 個別; settingsでも指定している場合は、こちらが優先される)
      • delete:
        • true: 同期元にないファイルを同期先から削除
        • false: 同期先のファイルを削除しない
        • running: 同期元にないファイルを同期先から削除 (ただし、同期対象がサーバの場合はスタートアップするまで待機する?)
      • rsync: rsync の設定
        • owner: 所有者情報保持の指定
        • group: 所有グループ保持の指定
    • 参考サイト
  3. 設定を適用して実行
    $ sudo service lsyncd restart
  • 同期していない場合は、/var/log/syslog を見る