关于Failed to start Crash recovery kernel arming 的报错

 sudo crash /usr/lib/debug/lib/modules/<kernel>/vmlinux
/var/crash/<timestamp>/vmcore  #启动crash调试

  Kdump的行事体制是在根本崩溃时, 通过kexec 工具由BIOS运营1个备用水源,
由备用水源执行一名目繁多职务,保存内部存款和储蓄器中崩溃内核的场馆, 供后续故障分析用。

什么是Kexec?

Kexec是一种能够依据已经运营基础的上下文火速运维新基础的一种体制,而不经过BIOS。BIOS的起步在一些重机大概有雅量外设的机械上时专门耗费时间。这种体制能够节省需求在不相同基础之间切换的开发人士的小时。
Kexec在根本空间和用户空间都有照应的机件,内核提供了多少个kexec重启功效的种类调用。用户空间的软件包”kexec-tools”使用这几个种类调用,并推行加载和辅导第一个根本(捕获内核)。
Kexec由两有的构成,一是水源空间的连串调用kexec_load,负责在生育基础(或然叫首个水源)运维时将捕获内核(或许叫首个根本)加载到钦点的地方。而是用户空间的kexec-tools,它将捕获内核(second
kernel)的地方传递给生产基础(first
kernel),让系统在崩溃的时候能够找到捕获内核(second
kernel)的地点并运维。

于关闭了机器上的kdump功效;

  Kdump是凯雷德HEL7中自带的基础管理工科具.在中华VHEL7.1事先的本子,kdump作为安装到位以后的可选组件自动安装,从帕杰罗HEL7.1上马kdump被植入安装界面,作为系统基础工具供安装选取.

  (1)使用sysctl 命令;

Kdump怎么工作?

在时下系统爆发崩溃时,新的破获内核被加载,然后依据已设置的通令去将最近事先爆发崩溃的系列的内部存款和储蓄器保存到两个出奇的文本(vmcore)中。

上面以Fedora26做为测试演示。(Fedora和CentOS类别的种类现已在kenrel中开拓了CONFIG_KEXEC*选项。)

首先需求在系统运维时留下出给第三个基本运转的内部存款和储蓄器。内核参数”crashkernel=160M”会在系统启动时留下出160M内部存款和储蓄器的长空给捕获内核运转使用。”crashkerel=xM”还帮衬其余的参数,详细的能够参考内核参数文书档案
基本参数。

# dmesg | grep -i reserving
[    0.000000] Reserving 160MB of memory at 656MB for crashkernel (System RAM: 2047MB)

系统运维后大家得以从上边的下令中观察已经预留出了160M的内部存款和储蓄器从内部存款和储蓄器的656M处。

设置用户态的包”kexec-tools”,软件包中会提供kdump所需的劳动和”kexec”快捷内核运维命令,和削减过滤内部存款和储蓄器的”makedumpfile”命令。

[root@localhost ~]# dnf install -y kexec-tools

布置,修改kdump相关的布置文件。

[root@localhost ~]# grep -v ^# /etc/kdump.conf 

path /var/crash
core_collector makedumpfile -l --message-level 1 -d 31


[root@localhost ~]# grep -v ^# /etc/sysconfig/kdump
KDUMP_KERNELVER=""

KDUMP_COMMANDLINE=""

KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet"

KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off numa=off udev.children-max=2 panic=10 rootflags=nofail acpi_no_memhotplug transparent_hugepage=never nokaslr"

KEXEC_ARGS=""

KDUMP_IMG="vmlinuz"

KDUMP_IMG_EXT=""

布署文件/etc/kdump.conf设置了kdump发生时vmcore文件的蕴藏格局,此文件修改后供给重启kdump的劳务。

计划文件/etc/sysconfig/kdump,假设只是修改了COMMANDLINE相关的参数,则不须要去重新build生成新的initramfs文件。

启动kdump服务:

[root@localhost ~]# systemctl restart kdump
[root@localhost ~]# systemctl status kdump
● kdump.service - Crash recovery kernel arming
   Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled)
   Active: active (exited) since Sat 2017-07-15 10:46:22 UTC; 36s ago
  Process: 2172 ExecStop=/usr/bin/kdumpctl stop (code=exited, status=0/SUCCESS)
  Process: 2180 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)
 Main PID: 2180 (code=exited, status=0/SUCCESS)

Jul 15 10:46:21 localhost dracut[4264]: -rw-r--r--   1 root     root          127 Mar 28 02:15 usr/share/zoneinfo/Etc/UTC
Jul 15 10:46:21 localhost dracut[4264]: drwxr-xr-x   3 root     root            0 Jun 22 13:38 var
Jul 15 10:46:21 localhost dracut[4264]: lrwxrwxrwx   1 root     root           11 Jun 22 13:38 var/lock -> ../run/lock
Jul 15 10:46:21 localhost dracut[4264]: lrwxrwxrwx   1 root     root            6 Jun 22 13:38 var/run -> ../run
Jul 15 10:46:21 localhost dracut[4264]: drwxr-xr-x   2 root     root            0 Jun 22 13:38 var/tmp
Jul 15 10:46:21 localhost dracut[4264]: ========================================================================
Jul 15 10:46:21 localhost dracut[4264]: *** Creating initramfs image file '/boot/initramfs-4.11.9-300.fc26.x86_64kdump.img' done ***
Jul 15 10:46:22 localhost kdumpctl[2180]: kexec: loaded kdump kernel
Jul 15 10:46:22 localhost kdumpctl[2180]: Starting kdump: [OK]
Jul 15 10:46:22 localhost systemd[1]: Started Crash recovery kernel arming.

