rsyncでディレクトリの同期

GWの終わりには竜巻で大きな被害が出るなど、最近は天気が荒れがちでよく雷がなったりしています。また、東日本大震災の影響の電力不足が続いていて、この夏はいつ停電になってもおかしくない気がします。停電すると常時稼働している機器が影響を受けます(当たり前ですが)。

停電対策といえばまずはUPSですが、導入するお金も置く場所もありません。そうなると、電源OFFするしかないのですが、嫁さんが先に帰ってきてPCで遊ぶ際に写真が見れないとかという話になってしまいます。それも困るので、MicroServer+FreeNASの導入で遊休状態になっている玄箱PRO上のSamba上に最低限のファイルをコピーして稼働させることを考えました。
が、コピーを手作業でやっていると面倒なので、rsyncで自動化できないか調べてみました。

実施にあたってはこちらのサイトDebianの公式サイトの記述を参考にさせていただきました。

1.考え方

玄箱PRO側でrsyncdをdaemonモードで起動して待機させます。sshモードの方が試してみる分には簡単なようですがパスワード入力が要る(自動化するには鍵ペアで認証になる?)のと速度が遅いので、daemonモードで実施します。daemonモードは暗号化がかかりませんが、自宅内ネットワークなのでよしとします。
そこに、FreeNAS側からrsyncで書込みをさせます。

2.玄箱側の設定

rsyncのインストールは初めからしてあったのか、したのか忘れました(^^;。
ただ、設定ファイルである /etc/rsyncd.conf は存在していなかったので作成します。

### グローバル・オプション
uid = root
gid = root
max connections = 1
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
### モジュール・オプション
[common]
 comment = rsyncd server
 path = /home/common
 read only = no

コピー(同期)はFreeNAS側の common というディレクトリを /home/common に同期させます。また、玄箱は非力なので、コネクションをたくさん張られてもかえって遅くなるだけなので接続数を制限します。
設定ファイルを作成したら、

$ sudo rsync --daemon --config=/etc/rsyncd.conf

で daemonモードで起動します。

3.FreeNAS側の設定

FreeNAS側は「システム」→「Rsync Tasks」→「Add Rsync Task」でタスクを作成します。

  • 「パス」にはローカル側のディレクトリを指定します。Browseでは共有単位でしか選択できないようなのですが、今回はFreeNAS側の common の下をすべて同期するわけではないので、対象ディレクトリをフルパスで指定します。
  • 「リモートホスト」には玄箱PROのIPアドレスを指定します。
  • 「Rsync mode」には「Rsync module」を指定します。
  • 「Remote Module Name」には /etc/rsyncd.conf のモジュールオプションの[]の中身、すなわち「common」を指定します。
  • 「Remote Path」には「パス」で指定した部分のうち、common以下の部分だけ指定します。
  • 「Direction」はFreeNASから玄箱PROなので、「Push」を選択します。
  • 「Minute」以下はどの周期で同期を試みるか設定します。
  • 「ユーザ」は「root」を選択します。
  • あとはデフォルトのままにしたような・・

これで「OK」を押すと設定した時間で同期動作が始まりました。

4.自動起動の設定

rsyncをinetdから起動させるための設定をします。
まず/etc/servicesファイルに 次のような rsync サービスがあることを確認します。

rsync           873/tcp

デーモンを inetd から起動させるために、次の行を /etc/inetd.conf に書き足します。

rsync      stream      tcp         nowait      root /usr/bin/rsync rsyncd --daemon

修正後に inetd に HUP シグナルを送り、 修正された設定ファイルを読み込ませます。

5.他に参考になりそうなもの

rsync + cron + sshのみで実現する方法(rsyncd を使わない方法)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)