前回はTime Machineを紹介したが、今回はTime Machineを補助するフレームワークを取り上げよう。FSEventと呼ばれるものだ。
どのフォルダでバックアップを行うべきか?
前回の記事で、Time Machineはバックアップをフォルダごとにコピーして管理していることを解説した。このときに、変更されたファイルを含むフォルダのみバックアップの対象とすることで、効率化を図っている。では、このバックアップの対象にするフォルダというのは、どうやって決定されるのだろう?
もちろん、現在のシステムのファイルと、バックアップされたファイルとをすべて比較すればできるのだが、一時間ごとにそんな時間のかかる処理を行うことはできないだろう。常識的に考えて、ファイルやフォルダに対する変更が発生するたびにそれを記憶しておき、その情報を使うことになる。
では、そのような機能はどうすれば実現できるだろう?似たような機能を提供するものとしては、Kernel Queuesがある。これはBSDに由来する技術で、ファイル(正確に言えばファイルデスクリプタ)に対するイベントを監視して通知してくれるものだ。kqueue()とkevent()というシステムコールを利用する。
これを利用すれば、確かにあるファイルの変更を記憶しておくことができる。だがKernel Queuesは、1つのキューが1つのファイルを監視する、という前提で作られている。Time Machineで必要になるのは、システムの大部分のファイルの監視だ。Kernel Queuesには、ちょっと相性が悪い。
そこで、Leopardでは新しいフレームワークを追加して、この仕事をやらせることにした。それが、FSEventだ。次ページでその詳細をみていこう。