rsyncは誰もが知り愛用しているコマンドだ。ディレクトリー・ツリーのクローンをほかのディスクやシステムに作成し、変化した部分だけを送る無駄のない方法でクローンを最新状態に保つことができる。しかし、ときには逆方向に同期させたいこともある。そんなときに役立つのが双方向型ファイルシステム同期ツールだ。双方向型の同期ツールには基準とすべきファイルシステムはない。一致させるべきディレクトリー(クローン)を2つ指示するだけだ。ここでは、 DirSync Pro と Unison という2種類の双方向型ファイルシステム同期ツールを紹介する。
筆者は個人用データ同期ツールとしてUnisonを使っているが、ここでは、そうした事情は抜きにして紹介する。
DirSync ProもUnisonも、対象とする2つのディレクトリーを設定するとディレクトリーの内容をサブディレクトリーも含めて同期させる。以下では、簡単なテストを行って、両ツールの動作を調べてみよう。まず、どちらのクローン上でも編集されているファイルの扱い方を見る。そのために、conflict-testというディレクトリーを作り、その下に2つのディレクトリーdir1とdir2、そして今日の日付を含むファイルdf1.txtを作った。両クローン上にあるこのファイルを内容は同じだが更新日時は異なるという状態にし、それぞれのツールの動作を調べるのだ。また、4行から成るファイルtestfile.txtも作った。このファイルを両クローン上で編集し、それぞれのツールの動作を調べるためだ。テストの際は、初めに同期操作を実行しdir1とdir2を相互に完全コピーさせた。
次に、Linuxマシンで使われる可能性のあるファイル・タイプの扱い方を見る。そのために、dir1linux-fs-testというディレクトリーを作り、その下にディレクトリーdir1とdir2を作った。dir2は空のままだが、dir1にはhas-hardlink.txtとそれへのハードリンクhas-hardlink2.txt、そしてmyfifoというFIFOファイルを作成した。FIFOファイルというのは、2つのプロセスがこのファイルを同時にオープンして読み書きすることで双方向の通信を行うためのファイルだ。FIFOファイルはファイルシステムに存在するが、普通のファイルのようにディスクには保存されず、通信のためだけに存在する。FIFOファイルは多用されるものではないが、何かのアプリケーションがhomeディレクトリーのどこかでFIFOファイルを使っている可能性がある。そうしたhomeディレクトリー全体を同期させる場合を考えると、FIFOファイルの扱いを見ておく必要がある。
$ ls -lhF dir1 -rw-rw-r-- 1 ben ben 29 2008-11-19 11:19 df1.txt lrwxrwxrwx 1 ben ben 7 2008-11-19 11:19 df2.txt -> df1.txt -rw-rw-r-- 2 ben ben 29 2008-11-19 11:21 has-hardlink2.txt -rw-rw-r-- 2 ben ben 29 2008-11-19 11:21 has-hardlink.txt prw-rw-r-- 1 ben ben 0 2008-11-19 11:22 myfifo|
