0、Kdump 的概念出现在 2005 左右,是迄今为止最可靠的内核转存机制,已经被主要的 linux™ 厂商选用
LKCD(Linux Kernel Crash Dump),netdump,diskdump 已被纳入 LDPs(Linux Documen-tation Project) 内核。SUSE 和 RedHat 都对 kdump 有技术支持。
1、kdump是在系统崩溃、死锁或者死机的时候用来转储内存运行参数的一个工具和服务;
2、安装&配置
安装:sudo apt-get install linux-crashdump ubuntu版本
配置/etc/kdump.conf文件,指定vmcore 将被转储的路径。可以通过scp拷贝到另一个服务器,也可以是裸设备,或者本地的文件系统。
启动kdump服务:service kdump start
触发:可以通过kexec加载内核镜像,让系统准备捕获一个崩溃时产生的vmcore。可以通过sysrq强制系统崩溃
echo "c" > /proc/sysrq-trigger
这造成kernel panic,紧跟着系统重启kdump内核。当启动进程进入到启动kdump服务器时,vmcore将会被拷贝到你在/etc/kdump.conf文件中指定的位置
注意:当系统崩溃 时,kdump使用kexec启动到第二个内核。第二个内核通常叫做捕获内核(capture kernel),以很小内存启动,并且捕获转储镜像。
3、 配置保留内存用来转储
对于i386和x86_64架构,编辑/etc/grub.conf启动配置文件,在内核行的末尾添加 crashkernel=128@16M,例如:
root (hd0,0) kernel /boot/vmlinuz-2.6.17-1.2519.4.21.el5 ro root=LABEL=/ rhgb quietcrashkernel=128M@16M initrd /boot/initrd-2.6.17-1.2519.4.21.el5.img
128M内存(从16M开始)不被正常的系统使用,为捕获内核保留。注意,free -m的输出会显示内存比不加参数时少了128M,这就是我们所期望的。
注意:可以使用小于128M,但是只使用64M做测试被证实是不可靠的。
4、如何访问捕获内存
在内核崩溃之前所有关于核心映像的必要信息都用 ELF 格式编码并存储在保留的内存区域中。ELF 头所在的物理地址被作为命令行参数(fcorehdr=)传递给新启动的转储内核。
在 i386 体系结构上,启动的时候需要使用物理内存开始的 640K,而不管操作系统内核转载在何处。因此,这个 640K 的区域在重新启动第二个内核的时候由 kexec 备份。
在第二个内核中,“前一个系统的内存”可以通过两种方式访问:
1. 通过 /dev/oldmem 这个设备接口。
一个“捕捉”设备可以使用“raw”(裸的)方式 “读”这个设备文件并写出到文件。这是关于内存的 “裸”的数据转储,同时这些分析 / 捕捉工具应该足够“智能”从而可以知道从哪里可以得到正确的信息。ELF 文件头(通过命令行参数传递过来的 elfcorehdr)可能会有帮助。
2. 通过 /proc/vmcore。
这个方式是将转储输出为一个 ELF 格式的文件,并且可以使用一些文件拷贝命令(比如 cp,scp 等)将信息读出来。同时,gdb 可以在得到的转储文件上做一些调试(有限的)。这种方式保证了内存中的页面都以正确的途径被保存 ( 注意内存开始的 640K 被重新映射了 )。
5、关于转储内核
需要引导系统内核时,可使用如下步骤和命令载入“转储捕获”内核:
kexec -p |
装载转储捕捉内核的注意事项:
下面是redhat和susue的流程图
http://www.dedoimedo.com/computers/kdump.html
Kdump official website
Kdump official documentation
Debugging Linux kernel using Kdump (PDF)
root@ubuntu:/home/user03# sudo apt-get install linux-crashdump
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
crash kexec-tools libdw1 makedumpfile
Suggested packages:
kernel-patch-lkcd dumputils
The following NEW packages will be installed:
crash kexec-tools libdw1 linux-crashdump makedumpfile
0 upgraded, 5 newly installed, 0 to remove and 299 not upgraded.
Need to get 2,703 kB of archives.
After this operation, 6,696 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Get:1 http://us.archive.ubuntu.com/ubuntu/ quantal/main libdw1 i386 0.153-1ubuntu1 [217 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ quantal/main crash i386 5.1.6-1ubuntu1 [2,278 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ quantal/main makedumpfile i386 1.4.4-1 [116 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu/ quantal/main kexec-tools i386 1:2.0.3-1ubuntu2 [89.9 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu/ quantal-updates/main linux-crashdump i386 3.5.0.25.31 [2,710 B]
Fetched 2,703 kB in 1min 45s (25.5 kB/s)
Preconfiguring packages ...
Selecting previously unselected package libdw1:i386.
(Reading database ... 153844 files and directories currently installed.)
Unpacking libdw1:i386 (from .../libdw1_0.153-1ubuntu1_i386.deb) ...
Selecting previously unselected package crash.
Unpacking crash (from .../crash_5.1.6-1ubuntu1_i386.deb) ...
Selecting previously unselected package makedumpfile.
Unpacking makedumpfile (from .../makedumpfile_1.4.4-1_i386.deb) ...
Selecting previously unselected package kexec-tools.
Unpacking kexec-tools (from .../kexec-tools_1%3a2.0.3-1ubuntu2_i386.deb) ...
Selecting previously unselected package linux-crashdump.
Unpacking linux-crashdump (from .../linux-crashdump_3.5.0.25.31_i386.deb) ...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Setting up libdw1:i386 (0.153-1ubuntu1) ...
Setting up crash (5.1.6-1ubuntu1) ...
Setting up makedumpfile (1.4.4-1) ...
Setting up kexec-tools (1:2.0.3-1ubuntu2) ...
Generating /etc/default/kexec...
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.5.0-17-generic
Found initrd image: /boot/initrd.img-3.5.0-17-generic
Found memtest86+ image: /boot/memtest86+.bin
done
update-rc.d: warning: kdump start runlevel arguments (2) do not match LSB Default-Start values (0 1 2 3 4 5)
update-rc.d: warning: kdump stop runlevel arguments (none) do not match LSB Default-Stop values (6)
Processing triggers for ureadahead ...
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.5.0-17-generic
Setting up linux-crashdump (3.5.0.25.31) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
root@ubuntu:/home/user03#
root@ubuntu:/etc# service kdump start
* Loading crashkernel... [ OK ]
root@ubuntu:/etc#