拥有的劳务都布置达成,假如那时候系统发生了panic只怕其余的有的导致系统崩溃的场景,那是kdump服务会将即时的内部存储器镜像根据用户的布局保存起来。一个简约的法子是透过命令来触发:

[root@localhost ~]# echo c > /proc/sysrq-trigger

[some console log]
... ...
         Starting Kdump Vmcore Save Service...
kdump: dump target is /dev/vda1
kdump: saving to /sysroot//var/crash/127.0.0.1-2017-07-16-04:21:36/
[    2.718001] EXT4-fs (vda1): re-mounted. Opts: data=ordered
kdump: saving vmcore-dmesg.txt
kdump: saving vmcore-dmesg.txt complete
kdump: saving vmcore
Copying data                       : [100.0 %] -
kdump: saving vmcore complete
... ...
[/some console log]

当系统重启后就能在内定的目录下看看变化的vmcore文件。能够参考布局文件”/etc/kdump.conf”里的”path”字段。

[root@localhost ~]# ls -lt /var/crash/*/
total 33492
-rw-------. 1 root root 34253115 Jul 16 04:21 vmcore
-rw-r--r--. 1 root root    40360 Jul 16 04:21 vmcore-dmesg.txt

转储文件被保留后方可用”crash”那么些软件包来分析那些”vmcore”文件。

千帆竞发波及了Kexec内核部分提供了部分系统调用,”kexec_load()” 和
“kexec_file_load()”,当中3个用来加载捕获内核 – “kexec
-l”,别的一个来提供系统重启 – “kexec -e”。

系统调用”kexec_load()”能够加载贰个新的基石并随后能够被”reboot()”调用。它是被这样定义的:

long kexec_load(unsigned long entry, unsigned long nr_segments,
                       struct kexec_segment *segments, unsigned long flags);

里头二个相比较首要的是”kexec_segment”结构体:

struct kexec_segment {
    void   *buf;        /* Buffer in user space */
    size_t  bufsz;      /* Buffer length in user space */
    void   *mem;        /* Physical address of kernel */
    size_t  memsz;      /* Physical address length */
};

当reboot()的参数为”LINUX_REBOOT_CMD_KEXEC”并被调用时,则运维新的水源时就调用”kexec_load()”系统调用。别的“CONFIG_KEXEC”必须在编写翻译kernel时被打开。

系统调用”kexec_load_file()”会设置叁个参数”kernel”和”initramfs”给”kexec”命令。”kexec”会读取那几个多少来成立对应的数据段。

long kexec_file_load(int kernel_fd, int initrd_fd,
                           unsigned long cmdline_len, const char *cmdline,
                           unsigned long flags);

同样的”CONFIG_KEXEC_FILE”参数也要在基础编写翻译时被打开。

此时此刻的超过二分一批发版都已经开辟了”KEXEC”相关的配置参数。

如上就是1个kdump的大约流程。有关”kdump”能够捕获到的基本崩溃时间足以参照文书档案”/usr/share/doc/kexec-tools/kexec-kdump-howto.txt”。或许请参考大家写的测试用例
kdump-test。

参考资料:
kdump-paper
kdump-introduction
fedora-kexec-tools

若果系统的内存> 8 GB不过<= 16
GB,crashkernel=auto会保留256M,等同于crashkernel=256M;

2 linux内核调校

  本文私下认可英特尔或INTEL X86_64框架结构, 君越HEL7体系环境.

什么是Kdump?

Kdump是三个依据kexec的内核崩溃转储机制,当系统崩溃时,kdump使用kexec运行到第1个基本。地热个基本叫做捕获内核大概又叫“2nd
kernel”,它以很少的内部存款和储蓄器运营捕获内核,并抓获转储镜像。Kdump的定义是眼下最保障的木本转储技术,已被珍视的linux厂商使用。(例如Red
Hat体系)

接下去正是改写配置,然而没能在系统中找到博文中所说的/etc/grub.conf这些文件,后来想到从Centos
7之后运转就使用grub2 了,所以vi
/etc/grub2.cfg把内部的crashkernel=auto改成crashkernel=256M重启就成功了。

sysctl kernel.threads-max = 16161

(2)开启本地ipv4转载效率.

这接下去查找未果的来由:

  在root权限下,通过sysctl 命令的木本参数调校, 基本上能间接控制linux
的水源全体行为举止, 满意实际生产中的绝大部分供给.

1.1 内核管理工科具Kdump安装

借使系统内部存款和储蓄器> 16GB, crashkernel=auto会保留512M,
等同于crashkernel=512M

  (2)假如在装置界面禁用了kdump, 而安装到位之后再经过systemctl start
