Kdump 专门的学业流程

www.301.net 1
sysctl net.ipv4.ip_forward = 1

什么是Kdump?

Kdump是三个依据kexec的水源崩溃转储机制,当系统崩溃时,kdump使用kexec运行到第二个根本。地球热能个根本叫做捕获内核可能又叫“2nd
kernel”,它以少之甚少的内部存款和储蓄器运转捕获内核,并抓获转储镜像。Kdump的概念是现阶段最保证的基石转储技艺,已被第风流罗曼蒂克的linux店家使用。(比方Red
Hat类别)

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

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

什么是Kexec?

Kexec是风流倜傥种能够基于现已运营根底的上下文快捷运维新底蕴的风流罗曼蒂克种机制,而不经过BIOS。BIOS的启航在有的大型机器或许有大气外设的机械上时特意耗费时间。这种体制能够节省必要在区别根基之间切换的开垦职员的时辰。
Kexec在幼功空间和客商空间都有对应的组件,内核提供了多少个kexec重启功用的类别调用。客户空间的软件包”kexec-tools”使用那些连串调用,并实践加载和指导第2个水源(捕获内核)。
Kexec由两局地构成,一是内核空间的类别调用kexec_load,负担在临蓐根底(或然叫第三个水源)运营时将捕获内核(也许叫第3个根本)加载到钦命的位置。而是客户空间的kexec-tools,它将捕获内核(second
kernel)之处传递给生产底蕴(first
kernel),让系统在崩溃的时候能够找到捕获内核(second
kernel)的地点并运维。

情趣大致为“内部存款和储蓄器崩溃捕获机制未能得逞运转”,风流倜傥搜才知晓那是因为二个称作kdump的劳动不或然运转招致的。

crashkernel=auto

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(卡塔尔国”,当中一个用来加载捕获内核 – “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_www.301.net,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(卡塔尔(英语:State of Qatar)的参数为”LINUX_REBOOT_CMD_KEXEC”并被调用时,则运维新的水源时就调用”kexec_load(卡塔尔(英语:State of Qatar)”系统调用。其余“CONFIG_KEXEC”必得在编写翻译kernel时被展开。

系统调用”kexec_load_file(卡塔尔(英语:State of Qatar)”会安装2个参数”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”相关的配备参数。

上述正是壹个kdump的简易流程。有关”kdump”能够捕获到的底蕴崩溃时间足以参考文书档案”/usr/share/doc/kexec-tools/kexec-kdump-howto.txt”。只怕请参谋大家写的测量检验用例
kdump-test。

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

某天挂载了叁个新硬盘后,笔者的centos7体系第二天就应时而生了崩溃现象,报错如题“failed
to start crash recovery kernel arming”.

  在root权限下,通过sysctl 命令的底蕴参数调校, 基本上能直接调控linux
的基业全体行为举止, 满足实际生育中的绝大超多必要.

那正是说什么样是kdump呢?

crash>log    #崩溃时日志记录
crash>bt     #崩溃时的堆栈信息
crash>vm     #崩溃时的内存状态
crash>ps     #崩溃时的进程状态
crash>files   #崩溃时的打开的文件
crash>exit   #退出crash

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

  要求注意的是

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

  利用crash功效组件能够深入分析linux内核崩溃时的互联网、磁盘、CPU、系统基本状态,飞快稳固故障点.

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

测验一下:

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

core_collector makedumpfile -c

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

朝气蓬勃经系统的内部存款和储蓄器 <= 8 GB 对kdump
kernel不会保留任何内容;相当于说,crashkernel=auto 等

#path /var/crash    #kdump本地存储目录,默认是存放在/var/crash目录下,可以根据使用习惯设置.
path /usr/local/cores 
...
#raw /dev/vg/lv_kdump    #kdump可以直接写入移动介质.
raw /dev/sdb1
...
#nfs my.server.com:/export/tmp    #kdump可以通过NFS保存到网络上其它存储设备中.
nfs test.example.com:/export/cores
...
#ssh user@my.server.com      #kdump可以通过SSH传输协议,保存远程主机上.
#sshkey /root/.ssh/kdump_id_rsa
ssh user@test.example.com
sshkey /root/.ssh/mykey

查看/etc/grub.conf 文件,发现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 命令载入新的内核参数配置

kdump 是风流倜傥种进取的基于 kexec 的内核崩溃转储机制。当系统崩溃时,kdump
使用 kexec
运营到第四个基本。第四个根基平常称为捕获内核,以非常的小内部存款和储蓄器运维以捕获转储镜像。第一个根本保留了内部存款和储蓄器的大器晚成部分给第二内核运转用。由于
kdump 利用 kexec 运行捕获内核,绕过了
BIOS,所以首先个水源的内部存款和储蓄器得以保留。那是内核崩溃转储的真相。详细的在:http://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/index.html#major3

  kdump.conf中还足以在 core_collector makedumpfile 选项后拉长” -c “,
使kdump文件能够被核减,以节约存款和储蓄空间.

万生龙活虎系统的内部存款和储蓄器> 8 GB然则<= 16
GB,crashkernel=auto会保留256M,等同于crashkernel=256M;

  (2卡塔尔(英语:State of Qatar)修改/etc/sysctl.d/ 目录下的基本配置文件;

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

  crashkernel=<范围1>:<大小1>, <范围2>:<大小2>

系统对crashkernel=auto的概念为:

1.1 内核管理工科具Kdump安装

  本文默许英特尔或INTEL X86_64布局, SportageHEL7系统处境. 

www.301.net 1

  kdump能监察和控制连串基本运长势况,其身价比较特殊.
kdump的内部存款和储蓄器空间是在系统运维时,由带领程序分配的,相对于系统基本,kdump内部存款和储蓄器是二个单独的空间.

(1卡塔尔国调节最大央浼的aio数量.

  

(3卡塔尔(قطر‎设定进度能被分配到的最大内部存款和储蓄器空间.

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图