菜单

金沙国际:途胜HEL7系统一管理理之内核管理

2019年3月5日 - www6165com
  1. Kdump工具
  1. Kdump工具

什么是Kdump?

Kdump是叁个基于kexec的内核崩溃转储机制,当系统崩溃时,kdump使用kexec运行到第一个基本。地球热能个基础叫做捕获内核或然又叫“2nd
kernel”,它以很少的内部存款和储蓄器运维捕获内核,并抓获转储镜像。Kdump的定义是当下最保障的木本转储技术,已被重点的linux厂商使用。(例如Red
Hat种类)

某天挂载了3个新硬盘后,作者的centos7体系第1天就涌出了崩溃现象,报错如题“failed
to start crash recovery kernel arming”.

  Kdump的行事体制是在根本崩溃时, 通过kexec 工具由BIOS运营一个备用水源,
由备用水源执行一类别职责,保存内部存款和储蓄器中崩溃内核的景色, 供后续故障分析用.

  Kdump的劳作体制是在基础崩溃时, 通过kexec 工具由BIOS运维2个备用水源,
由备用水源执行一比比皆是职务,保存内部存款和储蓄器中崩溃内核的状态, 供后续故障分析用。

什么是Kexec?

Kexec是一种能够基于现已运转基本的上下文火速运转新水源的一种机制,而不经过BIOS。BIOS的开发银行在一部分大型机器或许有大气外设的机械上时特地耗费时间。那种体制能够节省必要在分歧基础之间切换的开发职员的时间。
Kexec在根本空间和用户空间都有照应的零件,内核提供了多少个kexec重启功效的系统调用。用户空间的软件包”kexec-tools”使用那几个系统调用,并施行加载和指导第②个基本(捕获内核)。
Kexec由两有些构成,一是基础空间的种类调用kexec_load,负责在生产基础(或许叫第①个水源)运营时将捕获内核(也许叫第二个根本)加载到钦命的地方。而是用户空间的kexec-tools,它将捕获内核(second
kernel)的地址传递给生产基础(first
kernel),让系统在崩溃的时候能够找到捕获内核(second
kernel)的地点并运维。

意思大约为“内部存储器崩溃捕获机制未能成功运转”,一搜才领会那是因为1个名叫kdump的劳务不能够运维导致的。

  本文暗许AMD或INTEL X86_64框架结构, SportageHEL7体系环境. 

  本文暗中认可英特尔或INTEL X86_64架构, QashqaiHEL7种类环境.

Kdump怎么工作?

在方今系统一发布出崩溃时,新的捕获内核被加载,然后依照已安装的吩咐去将近年来在此之前发生崩溃的种类的内部存款和储蓄器保存到3个分裂平常的文件(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服务会将即时的内部存款和储蓄器镜像依照用户的配备保存起来。3个简练的方式是经过命令来触发:

[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()”,当中一个用来加载捕获内核 – “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”相关的布局参数。

上述正是2个kdump的简练流程。有关”kdump”能够捕获到的水源崩溃时间足以参照文书档案”/usr/share/doc/kexec-tools/kexec-kdump-howto.txt”。或然请参见大家写的测试用例
kdump-test。

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

那么怎么样是kdump呢?

1.1 内核管理工具Kdump安装

1.1 内核管理工科具Kdump安装

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

  Kdump是OdysseyHEL7中自带的根本管理工科具.在汉兰达HEL7.1事先的版本,kdump作为安装到位之后的可选组件自动安装,从瑞虎HEL7.1上马kdump被植入安装界面,作为系统基础工具供安装采用.

  Kdump是陆风X8HEL7中自带的基业管理工科具.在奥迪Q3HEL7.1以前的版本,kdump作为安装完毕今后的可选组件自动安装,从奥迪Q5HEL7.1开端kdump被植入安装界面,作为系统基础工具供安装选取.

这接下去查找未果的原因:

能够经过下面发号施令直接凯雷德PM包安装.

能够通过上面发号施令直接LX570PM包安装.

看来一个博文中说与开发银行文件配置有关

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

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

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

再者,Kdump还安顿了图形化管理工科具,能够因而上边发号施令安装.

而且,Kdump还安插了图形化管理工具,可以透过下边发号施令安装.

系统对crashkernel=auto的概念为:

yum -y install system-config-kdump

yum -y install system-config-kdump

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

  对于ENCOREHEL7.4及将来的本子,kdump支持INTEL IOMMU.
而不扶助OdysseyHEL7.3及在此以前的版本.

  对于HighlanderHEL7.4及今后的本子,kdump扶助INTEL IOMMU.
而不支持LX570HEL7.3及从前的版本.

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

1.2 通过命令行配置kdump内部存款和储蓄器体量

1.2 通过命令行配置kdump内部存款和储蓄器容积

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

  kdump能监督系统基本运市价况,其身份相比较特殊.
kdump的内部存款和储蓄器空间是在系统运行时,由引导程序分配的,相对于系统基本,kdump内部存款和储蓄器是3个独自的空间.

  kdump能监察和控制系统基本运营情形,其身价相比特殊.
kdump的内部存款和储蓄器空间是在系统运行时,由指引程序分配的,相对于系统基本,kdump内部存款和储蓄器是3个单身的空间.

假若系统内存> 16GB, crashkernel=auto会保留512M,
等同于crashkernel=512M

能够通过如下命令钦定kdump的内部存款和储蓄器空间大小.

能够因而如下命令钦点kdump的内部存储器空间大小.

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

crashkernel=128M     #为kdump保留128M的内存空间.

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

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

   crashkernel的值可以设置成“auto”,在有的富有较大内部存储器的系统中,利于达成Kdump的自动化管理.

   crashkernel的值能够设置成“auto”,在局部有着较大内部存款和储蓄器的系统中,利于完结Kdump的自动化管理.

crashkernel=auto

crashkernel=auto

  当然,crashkernel的值还足以经过如下情势落到实处更灵敏的配置.

  当然,crashkernel的值还足以经过如下方式落到实处更灵敏的配置.

相关文章

发表评论

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

网站地图xml地图