八月瓜首页 > 专利查询 > G06计算;推算;计数 >正文

一种基于Linux磁盘访问的监控方法及系统

基本信息

  • 申请号 CN201811377248.4 
  • 公开号 CN109522186A 
  • 申请日 2018/11/19 
  • 公开日 2019/03/26 
  • 申请人 郑州云海信息技术有限公司  
  • 优先权日期  
  • 发明人 魏浩  
  • 主分类号 G06F11/30 
  • 申请人地址 450000 河南省郑州市郑东新区心怡路278号16层1601室 
  • 分类号 G06F11/30 
  • 专利代理机构 济南舜源专利事务所有限公司 37205 
  • 当前专利状态 发明专利申请公布 
  • 代理人 刘晓政 
  • 有效性 审查中-实审 
  • 法律状态 审查中-实审
  •  

摘要

本发明提出了提供一种基于Linux磁盘访问的监控方法及系统,通过linux内核的源码中“check_partition”结构体,对不同格式的分区进行监控,找到对磁盘操作的进程,进一步找到磁盘报错的原因。
本发明能够进行磁盘的监控,有助于对磁盘的问题定位,确保磁盘的状态;本还能够监控磁盘异常访问,确认文件安全。
展开

权利要求书


1.一种基于Linux磁盘访问的监控方法,其特征在于,包括如下步骤:步骤1:在Linux系统下安装系统监控的探针;步骤2:安装用于监控Linux系统的内核代码包;步骤3:调用check partition结构体查看磁盘分区;步骤4:输出当前时间、函数名称、磁盘分区和pid信息;步骤5:搜集监控日志。
2.根据权利要求1所述的基于Linux磁盘访问的监控方法,其特征在于:所述系统监控的探针为systemtap-runtime。
3.根据权利要求1所述的基于Linux磁盘访问的监控方法,其特征在于:所述监控Linux系统的内核代码包包括:kernel-debuginfo-common 、kernel-debuginfo和kernel-devel。
4.根据权利要求1所述的基于Linux磁盘访问的监控方法,其特征在于,所述步骤4具体包括:步骤41:调用ctime(now)函数打印当前时间;步骤42:通过$return命令得到调用的check partition结构体的返回值;步骤43:调用execname()函数输出所述磁盘分区的进程名称;步骤44:调用pid()函数显示所述磁盘分区进程的pid信息。
5.根据权利要求4所述的基于Linux磁盘访问的监控方法,其特征在于,所述步骤42还包括:如果没有返回值,输出0;如果有,并且分区表是有效的,输出一个正值;如果有错误,输出一个负值。
6.根据权利要求1所述的基于Linux磁盘访问的监控方法,其特征在于,所述步骤4还包括:调用pexecname()函数和 ppid()函数,展示所述磁盘分区进程的父进程以及父进程的pid信息。
7.一种基于Linux磁盘访问的监控系统,其特征在于,包括:监控探针安装模块,用于在Linux系统下安装系统监控的探针;代码包安装模块,用于安装监控Linux系统的内核代码包;检查器调用模块,用于调用check partition结构体查看磁盘分区;显示模块,用于显示当前时间、函数名称、磁盘分区和pid信息;日志搜集模块,用于运行监控日志搜集命令,提取监控日志。
8.根据权利要求7所述的基于Linux磁盘访问的监控系统,其特征在于,还包括返回值输出模块,用于通过$return命令得到调用的check partition结构体的返回值,如果没有返回值,输出0;如果有,并且分区表是有效的,输出一个正值;如果有错误,输出一个负值。
展开

说明书

