enable kdump on fedora server 27

当前的内核是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 等等

你可能感兴趣的:(linux)