inotify ( inode通知)は、John McCutchan によって作成されたLinux カーネルサブシステムであり、ファイルシステムへの変更を監視し、その変更をアプリケーションに報告します。ディレクトリ ビューの更新、構成ファイルの再読み込み、変更のログ記録、バックアップ、同期、アップロードを自動的に実行できます。inotifywaitおよびinotifywatchコマンド ( inotify -tools プロジェクトの一部として Eric Curtin によって保守されています) を使用すると、コマンド ラインから inotify サブシステムを使用できます。[1]主な用途の 1 つは、 Beagleなどのデスクトップ検索ユーティリティです。この機能により、数分ごとにファイルシステムをスキャンして変更を確認する必要がなくなり、変更されたファイルの再 インデックスが可能になります。これは非常に非効率的です。
inotify は、同様の目的を持つ以前の機能であるdnotifyに代わるものである。 inotify は、2005年8月29日にリリースされたカーネルバージョン2.6.13でLinuxカーネルのメインラインに統合された。 [2]その後のカーネルバージョンでは、さらなる改良が加えられた。必要なライブラリインターフェースは、2006年3月にリリースされたGNU Cライブラリ(glibc)バージョン2.4に追加され、inotifyのサポートは2006年9月にリリースされたglibcバージョン2.5で完了した。[3]
制限事項
inotify によって課される制限は次のとおりです。
- inotifyはディレクトリの再帰的な監視をサポートしていないため、サブディレクトリごとに個別のinotify監視を作成する必要があります。[4]対照的に、 inotifywaitコマンドはディレクトリの再帰的な監視を提供します。[5]
- Inotify はsysfsおよびprocfs内の一部のイベントを報告しますが、すべてのイベントを報告しません。
- inotify による通知では、カーネルが関連するすべてのファイルシステム イベントを認識する必要がありますが、これは、 1 つのクライアントによって行われた変更が他のクライアントにすぐにブロードキャストされないNFSなどのネットワーク ファイルシステムでは必ずしも可能ではありません。
- 名前変更イベントは直接処理されません。つまり、inotify は、潜在的な競合状態のコンテキストで検査および一致する必要がある 2 つの個別のイベントを発行します。
歴史
- 2004年7月:最初のリリース発表[6]
- 2005年8月29日: Linuxカーネルバージョン2.6.13がリリースされ、inotifyコードが統合された[2]
- 2006年3月: GNU Cライブラリ(glibc)バージョン2.4がリリースされ、inotifyの初期サポートが導入された[3]
- 2006年9月: Glibcバージョン2.5がリリースされ、inotifyが完全にサポートされるようになった[3]
dnotify に対する利点
inotify を使用すると、以前のdnotify APIと比べて多くの利点があります。[7] [8] [9] dnotify では、プログラムは監視しているディレクトリごとに 1 つのファイル記述子を使用する必要があります。プロセスあたりのファイル記述子の制限に達する可能性があるため、これがボトルネックになる可能性があります。後に、この問題を克服するために fanotify が作成されました。dnotify とファイル記述子を併用すると、リムーバブル メディアを使用する場合にも問題が発生することが判明しました。ファイル記述子によってリソースがビジー状態になるため、デバイスをアンマウントできませんでした。
dnotify のもう 1 つの欠点は、プログラマーがディレクトリ レベルでしか変更を監視できないため、粒度レベルが低いことです。通知メッセージが送信されたときに発生する環境変更に関する詳細情報にアクセスするには、統計構造を使用する必要があります。これは、統計構造のキャッシュを維持する必要があり、生成される新しい統計構造ごとにキャッシュされた構造との比較が実行されるという点で、必要悪であると考えられます。
inotify API はファイル記述子の使用量が少ないため、プログラマーはdnotifyが使用するシグナル通知システムではなく、確立された select および poll インターフェースを使用できます。これにより、既存の select ベースまたは poll ベースのライブラリ ( GLibなど) との統合も容易になります。
参照
- ファイル変更モニター(SGI)
- DMAPI
- kqueue (FreeBSD、NetBSD、OpenBSD、DragonFly BSD、macOS)
- FSEvents (macOS)
参考文献
- ^ inotify ツール wiki
- ^ Linux 2.6.13、kernelnewbies.orgより
- ^ abc inotify マニュアルページ
- ^ ロバート・ラブ『Linux システムプログラミング』オライリー、236 ページ
- ^ inotifywait マニュアルページ、[1]
- ^ 「fa.linux.kernel post [RFC][PATCH] inotify 0.8」 2004-07-29 . 2013-08-19閲覧。
- ^ Michael Kerrisk (2014 年 7 月 14 日). 「ファイルシステム通知、パート 2: inotify の詳細な調査」. LWN.net。
- ^ Eli M. Dow (2005-05-31). 「Inotify で Linux ファイルシステムイベントを監視する; inotify を使用する理由?」。2010-01-16 にオリジナルからアーカイブ。
- ^ inotify README ファイル
外部リンク
- Kernel Korner – Robert Love 著の inotify 入門 (2005)
- Inotify に関する LWN の記事 – inotify でファイルシステム イベントを監視する (一部古い)
- IBM の記事 – inotify を使用した Linux ファイルシステム イベントの監視 (2008 年 9 月 6 日)。
- ファイルシステム通知、パート 1: dnotify と inotify の概要 – Michael Kerrisk による LWN.net の記事 (2014)