技术领域
本发明涉及计算机技术领域,更具体的说是涉及一种基于Linux磁盘访问的监控方法及系统。
背景技术
磁盘性能测试是服务器测试中必备的一项测试,主要用于查看磁盘的质量情况,比如磁盘的坏道问题,磁盘出现坏道主要分为逻辑坏道和物理坏道两种,当出现这种问题时,磁盘就会出现无法读取或读取速度过慢的情况。
在日常的测试中会在系统日志中发现一些有关磁盘的报错。
例如,在messages日志中会出现“unknown partition table”的报错。
这时我们就需要找到是什么进程,什么原因造成的此报错。
因此,需要一种方法解决监控是什么进程对磁盘做了操作,以便于定位问题。
发明内容
针对以上问题,本发明的目的在于提供一种基于Linux磁盘访问的监控方法及系统,通过linux内核的源码中“check_partition”结构体,对不同格式的分区进行监控,找到对磁盘操作的进程,以便于找到磁盘报错的原因。
本发明为实现上述目的,通过以下技术方案实现:一种基于Linux磁盘访问的监控方法,包括如下步骤:步骤1:在Linux系统下安装系统监控的探针;步骤2:安装用于监控Linux系统的内核代码包;步骤3:调用check partition结构体查看磁盘分区;步骤4:输出当前时间、函数名称、磁盘分区和pid信息;步骤5:搜集监控日志。
进一步,所述系统监控的探针为systemtap-runtime。
进一步,所述监控Linux系统的内核代码包包括:kernel-debuginfo-common 、kernel-debuginfo和kernel-devel。
进一步,所述步骤4具体包括:步骤41:调用ctime(now)函数打印当前时间;步骤42:通过$return命令得到调用的check partition结构体的返回值;步骤43:调用execname()函数输出所述磁盘分区的进程名称;步骤44:调用pid()函数显示所述磁盘分区进程的pid信息。
进一步,步骤42还包括:如果没有返回值,输出0;如果有,并且分区表是有效的,输出一个正值;如果有错误,输出一个负值。
进一步,所述步骤4还包括:调用pexecname()函数和 ppid()函数,展示所述磁盘分区进程的父进程以及父进程的pid信息。
另外,基于上述方法,本发明还提供了一种基于Linux磁盘访问的监控系统,包括:监控探针安装模块,用于在Linux系统下安装系统监控的探针;代码包安装模块,用于安装监控Linux系统的内核代码包;检查器调用模块,用于调用check partition结构体查看磁盘分区;显示模块,用于显示当前时间、函数名称、磁盘分区和pid信息;日志搜集模块,用于运行监控日志搜集命令,显示监控日志。
进一步,还包括返回值输出模块,用于通过$return命令得到调用的check partition结构体的返回值,如果没有返回值,输出0;如果有,并且分区表是有效的,输出一个正值;如果有错误,输出一个负值。
对比现有技术,本发明有益效果在于,1、本发明能够进行磁盘的监控,有助于对磁盘的问题定位,确保磁盘的状态;2、本发明能够监控磁盘异常访问,确认文件安全;3、本发明基于Linux系统,系统应用广泛;测试所需的系统环境稳定,测试结论真实可靠。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。
附图说明
附图1是本发明的方法流程图。
附图2是本发明的系统结构图。
具体实施方式
下面结合附图对本发明的具体实施方式做出说明。
如图1所示的一种基于Linux磁盘访问的监控方法,其特征在于,包括如下步骤:步骤1:在Linux系统下安装系统监控的探针。
系统监控的探针为systemtap-runtime。
步骤2:安装用于监控Linux系统的内核代码包。
内核代码包包括:kernel-debuginfo-common 、kernel-debuginfo和kernel-devel。
步骤3:调用check partition结构体查看磁盘分区。
步骤4:调用ctime(now)函数打印当前时间。
步骤5:通过$return命令得到调用的check partition结构体的返回值。
如果没有返回值,输出0;如果有,并且分区表是有效的,输出一个正值;如果有错误,输出一个负值。
步骤6:调用execname()函数输出所述磁盘分区的进程名称。
步骤7:调用pid()函数显示所述磁盘分区进程的pid信息。
步骤8:调用pexecname()函数和 ppid()函数,展示所述磁盘分区进程的父进程以及父进程的pid信息。
步骤9:搜集监控日志。
上文中对于一种基于Linux磁盘访问的监控方法的实施例进行了详细描述,基于上述实施例描述的一种基于Linux磁盘访问的监控方法,本发明实施例还提供了一种与该方法对应的基于Linux磁盘访问的监控系统,由如图2所示,包括:监控探针安装模块,用于在Linux系统下安装系统监控的探针;代码包安装模块,用于安装监控Linux系统的内核代码包;检查器调用模块,用于调用check partition结构体查看磁盘分区;显示模块,用于显示当前时间、函数名称、磁盘分区和pid信息;返回值输出模块,用于通过$return命令得到调用的check partition结构体的返回值,如果没有返回值,输出0;如果有,并且分区表是有效的,输出一个正值;如果有错误,输出一个负值;日志搜集模块,用于运行监控日志搜集命令,提取监控日志。
以上述的基于Linux磁盘访问的监控方法及系统为基础,具体的程序实现过程及内容如下:一、安装系统监控的探针二、安装kernel-debuginfo-common kernel-debuginfo kernel-devel三、程序内容probe kernel.function("check_partition") { now=gettimeofday_s() printf( "%-25s kernel.%s - (process %s(%d), parent %s(%d)\n", ctime(now), probefunc(), execname(), pid(), pexecname(), ppid() ) print_backtrace()}//调用check partition结构体,并输出时间,函数名称,pid等信息。
如下的函数针对每个不同的分区类型进行检查。
ctime(now)函数打印的是当前时间,$return是前面调用的检查器的返回值。
如果没有,返回0。
如果有,并且分区表是有效的,那么它返回一个正值,如果有错误,那么返回一个负值。
execname()输出查看的磁盘分区的进程名称,pid()显示的是查看磁盘分区进程的pid信息, pexecname(), ppid()展示的是查看磁盘分区进程的父进程以及父进程的pid信息;probe kernel.function("efi_partition").return { now=gettimeofday_s() printf( "%-25s kernel.efi_partition - return=%d (process %s(%d), parent %s(%d)\n", ctime(now), $return, execname(), pid(), pexecname(), ppid() )}probe kernel.function("sgi_partition").return { now=gettimeofday_s() printf( "%-25s kernel.sgi_partition - return=%d (process %s(%d), parent %s(%d)\n", ctime(now), $return, execname(), pid(), pexecname(), ppid() )}probe kernel.function("msdos_partition").return { now=gettimeofday_s() printf( "%-25s kernel.msdos_partition - return=%d (process %s(%d), parent %s(%d)\n", ctime(now), $return, execname(), pid(), pexecname(), ppid() )}probe kernel.function("osf_partition").return { now=gettimeofday_s() printf( "%-25s kernel.osf_partition - return=%d (process %s(%d), parent %s(%d)\n", ctime(now), $return, execname(), pid(), pexecname(), ppid() )}probe kernel.function("sun_partition").return { now=gettimeofday_s() printf( "%-25s kernel.sun_partition - return=%d (process %s(%d), parent %s(%d)\n", ctime(now), $return, execname(), pid(), pexecname(), ppid() )}probe kernel.function("amiga_partition").return { now=gettimeofday_s() printf( "%-25s kernel.amiga_partition - return=%d (process %s(%d), parent %s(%d)\n", ctime(now), $return, execname(), pid(), pexecname(), ppid() )}probe kernel.function("mac_partition").return { now=gettimeofday_s() printf( "%-25s kernel.mac_partition - return=%d (process %s(%d), parent %s(%d)\n", ctime(now), $return, execname(), pid(), pexecname(), ppid() )}probe kernel.function("karma_partition").return { now=gettimeofday_s() printf( "%-25s kernel.karma_partition - return=%d (process %s(%d), parent %s(%d)\n", ctime(now), $return, execname(), pid(), pexecname(), ppid() )}四、监控日志搜集(1)把工具的命名为“func-watch.stp”(2)以root用户执行如下命令stap -g -v func-watch.stp "sleep 3600" > func-watch.log结合附图和具体实施例,对本发明作进一步说明。
应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。
此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所限定的范围。
展开

查看更多专利详情信息请先登录或注册会员

相关专利类别推荐

获取手机验证码,即可注册成为会员

专利详情咨询

咨询内容

姓名

手机

验证码

用户登录

手机号

手机验证码

提示

不能再减了!!!

提交成功

八月瓜客服中心已经收到您的信息,正在为您派遣知识产权顾问。知识产权顾问会携带贴心的服务以闪电搬的速度与您联系。

扫一扫关注八月瓜微信 创业一手掌握