跟踪对根文件系统的访问:进程和文件名

跟踪对根文件系统的访问:进程和文件名

我运行的是 Linux嵌入式多媒体卡

我想减少设备上完成的 IO。

我不喜欢大海捞针。

我想要一种方法来追踪对设备的访问。

我想要查看对 eMMC 执行写入操作的进程 ID 和文件名。

不幸的是,到目前为止我还没有找到办法做到这一点。

我可以每秒运行一次,但欢迎提供更强大的解决方案:

ls -ltr /proc/*/fd| grep -vE '/dev/|socket|pipe'

有什么提示可以告诉我如何找到我搜索的信息吗?

顺便说一句,我已经应用了这个答案的提示:https://raspberrypi.stackexchange.com/a/186

我使用 ubuntu 16.04

答案1

尝试系统挖掘

bash-4.1$ sysdig -l | grep write
                 However, for some events (like writes to /dev/log) it provides
evt.is_io       'true' for events that read or write to FDs, like read(), send,
evt.is_io_write 'true' for events that write to FDs, like write(), send(), etc.
                that write to FDs, like write().
evt.is_syslog   'true' for events that are writes to /dev/log.
evt.is_open_write
bash-4.1$ sysdig -l | egrep 'proc.pid|fd.name'
fd.name         FD full name. If the fd is a file, this field contains the full
proc.pid        the id of the process generating the event.

因此也许是这样的:

sudo sysdig -p '%proc.pid %fd.name' evt.is_io_write exists

哎呀,匹配了sysdig(和我的 SSH 会话)。

sudo sysdig -p '%proc.pid %fd.name' \
  "evt.is_io_write exists and not ( proc.name contains sysdig or proc.name contains ssh )"

仍然有点忙。这在我的测试系统上更好:

sudo sysdig -p '%proc.pid %fd.name %fd.type' "evt.is_io_write exists and fd.typechar = f and not ( fd.name contains /dev or fd.name contains /proc or fd.name contains eventfd or fd.name contains signalfd or fd.name contains kvm- )"

或者您可以fd.name使用路径进行过滤然后/dev排除/proc...

相关内容