按目录监视磁盘写入

Oli*_*ams 5 ubuntu monitoring disk-usage

我正在尝试跟踪过多的磁盘写入来自何处,无论是通过邮件传入、数据库写入、日志还是其他来源。服务器上大约有 75 个帐户,有些是活跃的,有些不是。

我可以执行任何类型的磁盘 I/O 命令来指定正在发生磁盘写入的目录吗?如果是数据库写入,我希望我会看到它通过/var/lib/mysql/that_database_name

- 添加 -

我依稀记得大约 2 年前,我执行了一些类似于tail -f我看到写入通过的命令,我认为指定了文件夹。如果我正在跟踪磁盘写入日志(如果存在这样的事情),那么它的位置或以这种格式进行的访问将完成我想要的操作。

meu*_*euh 5

您可能正在考虑fatrace,它可以监视对文件系统的所有写入,例如:

$ sudo fatrace -f W 
chrome(19909): W /home/meuh/.config/google-chrome/Default/Current Session
bash(2777): CW /home/meuh/.bashhistory
emacs(2100): CW /home/meuh/bin/emacs/.emacs.desktop
auditd(711): W /var/log/audit/audit.log
rsyslogd(762): W /var/log/secure
Run Code Online (Sandbox Code Playgroud)

-f W输出限制为任何写入操作,列出可执行文件、pid 和写入的文件。

另一种可能性是来自 Brendan D. Gregg 的perf-tools 的iosnoop,它提供有关写入磁盘的块的低级信息:

$ sudo perf-tools-master/bin/iosnoop
Tracing block I/O. Ctrl-C to end.
COMM         PID    TYPE DEV      BLOCK        BYTES     LATms
/usr/bin/mon 31456  R    8,0      9741888      4096       2.14
/usr/bin/mon 31456  R    8,0      12904784     4096       1.43
jbd2/sda3-41 416    WS   8,0      130618232    65536      1.89
jbd2/sda3-41 416    WS   8,0      210006528    8192       1.94
<...>        288    WS   8,0      129710104    61440      1.85
<idle>       0      WS   8,0      129710224    4096       0.36
cat          32111  WS   8,0      10443000     4096       0.35
Run Code Online (Sandbox Code Playgroud)

另一种可能性,如果您只想观看几组文件是inotifywait,例如:

$ inotifywait -m -e modify -r /tmp
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/tmp/ MODIFY myfile
Run Code Online (Sandbox Code Playgroud)

-r是递归下降给定的目录。这设置起来成本很高,默认情况下用户只能使用 8192 个手表,但您可以在/proc/sys/fs/inotify/max_user_watches.