inotify (inode notify) について
inotifyは、
Linuxカーネルに組み込まれたサブシステムであり、
ファイルシステムへの変更をリアルタイムでアプリケーションに通知する機能を提供します。これにより、アプリケーションは
ファイルシステムの変更を効率的に監視し、必要な処理を即座に実行できます。inotifyは、以前の
ファイルシステム監視メカニズムであったdnotifyを置き換える形で導入されました。
inotifyの導入
inotifyは、John McCutchanによって開発され、2005年8月29日にリリースされた
[Linux]]カーネルバージョン2.6.13でカーネルメインラインにマージされました。その後、Linuxカーネルのバージョンアップとともに改良が加えられています。
GNU Cライブラリ]では、2006年3月にリリースされたバージョン2.4でinotifyに必要な[[ライブラリインターフェースが追加され、同年9月のバージョン2.5でinotifyの完全なサポートが実現しました。
inotifyの主な用途
inotifyは、以下のような様々な用途で活用されています。
- - デスクトップ検索ユーティリティ: Beagleのようなデスクトップ検索ツールは、inotifyを利用することで、ファイルシステムのスキャンを定期的に行う代わりに、変更されたファイルをリアルタイムで再インデックス化できます。これにより、システムの負荷を大幅に軽減しつつ、常に最新の検索結果を提供できます。
- - ディレクトリビューの自動更新: ファイルマネージャーなどのアプリケーションは、inotifyを使ってディレクトリの内容が変更された際にビューを自動的に更新できます。これにより、ユーザーは常に最新のファイルシステムの状態を把握できます。
- - 設定ファイルの再読み込み: アプリケーションは、設定ファイルが変更された場合にinotifyの通知を受け取り、設定を自動的に再読み込みできます。これにより、設定変更を反映させるためにアプリケーションを再起動する必要がなくなります。
- - ログの監視: ログファイルへの変更を監視し、特定のエラーや警告が発生した場合に通知を送信できます。
- - バックアップ、同期、アップロード: ファイルの変更を監視し、変更されたファイルのみをバックアップ、同期、またはアップロードできます。これにより、データ転送量を削減し、効率的なファイル管理が実現します。
inotifyの制限事項
inotifyには、以下のような制限事項があります。
- - 再帰的なディレクトリ監視の非サポート: inotifyは、ディレクトリを再帰的に監視することはできません。そのため、サブディレクトリを監視する場合は、個別に監視対象として指定する必要があります。
- - sysfs/procfsのイベント: sysfsやprocfsにおけるイベントは、一部しか通知されません。
- - ネットワークファイルシステムの制約: NFSのようなネットワーク接続されたファイルシステムでは、inotifyによる通知が常に正確であるとは限りません。これは、NFSなどのファイルシステムがクライアント間での変更の伝播を遅らせる場合があるためです。
- - 改名イベントの扱い: inotifyは、ファイルの改名イベントを直接処理しません。改名前と改名後のイベントを個別に通知するため、アプリケーション側でそれらを照合する必要があります。
inotifyの歴史
- - 2004年7月: inotifyの最初のリリースがアナウンスされました。
- - 2005年8月29日: Linuxカーネルバージョン2.6.13にinotifyのコードがマージされました。
- - 2006年3月: glibcバージョン2.4でinotifyのサポートが開始されました。
- - 2006年9月: glibcバージョン2.5でinotifyの完全なサポートが実現しました。
dnotifyに対する利点
inotifyは、以前の
ファイルシステム監視メカニズムであるdnotifyに比べて多くの利点があり、dnotifyを置き換える形で採用されました。dnotifyには、以下のような問題点がありました。
- - ファイル記述子の制限: dnotifyでは、監視対象のディレクトリごとにファイル記述子を消費するため、プロセスごとのファイル記述子制限に達する可能性がありました。
- - リムーバブルメディアの問題: リムーバブルメディアで使用すると、dnotifyがファイル記述子を保持し続けるため、デバイスをアンマウントできなくなる問題がありました。
- - 監視の粒度: dnotifyでは、ディレクトリレベルでの変更しか監視できず、詳細な変更内容を取得するためにはstat構造体を使用する必要がありました。
- - パフォーマンス: stat構造体の使用は、キャッシュとの比較が必要になり、パフォーマンス上のボトルネックとなる可能性がありました。
inotifyは、これらの問題を解決し、より効率的で柔軟な
ファイルシステム監視を提供します。inotify APIは、dnotifyが使用するシグナル通知システムではなく、selectとpollインターフェイスを使用しているため、ファイル記述子の消費を大幅に削減できます。これにより、既存のselectやpollベースの
ライブラリとの統合が容易になりました。
関連項目
- - File Alteration Monitor
- - Gamin
- - DMAPI
- - kqueue
- - FSEvents
- - inotail
外部リンク