本发明涉及计算机技术领域,特别涉及一种linux系统复位处理方法及装置。
背景技术:
linux系统在运行的过程中经常会发生复位,复位场景通常包括:系统调用引起的复位、键盘操作引起的复位(键盘组合键)、电源按键引起的复位以及内核错误引起的复位等。
对于系统调用引起的复位,通常只有部分命令行程序(关机程序shutdown、重启程序reboot、停止程序halt等)在调用系统调用之前会记录复位信息到相应的日志文件中(比如wtmp文件)中,而如果直接调用系统调用,则没有记录;然而,wtmp文件中记录的复位信息较少,无法追溯进程调用信息,无法找到复位操作的最原始的发起者。
对于内核错误引起的复位,现有技术通常通过kdump服务把当前的内存镜像存储到vmcore文件中,可以通过crash等工具来解析vmcore文件,进而获得相应的复位信息;然而kdump等工具会保存当前系统的整个内存镜像,占用存储空间大、耗费时间长。
而对于键盘操作引起的复位和电源按键引起的复位,现有技术难以收集相应的复位信息。
因此,在linux系统进行系统复位时,复位信息难以收集,给故障定位带来困扰。
技术实现要素:
本发明提供了一种linux系统复位处理方法及装置,其目的是为了解决在linux系统进行系统复位时,复位信息难以收集,给故障定位带来困扰的问题。
为了达到上述目的,本发明的实施例提供了一种linux系统复位处理方法,该方法包括:
监测linux系统的复位场景;
当监测到linux系统启动复位流程时,获取复位操作的复位信息,将复位信息缓存在预设的保留内存中,其中复位信息包括复位操作的场景信息、发起者信息以及当前系统的状态信息;保留内存为系统内存中的内存空间;
当监测到linux系统执行复位操作时,启动预设内核,在所启动的预设内核中,将复位信息存储在硬盘中。
优选地,获取复位操作的复位信息的步骤,包括:
识别复位操作的场景信息;其中,复位操作的场景信息包括:系统调用引起的复位、电源键引起的复位以及键盘组合键引起的复位中的一种;
获取复位操作的发起者信息以及当前系统的状态信息,发起者信息至少包括:发起者的当前进程的进程标识符、与进程标识符对应的内核启动的第一个用户级init进程、所属终端、所属用户、启动时间以及执行的命令;当前系统的状态信息至少包括:系统执行复位操作前的中央处理器cpu状态、内存状态、输入/输出i/o状态。
优选地,识别复位操作的场景信息的步骤包括:
当在系统内核调用的处理流程中检测到用户态程序调用重新启动系统reboot命令时,确定复位操作的场景信息为系统调用引起的复位;
当检测到高级配置和电源管理接口acpi向系统上报系统复位对应的电源键事件时,确定复位操作的场景信息为电源键引起的复位;
当在键盘处理函数中检测到与系统复位对应的键盘处理函数时,确定复位操作的场景信息为键盘组合键引起的复位。
优选地,获取复位操作的发起者信息的步骤,包括:
获取发起者的当前进程的进程标识符、所属终端、所属用户、启动时间以及执行的命令;
根据当前进程的进程标识符与进程标识符对应的init进程,获取父进程的进程标识符,所述父进程为发起者的当前进程与init进程之间的进程。
优选地,获取复位操作的复位信息的步骤之后,方法还包括:
根据复位信息判断复位操作的场景信息是否为内核错误引起的系统复位;
当判断结果为是时,标记复位操作为内核错误;
其中,当监测到linux系统执行复位操作时,启动预设内核的步骤之后,
在预设内核中,将复位操作以及标记信息对应存储在硬盘中并执行复位操作。
优选地,当监测到linux系统启动复位流程时的步骤之前,方法还包括:
建立保留内存,并配置保留内存的容量以及起始地址并记录。
优选地,将复位信息缓存在预设的保留内存中的步骤,包括:
根据保留内存的容量以及起始地址查找保留内存,将复位信息缓存在保留内存中。
优选地,当监测到linux系统执行复位操作时的步骤之前,方法还包括:
建立预设内核,配置预设内核的容量以及起始地址并生成镜像文件,将镜像文件存储在硬盘中。
为了实现上述目的,本发明的实施例还提供了一种linux系统复位处理装置,包括:
检测模块,用于监测linux系统的复位场景;
获取模块,用于当监测到linux系统启动复位流程时,获取复位操作的复位信息,将复位信息缓存在预设的保留内存中,其中复位信息包括复位操作的场景信息、发起者信息以及当前系统的状态信息;保留内存为系统内存中的内存空间;
执行模块,用于当监测到linux系统执行复位操作时,启动预设内核,在所启动的预设内核中,将复位信息存储在硬盘中。
优选地,获取模块包括:
识别子模块,用于识别复位操作的场景信息;其中,复位操作的场景信息包括:系统调用引起的复位、电源键引起的复位以及键盘组合键引起的复位中的一种;
信息获取子模块,用于获取复位操作的发起者信息以及当前系统的状态信息,发起者信息至少包括:发起者的当前进程的进程标识符、与进程标识符对应的内核启动的第一个用户级init进程、所属终端、所属用户、启动时间以 及执行的命令;当前系统的状态信息至少包括:系统执行复位操作前的中央处理器cpu状态、内存状态、输入/输出i/o状态。
优选地,识别子模块包括:
第一确定单元,用于当在系统内核调用的处理流程中检测到用户态程序调用重新启动系统reboot命令时,确定复位操作的场景信息为系统调用引起的复位;
第二确定单元,用于当检测到高级配置和电源管理接口acpi向系统上报系统复位对应的电源键事件时,确定复位操作的场景信息为电源键引起的复位;
第三确定单元,用于当在键盘处理函数中检测到与系统复位对应的键盘处理函数时,确定复位操作的场景信息为键盘组合键引起的复位。
优选地,信息获取子模块包括:
第一获取单元,用于根据当前进程的进程标识符与进程标识符对应的init进程,获取父进程的进程标识符,所述父进程为发起者的当前进程与init进程之间的进程。
优选地,还包括:
内核错误处理模块,用于在获取模块获取复位操作的复位信息之后,
根据复位信息判断复位操作的场景信息是否为内核错误引起的系统复位;
当判断结果为是时,标记复位操作为内核错误;
其中,当监测到linux系统执行复位操作时,启动预设内核的步骤之后,
在预设内核中,将复位操作以及标记信息对应存储在硬盘中并执行复位操作。
优选地,该装置还包括:
内存建立模块,用于在获取模块当监测到linux系统启动复位流程时之前,
建立保留内存,并配置保留内存的容量以及起始地址并记录。
优选地,获取模块还用于:
根据保留内存的容量以及起始地址查找保留内存,将复位信息缓存在保留内存中。
优选地,该装置还包括:
内核建立模块,用于在执行模块当监测到linux系统执行复位操作时之前,
建立预设内核,配置预设内核的容量以及起始地址并生成镜像文件,将镜像文件存储在硬盘中。
本发明的上述方案至少包括以下有益效果:
本发明提供的linux系统复位处理方法及装置,通过当监测到linux系统启动复位流程时,获取复位操作的复位信息,可及时地收集复位信息,追溯进程调用信息,找到复位操作的最原始的发起者;并在预设内核中将复位信息写入硬盘,仅存储复位信息,占用的存储空间小,且耗费时间较短,实现复位信息持久化,便于进行故障定位或者其他服务,增强系统的可维护性。本发明解决了linux系统进行系统复位时,复位信息难以收集,给故障定位带来困扰的问题。
附图说明
图1表示本发明的第一实施例提供的linux系统复位处理方法的基本步骤流程图;
图2为本发明的第二实施例的场景示意图;
图3为本发明的第二实施例的内核态控制模块执行的步骤的流程图;
图4为本发明的第二实施例的用户态复位信息收集模块执行的步骤的流程图;
图5为本发明的第二实施例的复位信息缓存模块执行的步骤的流程图;
图6为本发明的第二实施例的复位信息持久化模块执行的步骤的流程图;
图7为本发明的第二实施例的快速启动内核模块执行的步骤的流程图;
图8为本发明的第三实施例提供的linux系统复位处理装置的框图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明针对现有的问题,提供了一种linux系统复位处理方法及装置。
第一实施例
参见图1,本发明的第一实施例提供了一种linux系统复位处理方法,包 括:
步骤101,监测linux系统的复位场景。
其中,复位场景通常包括:系统调用引起的复位、键盘操作引起的复位(键盘组合键,比如ctrl+alt+delete组合键)、电源按键引起的复位以及内核错误引起的复位等。
步骤102,当监测到linux系统启动复位流程时,获取复位操作的复位信息,将复位信息缓存在预设的保留内存中,其中复位信息包括复位操作的场景信息、发起者信息以及当前系统的状态信息;保留内存为系统内存中的内存空间。
其中,保留内存为预设的系统内存中的内存空间,用于缓存复位信息。以系统调用引起的复位为例,当系统复位流程启动时,可能硬盘已经无法访问,因此需要在内存中保留一段空间区域,用于缓存复位信息。当监测到linux系统启动复位流程时,也就是在复位流程的入口,插入相应的处理逻辑,获取复位信息,将复位信息缓存在保留内存中,并提供读出和写入的接口地址,以便于写入硬盘。
步骤103,当监测到linux系统执行复位操作时,启动预设内核,在所启动的预设内核中,将复位信息存储在硬盘中。
其中,预设内核为脱离系统内核以外的内核,用于执行系统复位。本发明的实施例将复位信息写入硬盘的过程也在预设内核中执行。
本发明的上述实施例中,步骤102包括:
第一步,识别复位操作的场景信息;其中,复位操作的场景信息包括:系统调用引起的复位、电源键引起的复位以及键盘组合键引起的复位中的一种;
第二步,获取复位操作的发起者信息以及当前系统的状态信息,发起者信息至少包括:发起者的当前进程的进程标识符、与进程标识符对应的内核启动的第一个用户级init进程、所属终端、所属用户、启动时间以及执行的命令;当前系统的状态信息至少包括:系统执行复位操作前的中央处理器cpu状态、内存状态、输入/输出i/o状态。
优选地,上述第一步包括:
当在系统内核调用的处理流程中检测到用户态程序调用重新启动系统 reboot命令时,确定复位操作的场景信息为系统调用引起的复位;具体地,当系统内核调用的处理流程中检测到由用户态程序调用reboot命令对应的程序语言时,可确认复位操作的场景信息为系统调用。
当检测到高级配置和电源管理接口acpi向系统上报系统复位对应的电源键事件时,确定复位操作的场景信息为电源键引起的复位;通常情况下,系统硬件通过acpi向系统上报电源键事件时,比如短按电源键通常为重启(即系统复位),那么当用户短按电源键时,acpi会向系统上报,那么接收到acpi所上报的短按电源键的事件时,可确认复位操作的场景信息为电源键引起的复位。
当在键盘处理函数中检测到与系统复位对应的键盘处理函数时,确定复位操作的场景信息为键盘组合键引起的复位;具体地,当用户在按下“ctrl+alt+del”组合键以后,系统响应中断事件会调用驱动层中断处理函数,然后进入内核输入子系统进行子系统分类,最后调用与系统复位对应的键盘处理函数,启动复位流程。
优选地,上述第一步包括:
获取发起者的当前进程的进程标识符、所属终端、所属用户、启动时间以及执行的命令;
根据当前进程的进程标识符与进程标识符对应的init进程,获取父进程的进程标识符,所述父进程为发起者的当前进程与init进程之间的进程;其中,init进程是内核启动的第一个用户级进程,父进程为当前进程与inti进程之间的进程,通常情况下,父进程会存在多个,通过当前进程逐级向前回溯便可获得各个父进程。获取上述信息是为了收集与复位操作有关的信息,增强系统的可维护性。
本发明的上述实施例中,步骤102之后还包括:
根据复位信息判断复位操作的场景信息是否为内核错误引起的系统复位,当判断结果为是时,标记复位操作为内核错误;
其中,当监测到linux系统执行复位操作时,启动预设内核的步骤之后,
在预设内核中,将复位操作以及标记信息对应存储在硬盘中并执行复位操作。
具体地,内核错误(kernelpanic)指操作系统监测到内部的致命错误,并且无法安全处理此错误的情况;内核错误时可能系统无法正常运行,因此只能在预设内核中,将复位场景做标记,并执行复位流程。
本发明的上述实施例中,步骤102之前,还包括:
建立保留内存,并配置保留内存的容量以及起始地址并记录。
相应地,步骤102中,将复位信息缓存在预设的保留内存中的步骤,包括:
根据保留内存的容量以及起始地址查找保留内存,将复位信息缓存在保留内存中。
其中,保留内存用于缓存复位信息;在获取复位信息之前建立保留内存,并配置容量以及起始地址,以便系统根据起始地址,将复位信息缓存在保留内存中。
本发明的上述实施例中,步骤102之前,还包括:
建立预设内核,配置预设内核的容量以及起始地址并生成镜像文件,将镜像文件存储在硬盘中。
具体地,建立预设内核并配置容量以及起始地址,生成镜像文件存储在硬盘中,实现持久化。
本发明的上述实施例中,通过当监测到linux系统启动复位流程时,获取复位操作的复位信息,可及时地收集复位信息,追溯进程调用信息,找到复位操作的最原始的发起者;并在预设内核中将复位信息写入硬盘,仅存储复位信息,占用的存储空间小,且耗费时间较短,实现复位信息持久化,便于进行故障定位或者其他服务,增强系统的可维护性。本发明解决了linux系统进行系统复位时,复位信息难以收集,给故障定位带来困扰的问题。
第二实施例
本发明的第二实施例以一个具体实施例,介绍本发明提供的linux系统复位处理方法。参见图2,图2为本发明的第二实施例的场景示意图,图2中所示的linux系统包括:内核态控制模块201,用户态复位信息收集模块202,复位信息缓存模块203,快速启动内核模块205以及复位信息持久化模块204。
其中,内核态控制模块201,用于提供收集系统复位信息的通用机制:在复位操作开始的时候,启动用户态复位信息收集模块202;
在执行处理器架构相关代码、执行系统复位操作之前:启动快速启动内核模块205。
用户态复位信息收集模块202,用于提供收集系统复位信息的各种策略,便于系统把收集到的信息写入复位信息缓存模块203。
复位信息缓存模块203,用于提供读出、写入接口,并被用户态复位信息收集模块202调用,将复位信息缓存在复位信息缓存模块203中,被复位信息持久化模块204所调用,获取复位信息缓存模块203中所缓存的复位信息。
快速启动内核模块205,用于快速启动一个裁剪的、可用的内核,在内核的环境中,执行复位信息持久化模块204。
复位信息持久化模块204,从复位信息缓存模块203中读出复位信息,保存到硬盘上指定的文件中。
如图3所示,内核态控制模块201执行如下步骤:
步骤301,在系统复位的入口,插入处理逻辑:调用用户态复位信息收集模块202。其中,对于reboot系统调用引起的复位:
在reboot系统调用的流程中,插入处理逻辑:
启动用户态信息收集模块202(可以通过call_usermodehelper等方法)。
对于键盘组合键引起的复位:
在键盘驱动的下半部处理中,插入处理逻辑:
启动用户态信息收集模块202(可以通过call_usermodehelper等方法)。
对于电源按键引起的复位:
在acpi电源按键驱动程序的处理中,插入处理逻辑:
启动用户态信息收集模块202(可以通过call_usermodehelper等方法)。
需要说明的时,对于内核错误引起的复位,由于内核已经无法正常工作了,所以不能启动用户态信息收集模块,直接执行步骤302。
步骤302,在执行处理器架构相关代码、真正执行系统复位操作之前,插入逻辑:调用快速启动小内核模块。
对于reboot系统调用引起的复位、键盘组合键引起的复位以及电源按键引起的复位,在执行系统复位操作之前,插入处理逻辑:
在内核态快速启动内核(可以通过kernel_kexec等方法)。
而对于内核错误引起的复位,在内核错误的处理流程中,插入处理逻辑:
设置内核错误的标志,并快速启动内核(可以通过kernel_kexec等方法),并且在参数中传内核错误的标志。
如图4所示,用户态复位信息收集模块202,执行如下步骤:
步骤401,把当前复位场景的描述信息写入复位信息缓存模块203。
根据内核态控制模块传入的参数,分别把“reboot系统调用引起的复位”、“按下电源按键引起的复位”、“按下键盘组合键引起的复位”等描述信息,写入复位信息缓存模块203中。
步骤402,判断是否需要记录进程回溯信息,如果需要则执行步骤403,否则执行步骤404。
步骤403,进程回溯信息处理。具体地,进程回溯处理包括:获取当前进程的id号等信息;把收集到信息记录到复位信息缓存模块中;判断当前进程的父进程信息,如果已经是init进程了,则不需要继续往上一级回溯了,否则,把当前进程id赋值为当前进程的父进程id,继续循环回溯;
步骤404,判断是否需要记录系统状态信息,如果需要则执行步骤35,获取cpu、内存、io等的统计信息,否则结束流程。
如图5所示,复位信息缓存模块203,执行如下步骤:
步骤501,将用户态复位信息收集模块202中缓存的复位信息写入保留内存;
步骤502,记录保留内存的相关信息(容量和地址范围等)。
如图6所示,复位信息持久化模块204,执行如下步骤:
步骤601,判断复位场景是否为内核错误(是否传入内核错误标记),如果不是,则执行步骤602,把复位信息缓存模块中的数据持久化到硬盘上;否则执行步骤603,将内核错误标记持久化到硬盘上。
如图7所示,快速启动内核模块205,执行如下步骤:
步骤701,检测到内核控制模块发起快速启动时,执行步骤702,快速启动。
步骤703,启动复位信息持久化模块204,启动复位信息持久化模块204使把复位信息缓存模块中的数据持久化到硬盘上或将内核错误标记持久化到 硬盘上。
本发明的上述实施例中,通过内核态控制模块201当监测到linux系统启动复位流程时,在系统复位的入口,插入处理逻辑:调用用户态复位信息收集模块202获取复位操作的复位信息并追溯进程调用信息,找到复位操作的最原始的发起者;并通过复位信息持久化模块204将复位信息写入硬盘,实现复位信息持久化,便于进行故障定位或者其他服务,增强系统的可维护性。本发明解决了linux系统进行系统复位时,复位信息难以收集,给故障定位带来困扰的问题。
第三实施例
参见图8,本发明的第三实施例提供了一种linux系统复位处理装置,包括:
检测模块801,用于监测linux系统的复位场景;
获取模块802,用于当监测到linux系统启动复位流程时,获取复位操作的复位信息,将复位信息缓存在预设的保留内存中,其中复位信息包括复位操作的场景信息、发起者信息以及当前系统的状态信息;保留内存为系统内存中的内存空间;
执行模块803,用于当监测到linux系统执行复位操作时,启动预设内核,在所启动的预设内核中,将复位信息存储在硬盘中。
优选地,获取模块802包括:
识别子模块,用于识别复位操作的场景信息;其中,复位操作的场景信息包括:系统调用引起的复位、电源键引起的复位以及键盘组合键引起的复位中的一种;
信息获取子模块,用于获取复位操作的发起者信息以及当前系统的状态信息,发起者信息至少包括:发起者的当前进程的进程标识符、与进程标识符对应的内核启动的第一个用户级init进程、所属终端、所属用户、启动时间以及执行的命令;当前系统的状态信息至少包括:系统执行复位操作前的中央处理器cpu状态、内存状态、输入/输出i/o状态。
优选地,识别子模块包括:
第一确定单元,用于当在系统内核调用的处理流程中检测到用户态程序调 用重新启动系统reboot命令时,确定复位操作的场景信息为系统调用引起的复位;
第二确定单元,用于当检测到高级配置和电源管理接口acpi向系统上报系统复位对应的电源键事件时,确定复位操作的场景信息为电源键引起的复位;
第三确定单元,用于当在键盘处理函数中检测到与系统复位对应的键盘处理函数时,确定复位操作的场景信息为键盘组合键引起的复位。
优选地,信息获取子模块包括:
第一获取单元,用于获取发起者的当前进程的进程标识符、所属终端、所属用户、启动时间以及执行的命令;
根据当前进程的进程标识符与进程标识符对应的init进程,获取父进程的进程标识符,所述父进程为发起者的当前进程与init进程之间的进程。
优选地,该装置还包括:
内核错误处理模块,用于在获取模块802获取复位操作的复位信息之后,
根据复位信息判断复位操作的场景信息是否为内核错误引起的系统复位,当判断结果为是时,
标记复位操作为内核错误;
其中,当监测到linux系统执行复位操作时,启动预设内核的步骤之后,
在预设内核中,将复位操作以及标记信息对应存储在硬盘中并执行复位操作。
优选地,该装置还包括:
内存建立模块,用于在获取模块802当监测到linux系统启动复位流程时之前,
建立保留内存,并配置保留内存的容量以及起始地址并记录。
优选地,获取模块802还用于:
根据保留内存的容量以及起始地址查找保留内存,将复位信息缓存在保留内存中。
优选地,该装置还包括:
内核建立模块,用于在执行模块803当监测到linux系统执行复位操作时之前,
建立预设内核,配置预设内核的容量以及起始地址并生成镜像文件,将镜像文件存储在硬盘中。
本发明的上述实施例中,通过当监测到linux系统启动复位流程时,获取复位操作的复位信息,可及时地收集复位信息,追溯进程调用信息,找到复位操作的最原始的发起者;并在预设内核中将复位信息写入硬盘,仅存储复位信息,占用的存储空间小,且耗费时间较短,实现复位信息持久化,便于进行故障定位或者其他服务,增强系统的可维护性。本发明解决了linux系统进行系统复位时,复位信息难以收集,给故障定位带来困扰的问题。
需要说明的是,本发明实施例提供的linux系统复位处理装置是应用上述方法的装置,即上述方法的所有实施例均适用于该装置,且均能达到相同或相似的有益效果。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。