我试图在模块内找到一种方法来跟踪写入 block 设备的最后一个 block 。我需要的特定设备是安装在根目录下的设备(如果有帮助,我提前知道/dev/名称。)
我最初的想法是包装 submit_bio 函数,因为如果您“echo 1 >/proc/sys/vm/block_dump”,它已经具有日志记录功能。不幸的是,我似乎需要修改源代码才能使该函数成为指针。如果可能的话,我想将所有这些都保留在模块中。
之后,我研究了文件系统类型,并包装了默认文件操作(毕竟这些已经是函数指针)。但是,它们被声明为 const,所以同样的问题。
我明白,尝试做这件事有点奇怪。尽管如此,还是需要这样做。有没有人有任何想法可以让我继续前进?
最佳答案
Linux 内核提供了几种不同的跟踪工具包; blktrace
tools专为 block 设备设计。 blkparse(1)
工具将解析 blktrace(8)
实用程序的输出。 (至少 Ubuntu 将这些打包在 blktrace
包中;我希望其他发行版也类似。)bklparse(1)
工具可以为您提供扇区信息。
Documentation/trace/events.txt
描述了另一种跟踪机制——一种可以让您跟踪 block:block_bio_complete
事件的机制,其中包括扇区信息。这不需要安装 bkltrace
工具包,但我会(不好意思地)承认我不知道在哪里阅读跟踪日志。
关于linux - LKM : Last block written to device,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037944/