如何在 Linux 中按文件名记录文件系统读/写?

cmc*_*nty 21 linux filesystems logging file-monitoring disk-monitoring

我正在寻找一种简单的方法来记录文件系统操作。它应该显示正在访问或修改的文件的名称。

我对 powertop 很熟悉,看来这在一定程度上是有效的,它显示了写入的用户文件。是否有任何其他实用程序支持此功能。

我的一些发现:

powertop:最适合写访问日志,但更关注 CPU 活动
iotop:按进程显示实时磁盘访问,但不显示文件名
lsof:显示每个进程打开的文件,但不显示实时文件访问
iostat:显示实时 I磁盘/阵列的 /O 性能但不指示文件或进程

cmc*_*nty 19

到目前为止iotop是最好的整体解决方案。以下命令为您提供使用磁盘的所有进程的实时输出。

iotop -bktoqqq -d .5

where: -b     is batch mode
       -k     is kilobytes/s
       -t     adds timestamp
       -o     only show processes or threads actually doing I/O
       -qqq   removes output headers
       -d .5  updates every .5 seconds
Run Code Online (Sandbox Code Playgroud)

最终您会注意到该进程将访问磁盘。调查的简单方法是停止该进程,并使用 strace 启动它。例如:

sudo strace -f nmbd -D
Run Code Online (Sandbox Code Playgroud)

这将显示文件系统访问的系统调用。

另一种选择是inotify(7),其中许多发行版提供“inotify-tools”,因此您可以通过以下方式观看路径

inotifywait -r -mpath_you_want_to_watch

  • 在 Google 上对 fanotify 进行快速搜索会显示 [here](http://www.piware.de/tag/fanotify/) 中名为“fatrace”的工具。 (3认同)

x29*_*29a 12

另一种选择是http://linux.die.net/man/7/inotify,其中许多发行版都提供“inotify-tools”,因此您可以通过以下方式观看路径

inotifywait -r -m /<path you want to watch>
Run Code Online (Sandbox Code Playgroud)


小智 6

我最近遇到了使用fanotify 的fatrace。工作很漂亮所以我想我会分享。它确实记录所有类型的文件操作,包括打开/创建/修改到标准输出或可选的文件,您甚至可以过滤以仅获取某些类型的操作。默认情况下,它监视除虚拟安装之外的所有安装。作者本人在这里解释得很好。