FreeBSD 10 追踪磁盘活动

有没有办法在FreeBSD 10上使用ZFS找到定期写入磁盘的进程(根据硬盘指示灯)?也许可以将ZFS转换为详细日志模式吗?
由于磁盘访问的瞬间时间很短,lsof和其他即时聚合统计工具似乎无法捕获任何内容。

1使用top命令的io显示来查找正在占用磁盘I/O的进程怎么样?:top -m io -o totalhttp://www.freebsd.org/cgi/man.cgi?query=top&apropos=0&sektion=0&manpath=FreeBSD+10.0-RELEASE&arch=default&format=html - user34720
这可能对于大负载的进程非常有用,这些进程大多数都在顶部运行,但对于那些与顶部计划不一致的活动来说并不适用。例如,如果硬盘指示灯每隔几秒钟就不停闪烁,那么几乎没有机会在top命令中看到任何信息,至少我尝试过是这样的。 - o_0
2个回答

DTrace能够在FreeBSD上报告vfs信息(以及其他一系列探针)。DTrace在10内核中默认启用,所以您只需要加载模块然后运行dtrace脚本。

加载DTrace模块

kldload dtraceall

从FreeBSD论坛获取vfssnoop.d脚本。整个帖子是一个磁盘监控的宝库。
运行它:
./vfssnoop.d

观察输出以了解访问内容。
# ./vfssnoop.d 
cc1: warning:  is shorter than expected
TIMESTAMP           UID    PID PROCESS          CALL             SIZE PATH/FILE
1555479476691083      0   1225 nfsd             vop_getattr         - /share/netboot
1555479478601010      0   1225 nfsd             vop_inactive        - /share/netboot
1555479482457241      0   1225 nfsd             vop_getattr         - /share/wpad.dat
1555480557262388      0   1432 cron             vop_getattr         - /var/cron/tabs
1555480557302178      0   1432 cron             vop_inactive        - /var/cron/tabs
1555480557336414      0   1432 cron             vop_inactive        - /etc
1555480557346224      0   1432 cron             vop_getattr         - /etc/crontab

天啊!非常感谢,我的搜索狂潮终于结束了) - o_0

运行:top -m io -o write -s 1 这将打印出进程列表,按照它们向磁盘写入的量进行排序,每秒更新一次。