当前的内核是4.14,如果想在最新的内核上enable kdump,用以前的发行版老是出错,经过无数测试,发现fedora server 27可以。
不过fedora server 27还没有正式发布,可以先下载下面的测试版:
https://kojipkgs.fedoraproject.org/compose/branched/Fedora-27-20171020.n.0/compose/Server/x86_64/iso/Fedora-Server-dvd-x86_64-27-20171020.n.0.iso
也许是makedumpfile有bug,copy vmcore的时候老是incomplete,不过没关系,我们可以用脚本自己copy。
首先在/etc/kdump.conf中把下面这行的注释去掉
kdump_pre /var/crash/scripts/kdump-pre.sh
然后写下面的脚本:
# cat /var/crash/scripts/kdump-pre.sh
#!/bin/bash
# file /var/crash/scripts/kdump-pre.sh
cd /sysroot/var/crash
id=$(ls vmcore.* | cut -d . -f 2 | tail -1)
if [[ -z $id ]]; then
id=0
else
id=$((id+1))
fi
cp /proc/vmcore /sysroot/var/crash/vmcore.$id
重新启动kdump:
# systemctl restart kdump
新生成的initramfs会包含这个新脚本:
# lsinitrd /boot/initramfs-4.13.0-rc5+kdump.img | grep kdump-pre
-rwxr-xr-x 1 root root 286 Oct 12 21:14 var/crash/scripts/kdump-pre.sh
如果var是单独的LV的话,用下面的脚本:
#!/bin/bash
# file /var/crash/scripts/kdump-pre.sh
mount /dev/fedora/var /sysroot
cd /sysroot/crash
id=$(ls vmcore.* | cut -d . -f 2 | tail -1)
if [[ -z $id ]]; then
id=0
else
id=$((id+1))
fi
cp /proc/vmcore /sysroot/crash/vmcore.$id
如果内存太大的话,copy会花很长时间,如果你要fix的bug经常panic的话,可以限制内存大小
在文件"/etc/default/grub"中添加mem=32G
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/root rd.lvm.lv=centos/swap rd.lvm.lv=fedora/swap crashkernel=256M intel_iommu=on biosdevname=0 pci=realloc mem=32G"
然后运行下面的function,重新生成grub.cfg
grub ()
{
set -x;
[[ $# == 0 ]] && kernel=0 || kernel=$1;
file=/etc/default/grub;
sudo sed -i '/GRUB_DEFAULT/d' $file;
sudo echo "GRUB_DEFAULT=$kernel" >> $file;
sudo grub2-mkconfig -o /boot/grub2/grub.cfg;
set +x;
sudo cat $file
}
这样kernel每次panic就会生成如下文件:
/var/crash/vmcore.0, vmcore.1, vmcore.2 等等