小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Ubuntu的內(nèi)核轉(zhuǎn)儲工具

 guitarhua 2016-09-15

在我的上一篇博文《Linux內(nèi)核的Oops》的最后介紹到一個Linux內(nèi)核轉(zhuǎn)儲工具Kdump,這個工具可以在發(fā)生kernel panic時把現(xiàn)場dump到一個文件里,以供后續(xù)分析之用。本文主要介紹在Ubuntu下如何使用kdump。

Kdump是一個通用的Linux內(nèi)核轉(zhuǎn)儲工具,詳細的用法說明可以參考這篇Kdump Tutorial。這篇教程洋洋灑灑幾十頁(鏈接里有pdf文件可以下載),詳細介紹了內(nèi)核配置的參數(shù),以及實現(xiàn)內(nèi)核崩潰轉(zhuǎn)儲的一系列工具的用法以及可能出現(xiàn)的問題,過程看上去有點繁瑣。是不是每臺需要調(diào)試的機器都要這么設(shè)置呢?其實是沒有必要的。Linux發(fā)行版已經(jīng)幫我們做了很大一部分工作,我們需要做的只是安裝幾個包,啟動一下Kdump服務就可以了。很多發(fā)行版比如Ubuntu默認在內(nèi)核里已經(jīng)支持了Kdump,我們并不需要重新配置內(nèi)核,kdump的一系列工具也做成了service可以直接啟用。接下來,我們就會看到在Ubuntu上使用kdump真的非常簡單。但是,我還是建議大家在完成這個簡單的流程后,再回過頭來仔細閱讀上面提到的教程,畢竟,知道真正的細節(jié)才能有助于我們更好的理解這個系統(tǒng)。

 

Kdump簡介

Kdump是一個Linux內(nèi)核崩潰轉(zhuǎn)儲機制,這個機制的原理是在內(nèi)存中保留一塊區(qū)域,這塊區(qū)域用來存放capture kernel,當前的內(nèi)核發(fā)生crash后,通過kexec把保留區(qū)域的capture kernel運行起來,由capture kernel負責把crash kernel的完整信息--包括CPU寄存器、堆棧數(shù)據(jù)等--轉(zhuǎn)儲到文件中,文件的存放位置可以是本地磁盤,也可以是網(wǎng)絡(luò)。

 

安裝Ubuntu的crashdump工具包

在Ubuntu下實現(xiàn)Kdump只需要安裝linux-crashdump這個包就可以了,可以在新立得下搜索linux-crashdump或者用命令:

sudo apt-get install linux-crashdump

linux-crashdump實際上安裝了三個工具,分別是:crash,kexec-tools,以及makedumpfile。

安裝完畢以后,我們檢查一下grub2的啟動選項,會發(fā)現(xiàn)在引導內(nèi)核的命令linux后面多了一個參數(shù):

crashkernel=384M-2G:64M,2G-:128M

crashkernel用來指定保留內(nèi)存的大小,語法定義如下:

crashkernel=:[,:,...][@offset]

range=start-[end]

其中,start包含在指定范圍內(nèi),而end不包含在指定范圍內(nèi)。

參考這個語法定義,我們就可以知道linux-crashkernel幫我們設(shè)定的保留區(qū)域的大小是:如果內(nèi)存小于384M,不保留內(nèi)存;如果內(nèi)存大于等于384M但小于2G,保留64M;如果內(nèi)存大于2G,保留128M。

在/etc/init.d中還會有一個kdump的service腳本,我們可以打開這個腳本看一看,內(nèi)容很簡單,主要是用kexec把/boot下的linux內(nèi)核鏡像當作capture kernel放入保留內(nèi)存里。

 

試用Kdump

在下面的實例中,所有的操作都需要root權(quán)限,所以請先用sudo su切換到root。

我們需要首先啟動kdump service,命令如下:

service kdump start

下面是啟動成功的畫面:

寫一個讓內(nèi)核崩潰的模塊還是比較麻煩的,我們可以通過SysRq來實現(xiàn)這個目的。注意,在進行下面的操作前,請保存好自己的數(shù)據(jù)。

echo c > /proc/sysrq-trigger

或者按這個組合按鍵: Alt+SysRq+c

通過上面的操作,你的系統(tǒng)會立刻崩潰。不出意外的話,系統(tǒng)很快就會重啟,然后在/var/crash這個目錄下我們就可以找到轉(zhuǎn)儲的crash鏡像。

 

到這里,利用kdump進行Linux內(nèi)核轉(zhuǎn)儲的實驗就結(jié)束了,比起Kdump Tutorial里的步驟簡單很多,這都是Ubuntu的功勞。

 

使用Crash分析轉(zhuǎn)儲文件

接下來我們要面對的是如何分析這個crash文件。這里還有一個教程,為了敘述方便,我把它叫做Crash Tutorial。Crash Tutorial主要介紹在Open SUSE和CentOS下如何利用crash工具來分析轉(zhuǎn)儲文件,這與Ubuntu還是有點差別的。在上述兩個發(fā)行版里,kdump生成的crash鏡像文件是vmcore,這個文件可以用直接拿來用crash工具分析。Ubuntu提供了一個叫做Apport的工具,Apport用于收集崩潰時所有OS認為有用的信息,并把它們打成一個包,就是上面看到的linux-image-2.6.32-25-generic.0.crash,我們需要的vmcore就在這個包里。下面這個命令用于解包:

apport-unpack /var/crash/linux-image-2.6.32-25-generic.0.crash ~/tmp

我們把crash壓縮包解到~/tmp中:

得到vmcore之后,我們還不能立刻進行分析,crash工具需要內(nèi)核調(diào)試信息dbgsym才可以工作。我們可以先看看/usr/lib下有沒有debug目錄,如果沒有,則需要下載安裝,下載的地址在這里。注意,下載前先用uname -r命令確定當前內(nèi)核的確切版本號,dbgsym的版本一定要和內(nèi)核版本完全匹配才可以。

安裝好dbgsym之后,我們就可以使用crash來分析vmcore了,命令如下:

crash /usr/lib/debug/boot/vmlinux-2.6.32-25-generic ~/tmp/VmCore

在crash里,我們可以用bt查看內(nèi)核崩潰時的call trace:

詳細的crash用法大家可以參考Crash Tutorial,或者用Google搜索一下相關(guān)資料。

 

注:

1. 本文采用的操作系統(tǒng)環(huán)境是 Kubuntu 10.04,在Ubuntu 10.04下實驗應該同樣是沒有問題的。

2. 我有用過Ubuntu 10.10來實驗kdump,但是很不幸,capture kernel沒有跑起來,如果大家有在Ubuntu 10.10下的成功經(jīng)驗,麻煩告訴我。 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多