kdump运营kdump, 会报内部存款和储蓄器不足不恐怕起动的错误.
kdump的内部存款和储蓄器空间是在基础加载此前由boot分配的, 所以必须修改boot.
最好应用kdump的图样管理工科具 system-config-kdump 加载kdump的私下认可配置,
使kdump处于可用状态, 然后重启系统, systemctl status kdump
服务处于激活状态(active).

2.4 sysctl 调校内核参数

那么怎么样是kdump呢?

(3)设定进程能被分配到的最大内部存款和储蓄器空间.

  利用crash成效组件能够分析linux内核崩溃时的网络、磁盘、CPU、系统基本状态,火速稳定故障点.

查看/etc/grub.conf 文件,发现crashkernel=auto,

sudo yum -y install crash       #安装crash
sudo debuginfo-install kernel    #安装内核调试模块

crashkernel=128M    #为kdump保留128M的内部存款和储蓄器空间.

某天挂载了2个新硬盘后,小编的centos7系统第2天就应运而生了崩溃现象,报错如题“failed
to start crash recovery kernel arming”.

1.1 内核管理工科具Kdump安装

  Kdump是PAJEROHEL7中自带的基业管理工科具.在奥迪Q7HEL7.1事先的版本,kdump作为安装到位之后的可选组件自动安装,从中华VHEL7.1上马kdump被植入安装界面,作为系统基础工具供安装选择.

系统对crashkernel=auto的概念为:

cp /etc/sysctl.d/99-sysctl.conf /etc/sysctl.d/99-sysctl.conf.bak    #备份系统默认的内核参数文件
vim /etc/sysctl.d/99-my.conf    #创建新的内核参数文件

...
<tunable class>.<tunable> = <value>   #写入要调校的参数类和值
 <tunable class>.<tunable> = <value>
...
save    #保存文件
reboot\ sysctl -p /etc/sysctl.d/99-my.conf  #重启系统或者使用sysctl -p 命令载入新的内核参数配置

  (2)假使在安装界面禁止使用了kdump, 而安装实现未来再经过systemctl start
kdump运维kdump, 会报内部存储器不足不也许起动的错误.
kdump的内部存款和储蓄器空间是在基本加载在此以前由boot分配的, 所以必须修改boot.
最好利用kdump的图片管理工科具 system-config-kdump 加载kdump的暗中同意配置,
使kdump处于可用状态, 然后重启系统, systemctl status kdump
服务处于激活状态(active).

一旦系统的内部存款和储蓄器 <= 8 GB 对kdump
kernel不会保留任何内容;也正是说,crashkernel=auto 等

(4)设定系统中还要运维的最大进度数.

2 linux内核调校

看样子1个博文中说与开行文件配置有关

1.3 Kdump的存储

在root权限下,通过sysctl 命令的内核参数调校, 基本上能一向控制linux
的根本全体行为, 满意实际生产中的绝大部分必要.

设置虚拟机时,给虚拟机设置的内部存款和储蓄器为1G,所以说系统关闭了kdump。

crashkernel=128M@16M    #为Kdump保留128M的内存空间,内存地址从16M(physical address 0x01000000)开始.

systemctl start kdump.service    #启动Kdump服务
systemctl enable kdump.service    #使Kdump开机自启
systemctl is-active kdump       #自小编批评Kdump是不是已运营
active
echo 1 >
/proc/sys/kernel/sysrq   #效仿内核崩溃,检查/var/crash/是或不是自动保存Kdump捕获的基本崩溃数据,
以显明Kdump是或不是健康办事
echo c > /proc/sysrq-trigger

意思大约为“内部存款和储蓄器崩溃捕获机制未能成功运维”,一搜才领会那是因为一个称呼kdump的劳务无法运转导致的。

yum -y install kexec-tools
rpm -q kexec-tools

crashkernel=128M@16M    #为Kdump保留128M的内部存款和储蓄器空间,内部存款和储蓄器地址从16M(physical
address 0x01000000)起先.

kdump 是一种先进的基于 kexec 的水源崩溃转储机制。当系统崩溃时,kdump
使用 kexec
运转到第三个基本。第二个基础经常称为捕获内核,以相当小内部存款和储蓄器运行以捕获转储镜像。第2个根本保留了内部存款和储蓄器的一片段给第壹内核运行用。由于
kdump 利用 kexec 运行捕获内核,绕过了
BIOS,所以首先个水源的内存得以保留。那是水源崩溃转储的本来面目。详细的在:http://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/index.html\#major3

  Kdump的劳作体制是在基本崩溃时, 通过kexec 工具由BIOS运转三个备用水源,
由备用水源执行一层层职分,保存内部存款和储蓄器中崩溃内核的图景, 供后续故障分析用.

crash组件能够经过奥迪Q3PM包安装.

2.4 sysctl 调校内核参数

sudo yum -y install crash       #安装crash
sudo debuginfo-install kernel    #设置内核调节和测试模块

crash组件能够经过SportagePM包安装.

  RAV4HEL7中提供二种基本调校方法:

发表评论

电子邮件地址不会被公开。 必填项已用*标注