特定のLinuxディレクトリまたはファイルのI / Oストリームで読み書きされたバイト数を監視する方法は?

特定のLinuxディレクトリまたはファイルのI / Oストリームで読み書きされたバイト数を監視する方法は?

特定のディレクトリのI / Oストリーム(指定された期間に読み書きされたバイト数)を監視するのに問題があります。

iostatinotifywaitおよびを使用しようとしましたが、残念ながら、inotifywatchディレクトリのアクティビティ(開く、閉じる、変更など)だけを測定し、読み書きしたバイトに関する情報は提供しません。

答え1

1つのオプションはシステムを使用することですaudit。それは次のとおりです。

sudo auditctl -a exit,always -F dir=/the/directory -p rw

次に、audit.logI/O システムコールを分析します。

答え2

私が知っている限り、これを行うことができる標準ツールはありません。しかし、私はこれを達成するいくつかの方法を考えることができ、それぞれに欠点があります。

どのプロセスがファイル/ディレクトリにアクセスするのかを知り、プロセスが他のI / Oをほとんどまたはまったく実行していないと判断した場合は、/(すべてのI / O)を調べて、読み書き/proc/PID/ioしたバイト数を解析して確認できます。または/(ディスクI / O)または/(read()/ write()などのシステムコールの数)。rcharwcharread_byteswrite_bytessyscrsyscw

どのプロセスがファイル/ディレクトリにアクセスするかわかりませんが(これらのプロセスが他のI / Oをほとんどまたはまったく実行していないと確信している場合)、このinotify機能を使用して場所を監視し、PIDを確認してから、次の手順を実行する必要があります。前の段落の途中で説明したメカニズム。

コースが大丈夫ならする他のI / Oは少し複雑になります。straceファイル/ディレクトリを指すすべてのファイル記述子に対するすべての読み取り/書き込み呼び出しのオフセットを計算する必要があります。

これらのソリューションはすべて単一バイトまで正確ではないが、良い見積もりを提供することができます。

関連情報