在Ubuntu系统上安装Kdump来处理系统崩溃

2020-02-03 13:56:38于丽

下面开始试验kdump特性:

  操作系统:ubuntu 12.10(3.5.0-17-generic)

安装kdump工具

复制代码
apt-get install kexec-tools crash

  发现安装过程中修改了grub,在引导内核配置上(/boot/grub/grub.cfg)多了如下参数

复制代码
crashker nel=384M-2G:64M,2G-:128M

  crashkernel用来指定保留内存的大小,我们可以知道crashkernel帮我们设定的保留区域的大小是:如果内存小于384M,不保留内存;如果内存大于等于384M但小于2G,保留64M;如果内存大于2G,保留128M。
修改kdump配置文件(/etc/default/kdump-tools)

复制代码
USE_KDUMP=1

下载dbgsym文件,改文件是用来吊事内核信息的文件

复制代码
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强制系统崩溃。

复制代码
echo ‘c’ > /proc/sysrq-trigger

    这造成内核崩溃,如配置有效,系统将重启进入kdump内核,当系统进程进入到启动 kdump服务的点时,(dump.时间戳文件)将会拷贝到你在kdump配置文件中设置的位置。ubuntu的缺省目录是:/var/crash/时间戳文件夹。然后系统重启进入到正常的内核。一旦回复到正常的内核,就可以在上述的目录下发现dump文件,即内存转储文件。可以使用之前安装的crash工具来进行分析。

生成dump文件后/var/crash的目录结构:

├── 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