本發明涉及計算機技術領域,特別涉及一種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系統復位處理裝置是應用上述方法的裝置,即上述方法的所有實施例均適用于該裝置,且均能達到相同或相似的有益效果。
以上所述是本發明的優選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發明所述原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。