您好,登錄后才能下訂單哦!
這篇文章主要介紹“在Ubuntu系統(tǒng)上怎么安裝Kdump來處理系統(tǒng)崩潰問題”,在日常操作中,相信很多人在在Ubuntu系統(tǒng)上怎么安裝Kdump來處理系統(tǒng)崩潰問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”在Ubuntu系統(tǒng)上怎么安裝Kdump來處理系統(tǒng)崩潰問題”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
什么是Kdump?
Kdump 是一種的新的crash dump捕獲機制,用來捕獲kernel crash時候產(chǎn)生的crash dump。Kdump需要配置兩個不同目的的kernel,其中一個我們在這里稱作standard(production) kernel;另外一個稱之為Crash(capture)kernel。
standard(production)kernel,是指我正在使用的kernel,當(dāng)standard kernel在使用的過程中出現(xiàn)crash的時候, kdump會切換到crash kernel, 簡單來說,standard kernel會正運行時發(fā)生crash,而crash(capture) Kernel 會被用來捕獲production kernel crash時候產(chǎn)生的crash dump。
捕獲crash dump是在新的crash(capture) kernel 的上下文中來捕獲的,而不是在standard kernel上下文進行。
具體是當(dāng)standard kernel方式crash的時候,kdump通過kexec(后面介紹)自動啟動進入到crash kernel當(dāng)中。如果啟動了kdump服務(wù),standard kernel會預(yù)留一部分內(nèi)存, 這部分內(nèi)存用來啟動crash kernel。
kdump機制主要包括兩個組件:kdump和kexec
kexec是一個快速啟動機制,允許通過已經(jīng)運行的內(nèi)核的上下文啟動一個Linux內(nèi)核,不需要經(jīng)過BIOS。BIOS可能會消耗很多時間,特別是帶有眾多數(shù)量的外設(shè)的大型服務(wù)器。這種辦法可以為經(jīng)常啟動機器的開發(fā)者節(jié)省很多時間。Kexec是實現(xiàn)kdump機制的關(guān)鍵,它包括2個組成部分:一是內(nèi)核空間的系統(tǒng)調(diào)用kexec_load,負責(zé)在生產(chǎn)內(nèi)核(production kernel 或 first kernel)啟動時將捕獲內(nèi)核(capture kernel或sencond kernel)加載到指定地址。二是用戶空間的工具kexec-tools,他將捕獲內(nèi)核的地址傳遞給生產(chǎn)內(nèi)核,從而在系統(tǒng)崩潰的時候能夠找到捕獲內(nèi)核的地址并運行。沒有kexec就沒有kdump。先有kexec實現(xiàn)了在一個內(nèi)核中可以啟動另一個內(nèi)核,才讓kdump有了用武之地。
kdump是一種先進的基于kexec的內(nèi)核崩潰轉(zhuǎn)儲機制。當(dāng)系統(tǒng)崩潰時,kdump使用kexec 啟動到第二個內(nèi)核。第二個內(nèi)核通常叫做捕獲內(nèi)核,以很小內(nèi)存啟動以捕獲轉(zhuǎn)儲鏡像。第一個內(nèi)核保留了內(nèi)存的一部分給第二內(nèi)核啟動用。由于kdump利用kexec啟動捕獲內(nèi)核,繞過了 BIOS,所以第一個內(nèi)核的內(nèi)存得以保留。這是內(nèi)核崩潰轉(zhuǎn)儲的本質(zhì)。kdump需要兩個不同目的的內(nèi)核,生產(chǎn)內(nèi)核和捕獲內(nèi)核。生產(chǎn)內(nèi)核是捕獲內(nèi)核服務(wù)的對像。捕獲內(nèi)核會在生產(chǎn)內(nèi)核崩潰時啟動起來,與相應(yīng)的ramdisk一起組建一個微環(huán)境,用以對生產(chǎn)內(nèi)核下的內(nèi)存進行收集和轉(zhuǎn)存。注意,在啟動時,kdump保留了一定數(shù)量的重要的內(nèi)存,為了計算系統(tǒng)需要的真正最小內(nèi)存,加上kdump使用的內(nèi)存數(shù)量,以決定真正的最小內(nèi)存的需求。
kexec和kdump的設(shè)計區(qū)別:
Kexec的設(shè)計是用新內(nèi)核去覆蓋原內(nèi)核位置;而KDUMP是預(yù)留一塊內(nèi)存來加載第二個內(nèi)核(和相關(guān)數(shù)據(jù)),Crash后第二個內(nèi)核在原位置運行(不然就達不到相關(guān)目的了),收集第一個內(nèi)核的相關(guān)內(nèi)存信息。
下面開始試驗kdump特性:
操作系統(tǒng):ubuntu 12.10(3.5.0-17-generic)
安裝kdump工具
代碼如下:
apt-get install kexec-tools crash
發(fā)現(xiàn)安裝過程中修改了grub,在引導(dǎo)內(nèi)核配置上(/boot/grub/grub.cfg)多了如下參數(shù)
代碼如下:
crashker nel=384M-2G:64M,2G-:128M
crashkernel用來指定保留內(nèi)存的大小,我們可以知道crashkernel幫我們設(shè)定的保留區(qū)域的大小是:如果內(nèi)存小于384M,不保留內(nèi)存;如果內(nèi)存大于等于384M但小于2G,保留64M;如果內(nèi)存大于2G,保留128M。
修改kdump配置文件(/etc/default/kdump-tools)
代碼如下:
USE_KDUMP=1
下載dbgsym文件,改文件是用來吊事內(nèi)核信息的文件
代碼如下:
wagt 'http://ddebs.ubuntu.com/pool/main/l/linux/linux-image-3.5.0-17-generic-dbgsym_3.5.0-17.28_amd64.ddeb'
dpkg -i linux-image-3.5.0-17-generic-dbgsym_3.5.0-17.28_amd64.ddeb
重啟機器使配置生效。
啟動kdump-tools
代碼如下:
/etc/init.d/kdump-tools start
Starting kdump-tools: setup_linux_vesafb: 1280x1024x32 @ d9800000 +500000
* loaded kdump kernel
kdump-tools配置(kdump-config show):
代碼如下:
USE_KDUMP: 1
KDUMP_SYSCTL: kernel.panic_on_oops=1
KDUMP_COREDIR: /var/crash
crashkernel addr: 0x2e000000
current state: ready to kdump
kernel link:
/usr/lib/debug/boot/vmlinux-3.5.0-17-generic
kexec command:
/sbin/kexec -p --command-line="BOOT_IMAGE=/boot/vmlinuz-3.5.0-17-generic root=UUID=9386113e-a6db-4a1c-9565-8c8c1de4a55a ro irqpoll maxcpus=1 nousb" --initrd=/boot/initrd.img-3.5.0-17-generic /boot/vmlinuz-3.5.0-17-generic
可以通過sysrq強制系統(tǒng)崩潰。
代碼如下:
echo ‘c’ > /proc/sysrq-trigger
這造成內(nèi)核崩潰,如配置有效,系統(tǒng)將重啟進入kdump內(nèi)核,當(dāng)系統(tǒng)進程進入到啟動 kdump服務(wù)的點時,(dump.時間戳文件)將會拷貝到你在kdump配置文件中設(shè)置的位置。ubuntu的缺省目錄是:/var/crash/時間戳文件夾。然后系統(tǒng)重啟進入到正常的內(nèi)核。一旦回復(fù)到正常的內(nèi)核,就可以在上述的目錄下發(fā)現(xiàn)dump文件,即內(nèi)存轉(zhuǎn)儲文件。可以使用之前安裝的crash工具來進行分析。
生成dump文件后/var/crash的目錄結(jié)構(gòu):
├── 201305061817
│ ├── config_link -> /boot/config-3.5.0-17-generic
│ ├── dump.201305061817
│ ├── kernel_link -> /usr/lib/debug/boot/vmlinux-3.5.0-17-generic
│ └── system.map_link -> /boot/System.map-3.5.0-17-generic
├── config_link -> /boot/config-3.5.0-17-generic
├── kernel_link -> /usr/lib/debug/boot/vmlinux-3.5.0-17-generic
├── kexec_cmd
└── system.map_link -> /boot/System.map-3.5.0-17-generic
ump.201305061817就是生成的dump文件,后面的一串?dāng)?shù)字誒當(dāng)時的時間戳。
接下來用crash進行分析
代碼如下:
crash /usr/lib/debug/boot/vmlinux-3.5.0-17-generic dump.201305061817
出現(xiàn)如下錯誤提示: crash: cannot resolve: "xtime",此時crash的版本為5.1.6,版本太低,調(diào)試不了3.5的內(nèi)核,需要升級crash,可以手動安裝crash。
到此,關(guān)于“在Ubuntu系統(tǒng)上怎么安裝Kdump來處理系統(tǒng)崩潰問題”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。