乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Ubuntu的內核轉儲工具

       guitarhua 2016-09-15

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

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

       

      Kdump簡介

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

       

      安裝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)在引導內核的命令linux后面多了一個參數(shù):

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

      crashkernel用來指定保留內存的大小,語法定義如下:

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

      range=start-[end]

      其中,start包含在指定范圍內,而end不包含在指定范圍內。

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

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

       

      試用Kdump

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

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

      service kdump start

      下面是啟動成功的畫面:

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

      echo c > /proc/sysrq-trigger

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

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

       

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

       

      使用Crash分析轉儲文件

      接下來我們要面對的是如何分析這個crash文件。這里還有一個教程,為了敘述方便,我把它叫做Crash Tutorial。Crash Tutorial主要介紹在Open SUSE和CentOS下如何利用crash工具來分析轉儲文件,這與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工具需要內核調試信息dbgsym才可以工作。我們可以先看看/usr/lib下有沒有debug目錄,如果沒有,則需要下載安裝,下載的地址在這里。注意,下載前先用uname -r命令確定當前內核的確切版本號,dbgsym的版本一定要和內核版本完全匹配才可以。

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

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

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

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

       

      注:

      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)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多