1

シナリオは次のとおりです。

  • Linux を実行している中央マシンは、多数の機器の「データ ストア」です。

  • 各計測器には PC があり、計測器によってキャプチャされたデータ ファイルを書き込むデータ ストア上にリモート マウント (SMB) があります。

  • 計測器の PC は、非常に古いものも含め、さまざまなオペレーティング システムを実行します。

  • 計測器 PC のハードウェア クロックは同期されておらず、同期にはさまざまな理由で問題があります。

  • その他のさまざまな修正 (たとえば、SMB を使用しない、機器のオペレーティング システムをアップグレードする、機器で実行するためのものを開発する) も同様に問題があります。

私たちが書きたいのは、計測器がリモート マウントを介してデータ ストアにファイルを書き込んだことを認識し、そのファイルを別の場所にすばやくコピーする「グラバー」アプリケーションです。現在の計画では、Linuxinotifyサブシステムを使用して、ファイルが到着する可能性のあるディレクトリ/ツリーでファイル システム イベントを監視し、コピーを実行します。

私の懸念は、同期されたクロックがないという事実が問題になるということです。この懸念は正当なものですか?

4

1 に答える 1

2

懸念は正当化されません。

Linux inotify は、Linux fsnotify サブシステムを公開するユーザー空間 API です。このカーネル ファイル システムは、カーネルの一般的なファイル システム層 (VFS と呼ばれる) に接続されています。ディレクトリ内のファイルの作成日またはアクセス日を比較するのではなく、コールバック関数によってファイル システム コードから直接、新しいファイルの作成の通知を取得します。そのため、ファイルのタイム スタンプにはまったく影響されないため、別のクライアント マシンのクロックはまったく問題になりません。

inotify_should_send_event() イベント送信関数のコードを確実に監査するには、追跡対象のファイルまたはディレクトリに対してイベントを送信する必要があるかどうかをチェックします (こちらを参照してください: http://lxr.linux.no/linux+v3.0.4/ fs/notify/inotify/inotify_fsnotify.c#L144 )。時間への言及は一切ないことに注意してください。同じ精神で、カーネルのメインの fsnotify 関数 (http://lxr.linux.no/linux+v3.0.4/fs/notify/fsnotify.c#L296) はどこにもタイムスタンプを参照しないため、クロックは影響しません。このインターフェースはまったく。

これが役立つことを願っています。

于 2011-10-13T13:13:04.657 に答える