2

モジュール内で、ブロックデバイスに書き込まれた最後のブロックを追跡する方法を見つけようとしています。私が必要とする特定のデバイスは、ルートにマウントされたものです (それが役立つ場合は、事前に /dev/ の名前を知っています)。

私の最初のアイデアは、「echo 1 > /proc/sys/vm/block_dump」の場合、すでにログ機能があるため、submit_bio 関数をラップすることでした。残念ながら、その関数をポインターにするには、ソース コードを変更する必要があるようです。可能であれば、これをすべてモジュール内に保持したいと思います。

その後、ファイル システムの種類を調べて、既定のファイル操作をラップしました (結局、これらは既に関数ポインターになっています)。ただし、これらは const として宣言されているため、同じ問題です。

これは、やろうとしていることは一種の奇妙なことです、私は理解しています。どうしてもやる必要があります。誰かが私を動かすかもしれないアイデアを持っていますか?

4

1 に答える 1

1

Linux カーネルは、いくつかの異なるトレース ツールキットを提供します。これらのblktraceツールは、ブロック デバイス専用に設計されています。ツールは、ユーティリティのblkparse(1)出力を解析します。blktrace(8)(少なくとも Ubuntu ではこれらがパッケージに含まれていblktraceます。他のディストリビューションも同様であると思います。) このbklparse(1)ツールはセクター情報を提供します。

Documentation/trace/events.txtblock:block_bio_complete別のトレース メカニズムについて説明します。このメカニズムを使用すると、セクター情報を含むイベントを追跡できます。これにはツールキットをインストールする必要はありませんが、トレース ログをどこで読めbkltraceばよいかわからないことを (おずおずと) 認めます。

于 2012-04-06T01:50:31.953 に答える