文件系统分析工具我们也分为传统工具,BPF和System三个分别进行介绍。
df通常可以查看文件系统的使用情况,如:
~mountsysfson/systypesysfs(rw,nosuid,nodev,noexec,relatime,seclabel)procon/proctypeproc(rw,nosuid,nodev,noexec,relatime)devtmpfson/devtypedevtmpfs(rw,nosuid,seclabel,size=1915812k,nr_inodes=478953,mode=755)securityfson/sys/kernel/securitytypesecurityfs(rw,nosuid,nodev,noexec,relatime)tmpfson/dev/shmtypetmpfs(rw,nosuid,nodev,seclabel)devptson/dev/ptstypedevpts(rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)tmpfson/runtypetmpfs(rw,nosuid,nodev,seclabel,mode=755)tmpfson/sys/fs/cgrouptypetmpfs(ro,nosuid,nodev,noexec,seclabel,mode=755)cgroupon/sys/fs/cgroup/systemdtypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)pstoreon/sys/fs/pstoretypepstore(rw,nosuid,nodev,noexec,relatime)cgroupon/sys/fs/cgroup/cpusettypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)cgroupon/sys/fs/cgroup/net_cls,net_priotypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)cgroupon/sys/fs/cgroup/cpu,cpuaccttypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)cgroupon/sys/fs/cgroup/pidstypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,pids)cgroupon/sys/fs/cgroup/hugetlbtypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)cgroupon/sys/fs/cgroup/devicestypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,devices)cgroupon/sys/fs/cgroup/blkiotypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,blkio)cgroupon/sys/fs/cgroup/memorytypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,memory)cgroupon/sys/fs/cgroup/freezertypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,freezer)cgroupon/sys/fs/cgroup/perf_eventtypecgroup(rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)configfson/sys/kernel/configtypeconfigfs(rw,relatime)/dev/sda1on/typexfs(rw,relatime,seclabel,attr2,inode64,noquota)rpc_pipefson/var/lib/nfs/rpc_pipefstyperpc_pipefs(rw,relatime)selinuxfson/sys/fs/selinuxtypeselinuxfs(rw,relatime)debugfson/sys/kernel/debugtypedebugfs(rw,relatime)hugetlbfson/dev/hugepagestypehugetlbfs(rw,relatime,seclabel)mqueueon/dev/mqueuetypemqueue(rw,relatime,seclabel)/dev/sdbon/datatypeext4(rw,noatime,seclabel,discard,nobarrier,data=ordered)tmpfson/run/user/1000typetmpfs(rw,nosuid,nodev,relatime,seclabel,size=388020k,mode=700,uid=1000,gid=1001)systemd-1on/proc/sys/fs/binfmt_misctypeautofs(rw,relatime,fd=43,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=33198)binfmt_miscon/proc/sys/fs/binfmt_misctypebinfmt_misc(rw,relatime)tmpfson/run/user/0typetmpfs(rw,nosuid,nodev,relatime,seclabel,size=388020k,mode=700)free
free命令可以查看buff/cache占用内存的大小,使用-w参数可以将两者分开展示,如下所示
~vmstat1procs-----------memory-------------swap-------io-----system--------cpu-----rbswpdfreebuffcachesisobiboincsussyidwast1007480524799627477400000007480524799627477400010000000748036479962747761001000000074805247996274776010000sar
sar工具提供了多种文件系统统计方式。可以使用-v参数查看文件系统的当前活动:
~_64(xxxxxxxx)07/15/2022_x86_64_(2CPU)10:48:50PMkbmemfreekbavailkbmemused%memusedkbbufferskbcachedkbcommit%commitkbactivekbinactkbdirty10:48:51:48:52slabtop
slabtop打印了内核slab缓存,这些缓存有可能是被文件系统缓存使用的:
~strace-ttT-p21621strace:Process21621attached[]23:04:01.944437stat("/etc/localtime",{st_mode=S_IFREG|0644,st_size=556,})=00.000026[]detached
perfperf也是一个强大的工具,可以追中文件系统的tracepoint,使用kprobe查看VFS和文件系统的内部,并且还有一个trace子命令比strace高效的多。
~perflist*xfs*Listofpre-definedevents(tobeusedin-e):xfs:xfs_agf[Tracepointevent]xfs:xfs_agfl_reset[Tracepointevent]xfs:xfs_ail_delete[Tracepointevent]xfs:xfs_ail_flushing[Tracepointevent]xfs:xfs_ail_insert[Tracepointevent]xfs:xfs_ail_locked[Tracepointevent]xfs:xfs_ail_move[Tracepointevent]xfs:xfs_ail_pinned[Tracepointevent]
可以使用perfstat统计xfstrancepoint调用,如下所示:
perfstat-e'xfs:*'-a^CPerformancecounterstatsfor'systemwide':1xfs:xfs_ilock1xfs:xfs_iunlock1xfs:xfs_filemap_fault1xfs:xfs_log_
还可以使用perfrecord将获取结果存如文件,使用perfscript读取文件内容进行分析。
fatrace使用Linux的fanotifyAPI,示例输出:
~opensnoop-bpfcc-TTIME(s)/proc/net//proc//proc/1700193//proc/1700193//proc/1700193/task/1700193//proc/1700193/task/1700194//proc/1700193/task/1700196/stat
BCC命令用法
opensnoop[options]
命令选项
-x:只显示打开失败的操作
-pPID:仅监控给定的进程
-nNAME:仅显示进程名字包含NAME的事件
bpftrace版本不支持任何参数,其源码如下所示:
BEGIN{printf("TracingopensyscallsHitCtrl-Cto.\n");printf("%-6s%-16s%4s%3s%s\n","PID","COMM","FD","ERR","PATH");}tracepoint:syscalls:sys_enter_open,tracepoint:syscalls:sys_enter_openat{@filename[tid]=args-filename;}tracepoint:syscalls:sys_exit_open,tracepoint:syscalls:sys_exit_openat/@filename[tid]/{$ret=args-ret;$fd=$ret0?$ret:-1;$errno=$ret0?0:-$ret;printf("%-6d%-16s%4d%3d%s\n",pid,comm,$fd,$errno,str(@filename[tid]));delete(@filename[tid]);}END{clear(@filename);}
执行结果示例:
~statsnoop-bpfccPIDCOMMFDERRPATH2582812zabbix_agentd00/var/log/zabbix/zabbix__agentd00/etc//home/sfop/security/hids/log/net_/home/sfop/security/hids/log/net_/home/sfop/security/hids/log/net_/home/sfop/security/hids/log/net__agentd00/var/log/zabbix/zabbix_
BCC命令行用法
statsnoop[options]
命令行选项
-x:仅显示失败的stat调用
-t:增加一列时间戳信息(秒)
-pPID:仅测量给定的PID
该版本不支持任何选项,使用示例如下:
~#/etc/localtime925cron0crontabs925cron0/etc/crontab925cron0/etc//etc//php925cron0/etc//popularity-contest925cron0/etc//e2scrub_all925cron0/etc//sysstat1707gsd-housekeepin0/etc/fstab1707gsd-housekeepin0/proc1707gsd-housekeepin0/proc/self
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。